从零开始学自动驾驶(4)——传感器时间同步

对应任佬tag6.0

首先时间同步包括两个部分:

(1)保证时钟源一致

问题:传感器的时钟源有钟漂,即使开始是进行了各传感器时间辍对齐,随着运行一段时间之后,之前对齐的结果仍然会出现偏离。

解决办法:把硬件的时钟源统一,常见做法是做一个脉冲发生器,所有的传感器都有该脉冲触发,每次触发都对自身时钟源进行矫正,这样可以消除累积误差。

(2)获取同一时刻的信息

问题:硬件同步以后,由于各传感器的采集时刻不是相同的,例如:在KITTI数据集中,雷达和imu都是10HZ,但是雷达每次采集时间较imu都要慢几十毫秒

解决办法:当我们想获得雷达从那几时刻的车体角速度和加速度信息时,就要对雷达前后时刻imu信息,通过插值计算出一个等效值,保护获取信息时刻相同。

程序同步方法设计

我们在ReadData函数里添加这段功能,即读取数据之后进行数据同步


从零开始学自动驾驶(4)——传感器时间同步_第1张图片

 我们为了代码的简洁,依旧对代码进行了封装,下面来看具体实现,我们以imu时间同步为例

imu时间同步模块

数据在容器中是按照时间前后排列的,每个容器相当于构建了一条时间线,索引可以帮助我们快速定位数据的位置,用雷达与其他传感器的时间辍进行定位,找到imu数据在雷达前后两帧数据,然后做插值即可。。


从零开始学自动驾驶(4)——传感器时间同步_第2张图片

 

从零开始学自动驾驶(4)——传感器时间同步_第3张图片

 一些问题


这部分最后不应该删除数据,因为很可能成为下一帧雷达的前一时刻的数据信息

从零开始学自动驾驶(4)——传感器时间同步_第4张图片

从零开始学自动驾驶(4)——传感器时间同步_第5张图片


 

两个break换成return false是否更加合适

break: 使得跳出当前循环,还会继续运行下面代码

return false: 直接终止整个程序的运行,并不会继续运行下面代码

似乎是比较合适的,因为后面的工作已经没有意义了


 做了简单测试

return false 与 break区别

你可能感兴趣的:(从零开始学习自动驾驶,自动驾驶,c++)