• 【Gazebo要素02】系统构成


    一、简介

            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 插件

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

     

             

  • 相关阅读:
    python中Request Payload参数使用(持续更新)
    线程等待与唤醒
    第5讲:SQL语句之DML类型的数据操纵语言
    9.30 - 每日一题 - 408
    基于Struts2开发仓库管理系统
    Vagrant + VirtualBox + CentOS7 + WindTerm 5分钟搭建本地linux开发环境
    0基础学习VR全景平台篇第113篇:矫正拉直全景图 - PTGui Pro教程
    【JQuery】扩展BootStrap入门——知识点讲解(一)
    这些ChatGPT旗下的AI工具你都认识吗?
    golang中channel使用
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126299094