官方的教程:http://gazebosim.org/tutorials?tut=architecture&cat=get_started

一、总述
(1)gazebo采用的是分布式结构,将物理环境的仿真和解析、用户的界面接口、通信、传感器数据的产生四部分采用不同的库去实现。
(2)gazebo提供两种方式去运行仿真:gzserver和gzclient
gzserver能够仿真物理环境与渲染、传感器
gzclient提供图形界面去观察整个仿真的实现过程。
将gzserver服务端和gzclient客户端联系起来的是gazebo的通信库。

二、过程中的通信
(1)gazebo 一系列的消息是使用基于开源的Google Protobuf的通信库。https://blog.csdn.net/u010100466/article/details/72668030
这条链接有详细说明Protobuf的内容,下面是其中的一段:
在这里插入图片描述

(2)采用boot::ASIO网络库作为消息传送的机制。
(3)在通信的实例中,它提供消息的发布者和接收者。一个例子就是在仿真过程中机体的位置发布者更新后,传感器和显示界面将利用这些消息去更新输出。也就是仿真显示的主体的位置跟着变化。这个通信的机制能够允许仿真过程的内部调整就是仿真系统内部的自动调整以减少错误产生。同时提供比较方便的手段去控制仿真全程的方方面面。

三、gazebo的Master
这个类似ros系统通信机制的主节点一样,不过它是话题(topic),提供topic名字的搜索和topic的管理.。一个单独的Master可以管理多个物理环境的仿真、传感器的产生和图形界面。

四、与通信有关的库
依赖的库:Protobuf 和 boot::ASIO
外部接口:这个根据自己的需求添加相关的库去实现通信。
内部接口:没有
广播的话题:没有
接收的话题:没有
这个与通信有关的库是所有子库实现的基础,一般情况下都会包含这个库。
使用:数据产生与接收控制、命令控制与反馈

五、物理环境的库
依赖的库:动力学引擎(内部的碰撞检测)
外部接口:提供一个简单和大致的物理仿真界面
内部接口:提供第三方动态引擎定义物理库的基本接口。
这个物理环境的库为仿真的基本部分提供一个简单和基本的界面,包括刚体、碰撞形状、关节的相关约束。这个借口已经内嵌入四个开源的物理引擎:
Open Dynamics Engine(ODE)
Bullet
Simbody
Dynamic Animation and Robottics Toolkit(DART)
通过sdf格式的物理描述模型的xml格式的文件能够被这些物理引擎加载。它们提供不同的实现算法和仿真特性。
使用:定义一些物体的运动特性、碰撞特性等

六、渲染的库
依赖的库:OGRE
外部接口: 允许加载、初始化和场景的创建
内部接口: 存储元数据以进行可视化,通过调用OGRE库实现模型的渲染。
这个解析库使用OGRE、GUI库和传感器的库去提供一个解析三维的场景的简单界面。包括灯光、纹理和天空的仿真。可以为渲染引擎编写插件。
使用:渲染建立的模型

七、传感器数据的产生
依赖的库:渲染的库和物理环境的库
外部接口:提供基本的传感器的初始化和传感器的设置
内部接口:TBD(暂时不知这个是什么)
这个传感器库能够实现各种类型的传感器,从物理环境仿真中监听仿真环境的更新根据传感器的特性去产生不同的数据。
使用:数据的可视化、数据的收集、数据的处理、位置调整

八、GUI
依赖的库:渲染库和QT
外部的接口:无
内部的接口:无
这个GUI库在仿真的过程中使用qt去创建小部件去和用户交互。
用户可以通过暂停控制仿真时间或者通过gui的部件改变仿真的步长。用户也可以通过添加、修改或者清除模型去调整仿真的产景。同时能够采取一些工具去可视化传感器仿真的数据。
使用:调试的附加键、调试的显示窗口、发布命令、停止、信息获取

九、Plugins
依赖的库:物理环境库、传感器库、渲染库
这个能够使用户使用各自独立的库而不用去采去通信系统
使用:物体的特性、控制

十、总结
物理环境的特性我们可以利用物理环境的相关函数去实现;为了达到接近实际的实物,我需要渲染函数去将模型进行渲染,使显示的效果接近实际;为了控制问题的运动,我们需要两部分,一是动力学引擎,二是相关的控制代码;为了实现人机的交互或者为了实现数据的可视化,模型的可视化,我们需要gui;为了实现对模型的控制,我们可以通过通信系统也可以通过plugin的方式。

以上内容是我根据官网的教程翻译,同时也加入自己的一些理解