如何将Gazebo的real time factor设置为1并同步ROS时间?
Gazebo与ROS时间同步及Real Time Factor(RTF)调至1的解决方案
前置配置校验
- 确认
/use_sim_time全局参数在所有节点启动前完成配置:先启动roscore执行rosparam set /use_sim_time true,再启动Gazebo和其他业务节点,避免节点启动时读取到未更新的参数 - 确认Gazebo正确发布
/clock话题:执行rostopic info /clock,检查发布者列表是否包含gazebo节点;若没有则需使用roslaunch gazebo_ros封装的启动入口启动仿真,不要直接运行原生gazebo命令,同时确认gazebo_ros包安装完整
RTF低于1的针对性解决方案
RTF达不到1的核心原因是当前硬件算力无法支撑仿真的实时运算需求,配置<real_time_factor>1</real_time_factor>仅能设置RTF上限,无法提升实际运算效率,可按以下优先级调整:
1. 修正仿真参数配置
在Gazebo的world文件<physics>标签下配置全局物理参数,优先级高于单个模型SDF文件的配置:
<physics type="ode"> <max_step_size>0.001</max_step_size> <real_time_factor>1</real_time_factor> <real_time_update_rate>1000</real_time_update_rate> </physics>
也可以直接在ROS启动文件中通过参数传入:
<include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find 你的功能包名)/worlds/你的场景文件.world"/> <arg name="real_time_update_rate" value="1000"/> <arg name="max_step_size" value="0.001"/> <arg name="use_sim_time" value="true"/> </include>
如果硬件算力确实有限,可以同步降低仿真更新频率减少运算压力,例如将real_time_update_rate设为500、max_step_size设为0.002,只要传感器采样频率不高于仿真更新频率,就不会影响障碍物检测的业务逻辑。
2. 降低仿真运算负载
- 不需要可视化时启动Gazebo添加
gui:=false参数,关闭图形界面可以节省30%以上的算力占用 - 简化仿真场景:删除高面数的冗余模型,关闭非必要的物理碰撞检测,降低Velodyne仿真插件的点云采样率
- 禁用Gazebo非必要的特效插件:关闭光影、粒子、动态纹理等渲染效果,仅保留必要的物理和传感器仿真组件
3. 硬件资源调优
- 运行仿真时关闭其他占用CPU、GPU的后台进程,优先给仿真任务分配算力
- 若使用虚拟机运行仿真,需分配至少4核CPU、8G运行内存,同时开启GPU硬件加速权限,不要使用软件渲染模式
效果校验
所有配置完成后启动全链路节点,Gazebo状态栏的RTF会稳定在1.0±0.05范围内,执行rostopic hz /clock输出的话题频率会和real_time_update_rate配置值一致,此时ROS时间和Gazebo仿真时间完全同步。
内容的提问来源于stack exchange,提问作者Stivmab
相关产品推荐
相关产品推荐

