2.3 Gazebo入门 - Gazebo架构

简介

Gazebo使用了一个分布式架构,其中有独立的库,用于物理模拟、呈现、用户界面、通信和传感器生成。此外,gazebo还提供了两个可执行程序来运行模拟:
服务器gzserver用于仿真物理、呈现和传感器
客户端gzclient提供一个图形化界面来可视化并与仿真交互。
客户端和服务器使用gazebo通信库进行通信。

进程间的通信

通信库目前使用开放源码的Google Protobuf来进行消息序列化和针对传输机制的boost::ASIO。它支持发布/订阅通信范型。例如,模拟世界发布身体姿势更新,传感器生成和GUI将使用这些消息来生成输出。
该机制允许对正在运行的仿真进行自省,并提供了一种方便的机制来控制Gazebo的各个方面。

系统

Gazebo Master

这实际上是一个主题名称服务器。它提供了namelookup和主题管理。一个单一的主能处理多个物理模拟,传感器发生器GUIs。

通信库

  • 依赖性:Protobuf and boost::ASIO
  • 外部API:
  • 内部API:无
  • 发布主题:无
  • 订阅主题:无

几乎所有的后续库都使用这个库。它是Gazebo的通信和传输机制。它目前只支持发布/订阅,但是可以尽可能少地使用RPC。

物理库

  • 依赖关系:动态引擎(内部冲突检测)
  • 外部API:为物理模拟提供一个简单的通用接口
  • 内部API:为第三方动态引擎定义一个物理库的基本接口。

物理库为基本的模拟组件提供了一个简单而通用的接口,包括刚体、碰撞形状和关节,以表示关节的约束。这个接口与四个开源物理引擎集成在一起:

  • Open Dynamics Engine (ODE)
  • Bullet
  • Simbody
  • Dynamic Animation and Robotics Toolkit (DART)

使用XML的模拟描述格式(SDF)中描述的模型可以由这些物理引擎加载。这提供了对不同算法实现和模拟特性的访问。

渲染库

  • 依赖性:OGRE
  • 外部API:允许加载、初始化和场景创建
  • 内部API:存储用于可视化的元数据,调用用于呈现的OGRE API

渲染库使用OGRE提供了一个简单的界面,用于在GUI和传感器库中呈现3D场景。它包括灯光、纹理和天空模拟。为呈现引擎编写插件是可能的。

传感器生成

  • 依赖关系:渲染库、物理库
  • 外部API:提供初始化和运行一组传感器的功能
  • 内部API:TBD

传感器生成库实现了各种类型的传感器,从物理模拟器中监听世界状态更新,并生成由实例化的传感器指定的输出。

GUI

  • 依赖性:渲染库,Qt
  • 外部API:无
  • 内部API:无

GUI库使用Qt来创建图形化的小部件,供用户与仿真交互。用户可以通过通过GUI部件暂停或更改时间步长来控制时间的流动。用户还可以通过添加、修改或删除模型来修改场景。此外,还有一些用于可视化和记录模拟传感器数据的工具。

插件

物理、传感器和呈现库支持插件。这些插件为用户提供了访问各自库的权限,而不需要使用通信系统。




 

你可能感兴趣的:(计算机,Gazebo,架构)