以下是一些关于如何加速gazebo仿真的话题。

gazebo仿真提速:(无gpu加速)
论坛上的相关帖子:How can I speed up simulation in Gazebo?

在不考虑用gpu的情况下,肯定首先考虑的是内部调整参数。

提高real_time_update_rate当然可以提高仿真速度,但很显然在计算机硬件的限制下,real_time_update_rate提高到一定数值后,对仿真速度提高的作用就不大了。

max_step_size(单位是秒)也会显著影响仿真速度,放大max_step_size可以显著提升仿真速度,但理所当然地,损失的是计算的精度。

注:real_time_update_rate = 1000,max_step_size = 0.001的理想real_time_factor就是1.0

不考虑传感器信号接收端的运行对整体计算资源的消耗,laser、camera等传感器的输出频率的改变对仿真速度影响不大(在此我指的是如360hz–>180hz,30hz–>3hz这种级别的改变)。

也有人曾尝试过对gazebo的物理引擎做并行计算方面的设计:Parallel physics,但我在没有gpu的计算机上尝试上述的例子时,并没有观察到明显的速度提升。

有gpu加速:
首先,在打开gazebo gui运行仿真的情况下,即使不做任何特殊处理,一个带有gpu的计算机显然也能获得更好的速度。

我使用两个系统分别运行一个视觉细节非常丰富的仿真测试,两个系统配置如下:

系统1配置:32G内存,i7-8700 @ 3.20GHz × 12
系统2配置:8G内存,i7-8700 @ 3.2GHz×12,GTX 1070
gui界面底部的数据显示系统1中Real Time Factor 0.26左右,FPS 4.2左右,而在系统2中Real Time Factor 0.35左右,FPS 7.8左右

可见单纯有显卡的情况下,不做额外操作,在内存只有8G的情况下也比无显卡32G内存情况下快(0.35>0.26)

此外这里是一个利用GPU加速gazebo中的人类角色的示例:GPU Accelerated Human Actor In Gazebo Simulation

还有一种显而易见的思路是:先运行一遍仿真系统,使用rosbag记录下数据,再提速放给要测试的算法看,这样只要你的算法吃得消,想放多快都可以。缺点是这样无法进行与仿真环境有交互的仿真测试。

采用主从机的方式,在仿真机(服务器等)中单独运行仿真系统。