搞机环境,ubuntu 20.04 ros2 版本 foxy
ros机器人搞了很久了,但是有一个初学者很容易忽略的参数:use_sim_time,设置不对,会让程序出跑起来有莫名其妙的问题。
use_sim_time :直白翻译: 用_仿真_时间
ros系统里面的时间分仿真时间和系统时间,仿真时间一般由/gazebo节点发布,可以通过查看节点信息 ros2 node info /gazebo 发现它在发布 /clock话题,其他节点要接收这个话题和仿真时间一致才能正常工作,如果是实体机器人,那么这个时间采集的是系统时间,就是我们计算机系统的当前时间。
ros2 node info /gazebo
/gazebo
Subscribers:
/clock: rosgraph_msgs/msg/Clock
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/clock: rosgraph_msgs/msg/Clock
/parameter_events: rcl_interfaces/msg/ParameterEvent
这个时间参数用的use_sim_time,参数只有2个选择,true (用仿真时间) false (不用仿真时间)
1 先说 true (用仿真时间)的场合,如果跑的是gazebo仿真,这个参数一定要设为true。
use_sim_time = LaunchConfiguration('use_sim_time', default='true') #launch文件声明时间变量
同一个launch文件里面的每个节点都要设置这个参数,有的节点没有设置这个参数也能正常工作是因为程序里面进行了默认设置。一般每个节点都要加上:
parameters=[{'use_sim_time': use_sim_time}],#使用时间变量的值
2 在说 false(不用仿真时间)场合,跑实体机器人。
这个变量可以在launch文件内设置默认值,也可以在运行launch文件的时候加上,比如运行建图程序加在末尾 :
ros2 launch jtbot_cartographer cartographer.launch.py use_sim_time:=true
有的launch文件没有设置这个参数,或者程序运行起来不正常,我们怎么查看这个参数是否正确设置了呢,方法 查看参数列表:
ros2 param list
我们要分别查看每个节点的use_sim_time设置是否正确
跑仿真每个节点都需要设置true,跑实体机器人都要设置成false,如果不对需要想办法在launch文件内设置这个参数,设置完在通过上面的方法查看设置是否正确。
这个参数在运行途中也可以设置,仿照这个命令:ros2 param set /scan use_sim_time false
这个问题的发现过程:我在用仿真跑cartographer_node建图程序,发现rviz2里面飘的厉害,好像是odom在飘来飘去,机器人看着也不正常,最后就是发现没有正确设置时间。
通过命令:
ros2 param set /cartographer_node use_sim_time true
Set parameter successful
显示正常我才发现这个参数是如此的重要。