ROS2与Gazebo11入门教程-物理仿真与传感器的锁步
说明:
- 介绍物理仿真与传感器的锁步
简介
有的时候,可能希望严格遵循为传感器指定的更新速率,即使这样会减慢物理仿真过程以等待传感器更新速率赶上来。
例如,在一台计算能力有限的计算机上运行高分辨率的相机传感器可能会导致相机更新滞后于物理仿真过程,从而导致相机的图像帧更新与物理仿真过程不同步。
通过将--lockstep参数传递给Gazebo服务器来启用锁步功能,锁步功能允许严格遵循传感器更新速率。
这意味着在具有不同计算资源的计算机上,可以始终遵循指定的更新速率,从而使传感器更新和物理仿真过程保持同步。
创建一个带有相机的仿真世界
这里将会使用一台高分辨率高帧率的相机用于例证。
创建一个仿真世界文件,命令为:
gedit camera_strict_rate.world
- 将以下内容粘贴到该世界文件中:
<?xml version="1.0" ?>
<sdf version="1.6">
<world name="default">
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<model name="camera_model">
<static>true</static>
<pose>-10.0 0.0 0.5 0 0 0</pose>
<link name="link">
<visual name="visual">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
<!-- High fps high-res camera to test strict rate -->
<sensor name="camera_sensor" type="camera">
<camera>
<horizontal_fov>1.0472</horizontal_fov>
<image>
<width>1280</width>
<height>720</height>
</image>
</camera>
<always_on>1</always_on>
<!-- We choose a high fps on purpose. The goal is to check the effect
of lockstep. -->
<update_rate>500</update_rate>
<visualize>true</visualize>
</sensor>
<!-- Regular camera, to make sure strict rate is only applied to the sensor intended -->
<sensor name="camera_sensor_regular" type="camera">
<camera>
<horizontal_fov>1.0472</horizontal_fov>
<image>
<width>320</width>
<height>240</height>
</image>
</camera>
<always_on>1</always_on>
<update_rate>30</update_rate>
<visualize>true</visualize>
</sensor>
</link>
</model>
<!-- Double pendulum -->
<include>
<name>active_pendulum</name>
<uri>model://double_pendulum_with_base</uri>
<pose>2 0 0 0 0 0</pose>
<scale>0.5 0.5 0.5</scale>
</include>
</world>
</sdf>
- 这个仿真世界包含一台高分辨率(1280×720)高帧率(500fps)的相机,以及一台用于对比的低分辨率(320×240)低帧率(30fps)的相机。
- 该仿真世界还包含一个用于视觉验证的摆锤
不锁步情况下运行仿真世界
- 首先,来看下如果不启用锁步功能、正常运行该仿真世界的情况下会发生什么。
gazebo camera_strict_rate.world
- 可视化相机图像,方法为:点击“窗口(Window)”->“话题可视化(Topic Visualization)”菜单项(或按下Ctrl + T组合键)来打开“话题选择(Topic Selector)”对话框。选择图像类型话题下的第一个话题(见下图)。
- 检查“图像浏览”对话框中的Hz字段值(见下图)。相机图像更新速率似乎无法达到指定的500fps。
注意Gazebo窗口底部的实时因子(Real Time Factor)。其值应该接近1.0。
这表明在不启用锁步功能的情况下,默认的行为会在计算资源允许的情况下尽可能快地更新传感器数据。
对于需要高计算能力的传感器而言,可能永远无法达到指定的更新速率。
锁步情况下运行仿真世界
- 现在在启用锁步功能的情况下运行该仿真世界,命令为:
gazebo --lockstep camera_strict_rate.world
- 像前面那样进行相机图像可视化。现在Hz字段值应该显示为500(见下图)。
此时实时因子可能会小于1.0。确切的数字取决于您计算机的计算能力。
这表明严格遵循了传感器的更新速率,并且为了适应高的更新速率,物理仿真过程已经降低了速度。
在“话题(Topic)”下拉列表中,可以切换到低帧率相机并观察其Hz和实时因子。
Hz字段显示的数字是30左右。
但是,实时因子仍是小于1.0的。这是对使用锁步功能的一个警告。启用锁步功能后,将会使用函数回调更新场景中的位姿,该回调的更新速度比默认设置(禁用锁步功能)中使用的消息传输要更慢。
因此,启用锁步功能时,整体仿真速度将会变慢。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号