ROS当中的仿真时间以及Bag包操作

ROS时间种类

ROS中有两种时间:

​ROS::Time[/Duration/Rate]​​​:ROS时间——来源可以被认为修改如加速/减速/暂停。
​​
​ROS::WallTime[WallDuration/WallRate]​​:ROS绝对时间——不可修改的"真实"时间。

所有的​​ros::node​​​在启动时如果有设置​​[ros::param] \use_sim_time = true​​​则节点的ROS::Time从​​/clock​​​中获取,否则其值和​​ROS::WallTime​​一致。

观察现象:

在​​ROS_INFO​​​输出的时间戳中可以观察到两者的差异。首先我们设置​​rosparam set /use_sim_time true​​ 然后启动如下代码 :



登录后复制

ROS_INFO("%lf,%lf",(double)(ros::WallTime::now().toSec()),                   (double)(ros::Time::now().toSec()));1.2.

ROS当中的仿真时间以及Bag包操作_时间戳


输入:​​rostopic pub /clock rosgraph_msgs/Clock "clock: secs: 1 nsecs: 0"​​ 再运行上面代码

ROS当中的仿真时间以及Bag包操作_bag_02


输入:​​rosparam delete /use_sim_time​​ 重新运行代码

ROS当中的仿真时间以及Bag包操作_bag_03

用处

ROS时间和时间戳stamp对有些rosnode来说至关重要:

比如rviz和tf会将 msg 的​​header/stamp​​​与rosnode当前时间对比来抛弃无效数据(OLD_DATA)。
ActionClient会自动添加当前时间到stamp中发送给ActionServer,而ActionSerer会对比新的msg与历史msg的stamp来决定是否是合法数据。

在录制rosbag的时候​​msg/header/stamp​​时间戳是录制时刻的值。可能导致当前ROS时间 和时间戳不匹配导致:抛出异常,更有甚者直接功能不正常。

我们可以设置​​use_sim_time​​​再启动节点,改变ROS时间源。并通过对​​rosbag ... --clock​​参数让rosbag发布/clock驱动ROS时间


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空