【Gazebo要素02】系统构成

发布于:2023-01-20 ⋅ 阅读:(502) ⋅ 点赞:(0)

一、简介

        Gazebo 使用分布式架构,具有用于物理模拟、渲染、用户界面、通信和传感器生成的独立库。此外,gazebo 提供了两个用于运行模拟的可执行程序:

  •        1  用于模拟物理、渲染和传感器的服务器 gzserver
  •        2  一个客户端 gzclient,它提供了一个图形界面来可视化并与模拟交互

        客户端和服务器使用 Gazebo 通信库进行通信。

二、进程间通信

2.1 基础概念

  • 序列化:将对象压成字串叫编码,将字串解释成对象叫解码,编解码就是序列化和反序列化。
  • RMI :(Remote Method Invocation)远程方法调用,就是stub(client)和sceleton(server)之间得进程调用。
  • Protocol Buffers:(简称:ProtoBuf)是一种开源跨平台的序列化资料结构的协议。其对于储存资料或在网络上进行通讯的程式是很有用的。这个方法包含一个接口描述语言,描述一些资料结构,并提供程式工具根据这些描述产生程式码,这些代码将用来生成或解析代表这些数据结构的字节流。
  •  Boost.Asio:Asio 代表异步输入/输出。这个库使得异步处理数据成为可能。异步是指当启动操作时,启动程序不需要等待操作结束。相反,当操作结束时,Boost.Asio 会通知程序。优点是可以同时执行其他操作。
  • RPC:是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作遠端呼叫或遠端方法呼叫,例:Java RMI。 RPC是一种进程间通信的模式,程序分布在不同的地址空间里。

2.2 Gazebo通信

        通信库目前使用开源的 Google Protobuf 进行消息序列化,使用 boost::ASIO 进行传输机制。它支持发布/订阅通信范式。例如,模拟世界发布身体姿势更新,传感器生成和 GUI 将使用这些消息来产生输出。

        这种机制允许对正在运行的模拟进行自省,并提供一种方便的机制来控制 Gazebo 的各个方面。

三、系统和成员

3.1 主管理进程(Gazebo Master)

        这本质上是一个主题名称服务器。它提供名称查找和主题管理。单个主机可以处理多个物理模拟、传感器生成器和 GUI。

3.2 通信库(Communication Library)

  • Dependencies: Protobuf and boost::ASIO
  • External API: Support communication with Gazebo nodes over named topics
  • Internal API: None
  • Advertised Topics: None
  • Subscribed Topics: None

        几乎所有后续库都使用该库。它充当 Gazebo 的通信和传输机制。它目前仅支持发布/订阅,但可以轻松使用 RPC。

3.3 物理库

  • 依赖项:动态引擎(带有内部碰撞检测)
  • 外部 API:为物理仿真提供简单通用的接口
  • 内部 API:为 3rd 方动态引擎定义物理库的基本接口。

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

        每个物理引擎都可以加载使用 XML 以模拟描述格式 (SDF) 描述的模型。这提供了对不同算法实现和模拟功能的访问。

3.4 渲染库

  • 依赖:OGRE
  • 外部 API:允许加载、初始化和场景创建
  • 内部 API:存储元数据进行可视化,调用 OGRE API 进行渲染。

        渲染库使用 OGRE 提供一个简单的界面,用于将 3D 场景渲染到 GUI 和传感器库。它包括照明、纹理和天空模拟。可以为渲染引擎编写插件。

3.5 传感器生成

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

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

3.6 图形用户界面

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

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

3.7 插件

        物理、传感器和渲染库支持插件。这些插件使用户无需使用通信系统即可访问相应的库。

 

         

本文含有隐藏内容,请 开通VIP 后查看