rosbag中--clock的使用
文章目录
- ROS时间种类
- 一、ros::Time::now()解释
- 二、c++中sleep, usleep, ros中的ros::Duration
- 三、参数use_sim_time介绍
- 1、launch文件设置:
- 2、通过节点设置:
- --clock相关使用介绍
ROS时间种类
谈及时间,有一个很重要的概念是ROS Time和Wall Time,两者是有区别的。它们两个的接口完全一样,数据类型也一样,但是ROS Time表示的是ROS网络中的时间。ROS网络中的时间是指,如果当时在非仿真环境里运行,那它就是当前的时间。但是假设去回放当时的情况,那就需要把当时的时间录下来。以控制为例,很多的数据处理需要知道当时某一个时刻发生了什么。Wall Time可以理解为墙上时间,墙上挂着的时间没有人改变的了,永远在往前走;ROS Time可以被人为修改,你可以暂停它,可以加速,可以减速,但是Wall Time不可以。
换言之ROS中有两种时间;
ROS::Time[/Duration/Rate]:ROS时间——来源可以被认为修改如加速/减速/暂停。
ROS::WallTime[WallDuration/WallRate]:ROS绝对时间——不可修改的"真实"时间。
一、ros::Time::now()解释
ros::Time t1 = ros::Time::now();
double t_cur = t1.toSec();//获取的是自1970年一月一日到现在时刻的秒数
printf("The time is: %16f\n",t_cur);//打印,%16f表示的是16位宽度的float类型的数字;
//注:%.2f是保留两位小数的意思
//若发布点云时,没有为每一帧点云打上时间戳,那么t_cur默认为0
void GridMap::cloudCallback(const sensor_msgs::PointCloud2ConstPtr &img)
{double t_cur = img->header.stamp.toSec();printf("cloudCallback_time: %16f\n",t_cur);
}
二、c++中sleep, usleep, ros中的ros::Duration
sleep(0.5) = sleep(0)//sleep()只接受整数
/* sleep.c:9:15: warning: implicit conversion from 'double' to 'unsigned int' changes value from 0.5 to 0 [-Wliteral-conversion]
sleep(0.5); */
usleep(0.5*1000000)//usleep表示睡眠微秒,利用该函数可以实现延迟0.5s
ros::Duration(0.5).sleep()//该函数也可以实现延迟0.5s
三、参数use_sim_time介绍
这个参数当回放bag数据集是设置为true,此时说明系统使用的是仿真时间Time;如果设置为false,则系统使用walltime。(此参数可以通过launch文件中设置,或者通过节点设置)
1、launch文件设置:
<param name="/use_sim_time" value="true" />
2、通过节点设置:
rosparam set use_sim_time true
–clock相关使用介绍
在开启一个Node之前,当把use_sim_time设置为true时,这个节点会从clock Topic获得时间。所以操作这个clock的发布者,可以实现一个让Node中得到ROS Time暂停、加速、减速的效果。同时下面这些方面都是跟Node透明的,所以非常适合离线的调试方式。当把ROSbag记下来以后重新play出来时,加两个横杠,–clock,它就会发布出这个消息。
简而言之,因为ros有两种时间,所以所有的ros::node在启动时如果有设置[ros::param] \use_sim_time = true则节点的ROS::Time从/clock中获取,否则其值和ROS::WallTime一致。
ros::WallTime::now()为当前的真实时间,也就是墙上的挂钟时间,一直在走。
ros::Time::now()为rosbag当时的时间,是由bag中/clock获取的。是仿真时间。
当设置:\use_sim_time = true时, 在终端输入样式:rosbag play --clock XXX.bag
当设置:\use_sim_time = false时,在终端输入样式:rosbag play --clock XXX.bag或者去掉–clock
参考:
http://wiki.ros.org/Clock
rosbag中--clock的使用相关推荐
- linux clock命令,Linux中clock命令起什么作用呢?
摘要: 下文讲述Linux中clock的功能说明,如下所示: clock命令功能: 1.用于设置RTC 时间 2.用于显示此刻的时间 3.用于将系统时间设置为硬件时间 4.用于将硬件时间设置为系统时间 ...
- ros rviz显示rosbag中的图像和imu数据
一.rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosba ...
- [RK3399][Android7.1] 调试笔记 --- DDR中clock相关配置
OS: Android 7.1 Board: Firefly-RK3399 Kernel: v4.4.55 把这个拎出来说是因为在调试ddr default rate的时候对这部分有些误区. dmc中 ...
- 同步电路设计中CLOCK SKEW的分析
(1.东南大学国家专用集成电路系统工程技术研究中心,南京 210096 2.南京经济学院计算机系,南京 210032) 摘 要:Clock shew是数字集成电路设计中一个重要的因素.本文比较了 ...
- 秒杀数字后端实现中clock gating使能端setup violation问题
秒杀数字后端实现中clock gating使能端setup violation问题 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 点击标题下「蓝色微信名」 ...
- 将Rosbag中的Compressed类型的图像转换成raw类型
经常存在这种情况, 我们需要在移动设备上录制一些包含图像信息的rosbag, 但是如果录制raw格式的话,占的内存空间太大, 一般可以采用录制compressed模式; 但是一般的代码中,图像从sen ...
- C++提取rosbag中的数据到txt文件
前言 球球队友们了,别忽悠我了,我写还不行吗TAT 一.准备工作 ubuntu系统,ros,C++.以提取geometry_msgs/Vector3Stamped类型话题中的时间和x,y为例 二.使用 ...
- Cesium中Clock控件及时间序列瓦片动态加载
前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合.Cesium的强大之处也在于其 ...
- matlab中clock是什么,matlab中的clock
其值为真 Why 简明的答案 Version MATLAB 版本号 时间和日期 Clock 挂钟 Date 日历 Etime 计时函数 Tic 秒表开始计时 Toc 计时函数 Cputime CPU ...
最新文章
- 如何网络监测其他计算机关闭445端口,关闭445端口的方法,教您电脑如何关闭445端口...
- arcgis andin使用python窗体_在ArcGIS?10中使用python
- Erlang的边界检查(3)
- 04--MySQL自学教程:数据库MySQL--【数据库DB】和【数据库管理系统DBMS】简介
- fga 例子 oracle,利用Oracle FGA实现审计
- spring 线程池_Spring线程池服务
- php中使用curl采集小说网,PHP:通过curl实现采集网站内容
- 大数据将如何重塑亚洲企业
- angular input_可视化的 Angular 响应式编程
- macBook户外省电有技巧,2招即可找出高耗电应用
- 破圈了!完美日记凭什么让周迅成为全球品牌代言人
- 分段插值/Hermite插值
- n1进入recovery模式_N1盒子系列 篇一:N1简明降级刷机教程
- 约分最简分式(python)
- 机器人动力学与控制学习笔记(七)————基于计算力矩法的滑模控制
- vtk 的vtkimagereslice实现三视图的显示
- 解决Qt5.7.0 cannot find -lGL
- 在公众号添加付费链接
- Windows10 插入耳机没声音,安装驱动无效问题解决
- 深度学习之 DCGAN 及TensorFlow 实现