【ROS学习】ROS中 use_sim_time 参数的含义与作用

写在前面

自己的测试环境:
Ubuntu20.04
ROS-Noetic

一、背景描述

  在程序运行是经常会看到 launch 文件中出现如下程序:

<param name="/use_sim_time" value="true" />

但是这句程序的具体含义和作用是什么,并不清晰。这里对当前这个参数进行解析,便于同行参考。

二、 use_sim_time 参数的含义与作用

use_sim_time 的字面含义是(是否)使用仿真时间。当设置参数 use_sim_timetrue 时,意味着使用仿真时间。它的作用是当前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

参考链接

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是关于ROS2的gazebo_ros的使用方法: 1. 首先,在ROS2安装gazebo_ros包。在终端输入以下命令: ``` sudo apt-get install ros-<distro>-gazebo-ros-pkgs ``` 其`<distro>`是你所使用的ROS2发行版的名称,例如`dashing`或`foxy`等。 2. 在启动文件加载gazebo_ros节点,例如: ``` <launch> <!-- Load Gazebo ROS package --> <package name="gazebo_ros" prefix="gazebo_ros"> <executable name="spawn_entity.py" /> </package> <!-- Load URDF --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen" args="- use_sim_time:=true"> <param name="robot_description" textfile="$(find my_robot_description)/urdf/my_robot.urdf" /> </node> <!-- Spawn robot in Gazebo --> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_entity.py" respawn="false" output="screen"> <arg name="entity_name" value="my_robot" /> <arg name="topic" value="/robot_description" /> <param name="robot_description" textfile="$(find my_robot_description)/urdf/my_robot.urdf" /> <param name="initial_joint_states" textfile="$(find my_robot_description)/urdf/my_robot.gazebo" /> </node> </launch> ``` 这个启动文件加载了gazebo_ros节点和URDF,然后在Gazebo生成了机器人。 3. 使用GazeboROS2插件。在URDF添加ROS2插件,例如: ``` <gazebo> <plugin name="my_plugin" filename="libmy_plugin.so"> <ros> <namespace>/my_robot</namespace> <remapping>cmd_vel:=cmd_vel</remapping> </ros> </plugin> </gazebo> ``` 这个插件将机器人的`cmd_vel`话题重映射到`/my_robot/cmd_vel`话题。 希望这些步骤能够帮助你使用ROS2的gazebo_ros包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值