对应任佬tag6.0
首先时间同步包括两个部分:
(1)保证时钟源一致
问题:传感器的时钟源有钟漂,即使开始是进行了各传感器时间辍对齐,随着运行一段时间之后,之前对齐的结果仍然会出现偏离。
解决办法:把硬件的时钟源统一,常见做法是做一个脉冲发生器,所有的传感器都有该脉冲触发,每次触发都对自身时钟源进行矫正,这样可以消除累积误差。
(2)获取同一时刻的信息
问题:硬件同步以后,由于各传感器的采集时刻不是相同的,例如:在KITTI数据集中,雷达和imu都是10HZ,但是雷达每次采集时间较imu都要慢几十毫秒
解决办法:当我们想获得雷达从那几时刻的车体角速度和加速度信息时,就要对雷达前后时刻imu信息,通过插值计算出一个等效值,保护获取信息时刻相同。
程序同步方法设计
我们在ReadData函数里添加这段功能,即读取数据之后进行数据同步
我们为了代码的简洁,依旧对代码进行了封装,下面来看具体实现,我们以imu时间同步为例
imu时间同步模块
数据在容器中是按照时间前后排列的,每个容器相当于构建了一条时间线,索引可以帮助我们快速定位数据的位置,用雷达与其他传感器的时间辍进行定位,找到imu数据在雷达前后两帧数据,然后做插值即可。。
一些问题
这部分最后不应该删除数据,因为很可能成为下一帧雷达的前一时刻的数据信息
两个break换成return false是否更加合适
break: 使得跳出当前循环,还会继续运行下面代码
return false: 直接终止整个程序的运行,并不会继续运行下面代码
似乎是比较合适的,因为后面的工作已经没有意义了
做了简单测试