现在的位置: 首页 > 专题 > 机器人 > Robotics Studio > 设计中心 > 文档 > 专题 > 机器人 > 正文

Robotics Studio学习教程:第十天——利用 DSS 建立虚拟环境(1)

2014年04月27日 Robotics Studio, 文档, 机器人 ⁄ 转载:原文链接 ⁄ 共 3183字 ⁄ 字号 暂无评论 ⁄ 阅读 1,062 次
Microsoft Robotics Studio

Microsoft Robotics Studio

继之前分享的一篇《Robotics Studio学习教程:第九天——用DSS 改写自行走小车的 Activity》, 我们将继续分享下一篇《Robotics Studio学习教程:第十天——利用 DSS 建立虚拟环境(1)》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。

 

[Robotics Studio] DSS with VSE -- Day10

第十天, 我们开始利用 DSS 玩弄虚拟环境...

首先建立 VS 2008 DSS Service 2.0 项目, 就取名叫 VSE_Example 吧, 但是这回我们在项目建立时的对话框, 选择我们要使用 "Simulation Engine" 这个内建的 DSS Service 作为 Partner Service, 你可以切换对话框的 tab 到 Partners , 然后在 Services: 下输入 engine (就会过滤到只剩下有 engine 的 DSS Service) , 然后点选 Add as partner , 就会出现在右边当中,
如下图:

clip_image002

之后点选 ok, 你会注意到 VS 2008 帮你产生的项目多参考了 SimulationEngine.Proxy, 以及多了下面这样的 code:

  1.  /// <summary>
  2.  /// SimulationEngine partner
  3.  /// </summary>
  4. [Partner("SimulationEngine", Contract = engine.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.UseExistingOrCreate)]
  5. engine.SimulationEnginePort _simulationEnginePort = new engine.SimulationEnginePort();

 

所谓的 Partner Service , 表示该 DSS Service 需要搭配的其他  DSS Service, 注意我们使用的 CreationPolicy (生成原则) 是 UseExistingOrCreate , 表示没找到该 Service 的话就生一个新的, 否则就用现有的(跟其他 DSS Service 共享).

现在你可以执行它, 或是建置它, 然后在 VPL 当中拉出来放着, 直接执行.

执行结果就是, 会跑出 Visual Simulation Environment , 但是画面都是...嘿嘿...ㄜ...黑黑的...

这是因为 Simulation Engine 只是启动虚拟环境, 比照之前, 我们还少了光源, 还少了地板, 还少了天空, 还少了其他等等等.

为了要加上这些东西, 我们要加入一些等一下会用到的参考 DLL , 在方案的参考上右键单击点选加入参考, 选择浏览, 然后选择你的 Robotics Developer Studio 安装目录下的 bin , 你会看到一堆 DLL , 我们要加入两个, 分别是 PhysicsEngine.dll (负责物理引擎) , RoboticsCommon.dll , SimulationCommon.dll, SimulationEngine.dll 这几个.

接着在 VSE_Example.cs 的 using 新增 (你也可以等一下写 code 的时候再右键单击点选 "解析" , VS 2008 会去帮你搜寻参考 DLL , 加上正确的 using (如果有复选题也会让你自己挑选))

  1. using Microsoft.Robotics.Simulation.Engine;
  2. using Microsoft.Robotics.PhysicalModel;
  3. using Microsoft.Robotics.Simulation.Physics;

ok, 我们在 VSE_ExampleService 这个 class 内部加上如下的 code, 批注我就直接写在 code 当中:

  1. /// <summary>
  2. /// 設定一個鏡頭觀景窗 CameraView
  3. /// </summary>
  4. private void SetupCamera()
  5. {
  6.     CameraView view = new CameraView();
  7.     view.EyePosition = new Vector3(-1.65f, 1.63f, -0.29f);
  8.     view.LookAtPoint = new Vector3(-0.68f, 1.38f, -0.18f);

  9.     SimulationEngine.GlobalInstancePort.Update(view);
  10. }

  11. /// <summary>
  12. /// 加上天空 , 太陽
  13. /// </summary>
  14. void AddSky()
  15. {
  16.     //加上天空
  17.    SkyDomeEntity sky = new SkyDomeEntity("skydome.dds""sky_diff.dds");
  18.    SimulationEngine.GlobalInstancePort.Insert(sky);
  19.  
  20.     //用平行光源 (無限遠處的光源) 來模擬太陽
  21.    LightSourceEntity sun = new LightSourceEntity();
  22.    sun.State.Name = "Sun";
  23.    sun.Type = LightSourceEntityType.Directional;
  24.    sun.Color = new Vector4(0.8f, 0.8f, 0.8f, 1);
  25.    sun.Direction = new Vector3(0.5f, -.75f, 0.5f);
  26.    SimulationEngine.GlobalInstancePort.Insert(sun);
  27.  }

  28. /// <summary>
  29. /// 加上地面
  30. /// </summary>
  31. void AddGround()
  32. {
  33.    // 產生一個寬廣的地面
  34.    HeightFieldEntity ground = new HeightFieldEntity(
  35.         "simple ground"// name
  36.         "03RamieSc.dds"// texture image
  37.         new MaterialProperties("ground",
  38.             0.2f, // restitution
  39.             0.5f, // dynamic friction
  40.             0.5f) // static friction
  41.         );
  42.     SimulationEngine.GlobalInstancePort.Insert(ground);
  43. }

 

现在我们要在启动时呼叫这些函式, 所以 VSE_ExampleService.Start() 的程序代码改为如下:

  1. /// <summary>
  2. /// Service start
  3. /// </summary>
  4. protected override void Start()
  5. {

  6.    //
  7.     // Add service specific initialization here
  8.     //

  9.     base.Start();

  10.     //加入一些必要的物體.
  11.     SetupCamera();
  12.     AddSky();
  13.     AddGround();
  14. }

 

恩, 这次执行以后, 就会看到一些东西了...

clip_image004

明天再来为它加点东西, 而且来跟 VPL 整合.

 

让我们继续一下章教程:

《Robotics Studio学习教程:第十天——利用 DSS 建立虚拟环境(2)》

fgx

分享到:

Wopus问答

×