ROS2与Gazebo11入门教程-Gazebo的体系结构
说明:
- 介绍Gazebo的体系结构
引言
Gazebo使用分布式体系结构,具有独立的物理仿真库、渲染库、用户界面库、通信库和传感器生成库。此外,Gazebo还提供了以下两个可执行程序来运行仿真:
服务器gzserver,用于对物理、渲染和传感器进行仿真
客户端gzclient,提供图形界面以可视化仿真并与仿真交互
客户端和服务器使用gazebo 通信库进行通信。
进程间通信
目前gazebo通信库使用开源的Google Protobuf进行消息序列化,并使用boost :: ASIO作为传输机制。gazebo通信库支持发布/订阅通信范式。例如,一个仿真世界发布机器人身体位姿更新消息,而传感器生成程序和GUI则会订阅使用这些消息来产生输出。
该机制允许对正在运行的仿真进行内部检查,并提供了一种方便的机制来控制Gazebo的各个方面。
系统
- Gazebo主机(master)
本质上,Gazebo主机是一个话题名称服务器。它提供名称查找表和话题管理。单个主机可以处理多个物理仿真、传感器生成程序和GUI。
通信库
依赖项:Protobuf和boost :: ASIO
外部API:支持在有名称的话题上与Gazebo节点进行通信
内部API:无
发布的话题:无
订阅的话题:无
后面所有的库几乎都要使用通信库。通信库充当了Gazebo的通信和传输机制。目前通信库仅支持发布/订阅模式,但是可以以最小代价使用RPC。
物理库
依赖项:动态引擎Dynamics engine(具有内部碰撞检测)
外部API:为物理仿真提供一个简单通用的接口
内部API:为第三方动态引擎定义物理库的一个基本接口。
物理库为刚体、碰撞形状和用于表示关节约束的关节等基础仿真组件提供一个简单通用的接口。该接口已经与以下四个开源物理引擎进行了集成:
Open Dynamics Engine(ODE)
Bullet
Simbody
Dynamic Animation and Robotics Toolkit(DART)
这些物理引擎均可以加载一个使用XML的仿真描述格式(SDF)描述的模型。这样就可以访问不同物理引擎的算法实现和仿真功能。
渲染库
依赖项:OGRE
外部API:允许加载、初始化和创建场景
内部API:存储可视化元数据,调用OGRE API进行渲染。
渲染库使用OGRE来提供一个简单的界面,用于将3D场景同时渲染到GUI和传感器库。渲染库包括照明、纹理和天空仿真。可以为渲染引擎编写插件。
传感器生成库
依赖项:渲染库,物理库
外部API:提供初始化和运行一组传感器的功能
内部API:待定(TBD)
传感器生成库可以实现所有各种类型的传感器,对来自物理仿真器中的世界状态更新消息进行侦听,并生成由实例化传感器指定的输出。
图形用户界面(GUI)库
依赖项:渲染库,Qt
外部API:无
内部API:无
GUI库使用Qt来创建图形界面,供用户与仿真进行交互。用户可以通过一些GUI小工具暂停或更改时间步长来控制时间流。用户还可以通过添加、修改或删除模型来修改场景。此外,还有一些工具可以对仿真的传感器数据进行可视化和记录。
插件
物理库、传感器库和渲染库均支持插件。这些插件使用户无需使用通信系统即可访问相应的库。
- 捕获屏幕截图
为捕获在Gazebo 3D渲染窗口中显示的场景的屏幕截图,请找到渲染窗口上方工具栏上的相机图标并单击它
屏幕截图的保存位置:捕获的图像会保存在~/.gazebo/pictures目录中,且图像文件名带有时间戳。
例如,下图是对加载了pioneer2dx机器人的仿真世界场景进行屏幕截图捕获的结果。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号