Gazebo教程(二)——Gazebo的结构

1、简介

Gazebo使用的是分布式的结构,它包含了不同的libraries来完成物理仿真、演示、用户接口、通讯、传感器的仿真等功能。此外,gazebo提供了两个可执行程序来运行仿真,就是上一篇说的gzserver和gzclient,它们之间通过通讯的library来通讯。

2、进程间的通信

通信库现在使用的是开源库Google Protobuf来完成消息的序列化,通过boost::ASIO来完成交换机制。它支持publish/subscribe通信规范。举例来说,一个仿真的world文件会publish姿态更新数据、传感器数据,GUI会在界面中显示这些数据。这个机制允许在仿真过程中自检,并且提供了一个方便的机制来控制gazebo的状态。

3、System系统

3.1 Gazebo Master

它本质上来说是一个topic名称服务器,它提供了名称查找和topic的管理功能。一个单独的master可以处理复杂的物理仿真、传感器数据产生和GUI界面。

3.2 Communication Library

Dependencies:Protobuf and boost::ASIO

External API:

Internal API:None

Advertised Topics:None

Subscribed Topics:None

这个库是所有后来库都使用的,它作为gazebo通信和数据交互的机制。它现在仅仅支持publish和subscribe,但它还是可以在通过努力之后使用RPC。

3.3 Physics Library

Dependencies:动态引擎(包括内部碰撞检测)

External API:提供一个简单的一般性的接口来访问物理仿真。

Internal API:定义一个基础的接口来访问第三方的物理仿真动态引擎。

Physics libraries提供了接口来访问仿真元件,包口rigid物体,碰撞体积,关节咬合限制。这个接口继承了四个开源物理引擎。

model文件可以通过这些物理引擎调用,它们提供了方法来验证不同的算法和仿真特性。

3.4 Rendering Library

Dependencies:OGRE

External API:加载,初始化,环境产生

Internal API:保存视频元数据,通过OGRE API来产生。

Rending library通过OGRE库提供了一个3D演示场景给GUI和传感器库,它还包括灯光、字体和天空的仿真,也可以自己写插件。

3.5 Sensor Generation

Dependencies:Rendering Library, Physics Library

External API:提供初始化接口并运行传感器的设置等。

Internal API:TBD

Sensor Generation library例化了所有的传感器变量,监听world的变化。

3.6 GUI

Dependencies:Rendering Library,Qt

External API:None

Internal API:None

GUi使用Qt来创建图形工具,用户通过它们来控制仿真的运行。包括时间的设置,model的变更等。

3.7 Plugins

physics,sensor,rendering library支持plugins,这些plugins为用户提供接口访问特定的library而不需要调用communication system。

发布者

harifun

小学的时候,说自己要当一名科学家!那时候,看到新闻联播在宣传“四化”,立志要为现代化作出贡献!高中立志要做机器人,本科和硕士学的自动化!毕业进入华为,因为是测试岗位而离开,然后进入创业公司做工业扫地机器人和服务式机器人!A轮完成数千万级融资后因家庭原因离开上海,回武汉进入一家上市公司从事激光雷达设计工作!机器人是我一直以来的追求,希望有一天我能实现我的理想!

发表评论

电子邮件地址不会被公开。 必填项已用*标注