AddSky 和 AddGround 方法用於設置 BoeBot 周圍的環境。AddSky 方法將創 建一個新的 SkyDomeEntity 類型,並將其插入模擬中。此外,還要向模擬中插入 有向光線,用以代表太陽光(此方法的代碼如圖 10 所示)。
圖 10 添加天空
void AddSky() {
// Add a sky using a static texture. We will use the sky texture
// to do per pixel lighting on each simulation visual entity
SkyDomeEntity sky = new SkyDomeEntity("skydome.dds",
"sky_diff.dds");
SimulationEngine.GlobalInstancePort.Insert(sky);
// Add a directional light to simulate the sun.
LightSourceEntity sun = new LightSourceEntity();
sun.State.Name = "Sun";
sun.Type = LightSourceEntityType.Directional;
sun.Color = new Vector4(0.8f, 0.8f, 0.8f, 1);
sun.Direction = new Vector3(0.5f, -.75f, 0.5f);
SimulationEngine.GlobalInstancePort.Insert(sun);
}
AddGround 方法使用 HeightFIEldEntity 類型在零海拔處創建廣闊的地面。 隨 MSRS 安裝提供的紋理圖像用於代表地面。此方法的代碼如下所示:
void AddGround()
{
// create a large horizontal plane, at zero elevation.
HeightFieldEntity ground = new HeightFIEldEntity(
"simple ground", // name
"03RamIESc.dds", // texture image
new MaterialPropertIEs("ground",
0.2f, // restitution
0.5f, // dynamic friction
0.5f) // static friction
);
SimulationEngine.GlobalInstancePort.Insert(ground);
}
下一個要添加的是 Boe-Bot 實體。AddBoeBot 方法接受傳入 Vector3 參數, 此參數用於表示機器人的位置。此位置將傳遞給先前創建的 BoeBot 實體構造函 數。AddBoeBot 方法也將啟動模擬的 Boe-Bot 驅動器服務作為實體合作伙伴。此 方法的代碼如下所示:
void AddBoeBot(Vector3 pos)
{
BoeBot boeBot = new BoeBot(pos);
boeBot.State.Name = "SimulatedBoeBot";
// Start simulated Boe-Bot Drive service
CreateService(
drive.Contract.IdentifIEr,
Microsoft.Robotics.Simulation.Partners.CreateEntityPartner (
"http://localhost/" + boeBot.State.Name));
SimulationEngine.GlobalInstancePort.Insert(boeBot);
}