为了用gazebo应对需求和解决当前问题,我们提出分布式结构。gazebo将被分解为物理模拟,渲染,用户界面,通信,传感器生成的库。提供三个不同的进程:physics_sim, sensor_gen, gui, and a master for coordination
Communication Between Processes
每个进程之间的通信,将利用google::protobufs and sockets的组合。模拟的世界将发布本体位姿的更新,传感器产生和GUI用户界面将这些信息发布出去。这种机制将允许运行的模拟器的反馈,并且提供gazebo控制方面的方便的机制。
System
Gazebo Master
这是很重要的server话题。它提供名称查找,话题管理。单一的主机可以处理多个物理模拟,传感器生成和用户界面。Communication Library
该库几乎被所有后续的库所使用。充当了gazebo的通信和传输机制。它目前只是支持发布/接收,但也可能用于RPCPhysics Library
物理库可以被用于任何符合内部API(TBD)动态工具。它也提供了简单的外边接口,来建立工作物理模拟。Collision Library
这是一个抽象的概念库,来处理不同的碰撞引擎,并且为用户提供简单的外部接口。Rendering Library
渲染库为GUI和传感器生成提供简单的界面。因为我们没有更好的选择,我们当前用OGRE。有可能为渲染引擎编写插件。Sensor Generation
传感器生成库实现所有传感器的类型,从物理模拟器和实例传感器所接收世界状态的更新。
GUI
GUI主要功能包括显示模拟器的当前状态,并且提供用户输入的方便手段。因为我们用wxWidgets,所有我们不需要外边或内部API。