1.

https://answers.ros.org/question/189867/what-is-the-timestamp/

In ROS messages timestamp is taken from your system, which is unix epoch time.

Check Unix epoch time here.

For synchronisation look message_filters

Documentaiton of the datatypes are at: http://wiki.ros.org/rospy/Overview/Time and http://wiki.ros.org/rospy/Overview/Time

Comments

Also, if the workstation and the device are significantly off, you can sync the two with chrony. Just mentioning because it took me too long to figure out...

2.

The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z).

Literally speaking the epoch is Unix time 0 (midnight 1/1/1970), but 'epoch' is often used as a synonym for 'Unix time'. Many Unix systems store epoch dates as a signed 32-bit integer, which might cause problems on January 19, 2038 (known as the Year 2038 problem or Y2038).

3.

https://blog.csdn.net/zyh821351004/article/details/47758433

最近做ekfslam,有两个数据输入/odom 与/ img信息,刚开始这两个都是通过rosbag包回放,分别有两个toptic订阅回调函数触发不同的处理.

这在后面处理的时候又需要对这两数据进行相应的时间同步,我之前采用的是odom建立vector向量表存储(频率比图像快),后面以img数据为准,

从img的时间戳搜索最近的odom. 然后再将这两数据传入ekfslam进行预测与更新. 而我这种处理方式又必须得考虑类成员与多线程(topic消息机制)

存在成员变量在过程中强行覆盖的问题.

今天与根哥讨论,建议我用消息同步的方式进行回调同步处理. 我这就参考wiki试着开干了.

通过对多输入通道的输入topic的时间戳分析,进行同步,将同步的所有消息以一个回调的方式触发,

方式一: 全局变量形式  : TimeSynchronizer

步骤:

1.   message_filter ::subscriber 分别订阅不同的输入topic

2.  TimeSynchronizer<Image,CameraInfo>   定义时间同步器;

3.  sync.registerCallback      同步回调

4.  void callback(const ImageConstPtr&image,const CameraInfoConstPtr& cam_info)     带多消息的消息同步自定义回调函数

相应的API  message_filters::TimeSynchronizer

4

https://blog.csdn.net/bluewhalerobot/article/details/80429714

这里的程序tf时间戳用的是当前时间,也就是处理这个位置信息时的时间。但是如果我们的机器人性能比较弱,可能处理这个位置信息的时间和位置信息实际产生的时间差挺多。这样当其他数据需要坐标系转换的时候,就会采用错误的tf数据从而产生误差。我们以具体的数字为例
比如我们现在在1s的时刻得到小海龟的位置是(0,0),
小海龟在以1m/s的速度沿X轴直线运动。我们的小海龟性能很弱。消息处理的时间和实际位置消息产生的时间差了1s。我们现在通过超声波测量到了小海龟前面1m处有一个障碍物。我们想知道这个障碍物在world坐标系下的坐标。我们首先找到当前时刻附近的tf变换,但是这个tf变换实际上是根据1s之前小海龟的位置计算的,当时小海龟的位置是(-1,0)。所以根据这个tf变换我们计算出这个障碍物的位置坐标是(0,0)。如果用这个数据去做路径规划,肯定出现的是错误的结果。

当然上面是一个夸张的例子,但是实际确实会因此引入误差。那么正确的做法是什么呢?
以消息产生的时间戳作为tf变换的时间戳。因为坐标变换是根据消息计算出来的,所以其有效的时刻就应该是消息有效的时刻。

ROS time stamp and sync的更多相关文章

  1. [ROS]一些传感器数据读取融合问题的思考

    思考问题: 1. 如何实现传感器数据的融合,或者说时间同步? 比如里程计读数和雷达数据融合? void SlamGMapping::startLiveSlam() { entropy_publishe ...

  2. ros消息时间同步与回调

    转载自http://blog.csdn.net/zyh821351004/article/details/47758433 方式一: 全局变量形式  : TimeSynchronizer 步骤: 1. ...

  3. <ROS> message_filters 对齐多种传感器数据的时间戳

    联合标定三维雷达和IMU,第一步要先对齐两种传感信息的时间戳. ros官网提供了message_filters用于对齐多种传感信息的时间戳. http://wiki.ros.org/message_f ...

  4. ROS编程: 重要的代码优化知识点记录(1)

    订阅多个话题并对其进行同步处理 本小节针对在ROS节点中需要订阅两个及两个以上的话题时,需要保持对这两个话题数据的同步,且需要同时接收数据一起处理然后当做参数传入到另一个函数中: 研究背景:reals ...

  5. [转]ROS中使用message_filters进行多传感器消息同步

    转:http://www.rosclub.cn/post-1030.html 最近实验室老师在做一个多传感器数据采集实验,涉及到了消息同步.所以就学习了ROS官网下的消息同步工具message_fil ...

  6. ROS::message_filters中的一个报错(mt::TimeStamp……)

    『方便检索』 ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<Messages, i>::type>::value( ...

  7. ros使用RPLIDAR激光雷达

    1.首先下载RPLIDAR的驱动功能包 https://github.com/robopeak/rplidar_ros 2.然后解压放到~/catkin_ws/src目录下 3.执行catkin_ma ...

  8. 在ros中使用rplidar Laser发布scan数据--25

    原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 由于市面上买的激光雷达价格太贵了.所以在学习时会造成很大的经济压力.但是最近好多做机器人核心组件的公司都 ...

  9. ROS多个master消息互通

    需求 有时候我们需要有几个不同的master, 他们之间要交换topic的内容,这时候就不能使用ros自带的设置同一个master的方法. 我们的处理方法是,构造一个client和一个server,他 ...

随机推荐

  1. java基础(一):谈谈java内存管理与垃圾回收机制

    看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...

  2. (一) Keras 一元线性回归

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 环境为 an ...

  3. python docx文档转html页面

    文章链接:https://mp.weixin.qq.com/s/uMb2ziRS1NJ1GXIjofeANg 说到word文档转html的,网上一搜一大把,各种在线word转html页面,使用起来也方 ...

  4. 升级Mac OS X上的git

    今天一打开visual studio code就提示我git版本low,需要升级,然后提供了一个下载链接(git官方下载地址:https://git-scm.com/),然后我就根据链接去下载了mac ...

  5. 简单概括下MongoDB 4.0 新特性

    (1)跨文档事务支持 (ACID) 首个支持跨文档事务的NoSQL云数据库,将文档模型的速度,灵活性和功能与ACID保证相结合.现在,使用MongoDB解决各种用例变得更加容易. (2)40%迁移速度 ...

  6. MySQL 基础知识梳理学习(六)----锁

    1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...

  7. easyui实现分页

    主要参考官方的文档,欢迎评论 1.集成easyui,下面是我的引入方式,我引入到了head.html 每次只要引入该页面就可以了. <!-- easyui样式支持 --><link ...

  8. qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译

    1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...

  9. Ubuntu 16.04 安装Google 浏览器

    Ubuntu安装好后,自带Firefox浏览器,有时我们需要再安装几个浏览器,那么Google Chrome,就是首选, 安装如下: 下载浏览器安装包, 下载链接:https://dl.google. ...

  10. xcode10下,Build Phases下没有Embed Frameworks

    升级xcode10后发现,Build Phases下,找不到Embed Frameworks了,最后发现在General下,有一项“Embedded Binaries",可以在这里添加Fra ...