写在前面
自己的测试环境:
Ubuntu20.04
ROS-Noetic
一、背景描述
在程序运行是经常会看到 launch
文件中出现如下程序:
<param name="/use_sim_time" value="true" />
但是这句程序的具体含义和作用是什么,并不清晰。这里对当前这个参数进行解析,便于同行参考。
二、 use_sim_time 参数的含义与作用
use_sim_time
的字面含义是(是否)使用仿真时间
。当设置参数 use_sim_time
为 true
时,意味着使用仿真时间
。它的作用是当前ros
程序中使用rospy.Time.now()
进行读取,则读取到的是仿真时间。
三、举例说明
首先这里附上读取当前ros
时间的 python
程序:
#!/usr/bin/env python
import rospy
def main():
# 初始化节点
rospy.init_node('get_ros_time')
# 等待rospy的内部通信建立
# rospy.wait_for_service('rospy.set_param')
# 设置循环的速率为1Hz
rate = rospy.Rate(1)
# 循环直到节点被关闭
while not rospy.is_shutdown():
rospy.loginfo("====================")
current_time = rospy.Time.now()
# 打印当前ROS时间
rospy.loginfo("Current ROS time is: %f", current_time.to_sec())
# 等待下一次循环
rate.sleep()
if __name__ == '__main__':
try:
main()
except rospy.ROSInterruptException:
pass
1. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集使用rosbag play **.bag
运行指令:
roscore
rosparam set use_sim_time false # 这句指令是否执行,结果都是一样的
rosbag play **.bag
这种设置就是典型的使用ROS
当前的时间,即使用 ROS
系统的最新时间。此时上述 python
程序打印如下:
[INFO] [1722673831.056924]: ====================
[INFO] [1722673831.059255]: Current ROS time is: 1722673831.059109
[INFO] [1722673832.058092]: ====================
[INFO] [1722673832.061643]: Current ROS time is: 1722673832.061444
[INFO] [1722673833.058037]: ====================
[INFO] [1722673833.061723]: Current ROS time is: 1722673833.061501
[INFO] [1722673834.058022]: ====================
[INFO] [1722673834.060917]: Current ROS time is: 1722673834.060722
[INFO] [1722673835.058394]: ====================
[INFO] [1722673835.061902]: Current ROS time is: 1722673835.061656
[INFO] [1722673836.058457]: ====================
[INFO] [1722673836.061843]: Current ROS time is: 1722673836.061635
[INFO] [1722673837.058018]: ====================
[INFO] [1722673837.061253]: Current ROS time is: 1722673837.061034
2. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集使用rosbag play **.bag --clock
运行指令:
roscore
rosparam set use_sim_time false # 这句指令是否执行,结果都是一样的
rosbag play **.bag --clock
这种设置和《1. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集不使用--clock
》是一样的,即使用``ROS系统的最新时间。此时上述
python 程序打印和《1. 不设置
use_sim_time(也即
use_sim_time = false),播放数据集不使用
–clock `》是一样的。
3. 设置use_sim_time = true
,播放数据集使用rosbag play **.bag
这种设置就是典型的使用ROS
当前的时间,即``ROS系统的最新时间。此时上述
python` 程序打印如下:
运行指令:
roscore
rosparam set use_sim_time true
rosbag play **.bag
这种设置就是是有问题的,因为设置了use_sim_time = true
,但是没有仿真时间发出来,因此这种设置是错误的。此时上述python
程序不能打印,因为ROS
系统没有始终,程序不能运行。
4. 设置 use_sim_time = true
,播放数据集使用rosbag play **.bag --clock
运行指令:
roscore
rosparam set use_sim_time true
rosbag play **.bag --clock
这种设置就是典型的使用仿真时间,即使用数据集时间
作为整个ROS
系统的时间。此时上述python
程序打印如下:
[INFO] [1722673596.663416, 0.000000]: ====================
[INFO] [1722673596.666444, 0.000000]: Current ROS time is: 0.000000
[INFO] [1722673596.668134, 1317357628.400755]: ====================
[INFO] [1722673596.669762, 1317357628.400755]: Current ROS time is: 1317357628.400755
[INFO] [1722673597.671652, 1317357629.405819]: ====================
[INFO] [1722673597.674328, 1317357629.405819]: Current ROS time is: 1317357629.405819
[INFO] [1722673598.669123, 1317357630.403105]: ====================
[INFO] [1722673598.672169, 1317357630.403105]: Current ROS time is: 1317357630.403105
[INFO] [1722673599.667219, 1317357631.401356]: ====================
[INFO] [1722673599.670245, 1317357631.401356]: Current ROS time is: 1317357631.401356
[INFO] [1722673600.674717, 1317357632.408664]: ====================
[INFO] [1722673600.678019, 1317357632.408664]: Current ROS time is: 1317357632.408664
参考链接
无