多传感器软同步的方法——ROS下实现

本文探讨了在ROS环境下,如何通过软同步方法处理不同频率的双目相机、深度相机和激光雷达数据。介绍了从基础要求到更高要求的实现方案,包括时间同步机制、回调函数处理以及针对激光雷达频率漂移的解决方案。提出了以激光雷达为基准的历史数据匹配方法,以追求数据同步的最优解,但提醒这种方法在鲁棒性方面可能存在不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

现在有三种不同的传感器:
(1)双目相机,输出其左右目的RGB图,已知相机内部做过硬同步,频率已被我调至10帧
(2)深度相机,输出其RGB图和深度图,没有硬同步,频率为30帧
(3)激光雷达,输出其点云,频率为10帧

问题:用软同步的方法数据存储为离线文件

ROS基础

(1)使用while循环,并设置循环频率为30Hz
(2)ROS中subscriber在后台起线程接收数据至队列中,但回调函数位于主线程中
(3)磁盘的读写速度不够快,需要起多线程进行读写,注意:对读/写所用的容器在读/写时需要上mutex锁
(4)实验中务必保证传感器接触良好,且电路正常工作

最基础要求

只要所有的消息在一个100ms内接收到,就算做同步
实现方案一:ROS的时间同步机制
实现方案二:回调函数分开写,但取每个100ms内的最新消息作为同步
两种方案下回调函数都直接将数据写入读/写容器
缺点:无视了硬同步

更高的要求

考虑硬同步,并希望将深度相机中相距较近的两个RGB和深度图视作一体

实现方案:
维护另一个中间容器,回调函数将数据写入中间容器。
先用两个时间间隔较短的ROS时间同步机制,再在每轮循环中添加判定1:若没有接受到所有消息,则继续;若接受到所有消息,则将各中间容器中的消息pop一个至各读/写容器,并清空中间容器。判定2:若中间容器的size()超过阈值,则clear(),原因是始终有消息没有收到。
实际中又有一个问题:激光雷达实际频率为9.999Hz,会产生漂移,久而久之与双目相机的“同步”信号会产生累计时间差,如何解决?答:将ROS的激光雷达和双目相机subscriber队列长度都置为1,让系统在每个循环中帮我们解决这个问题

缺点:不是最优解

所谓同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值