多传感器时间同步
在自动驾驶中,对车辆外界环境进行感知需要用到很多传感器的数据(Lidar,Camera,GPS/IMU),如果计算中心接收到的各传感器消息时间不统一,则会造成例如障碍物识别不准等问题。
为了对各类传感器进行高精度的时间同步,可以分为几部分内容:统一时钟源,硬件同步,软件同步。
一、统一时钟源
在构建自动驾驶的时间同步架构时,我们面临着一个核心问题:如何确保系统中各个传感器的时间基准一致?由于每个传感器可能拥有自己的内部时钟,而这些时钟之间可能存在微小的频率差异,即所谓的“钟漂”。这些差异随时间累积,会导致各传感器时间基准的不一致。
为了解决这一问题,我们引入了统一时钟源的概念。统一时钟源的作用是提供一个所有传感器都遵循的共同时间参考,如下图所示。
![](https://keymotek.com/wp-content/uploads/2024/06/统一时钟源-1024x239.webp)
统一时钟源
统一时钟源有两种常见方式:一种是基于GPS的“PPS+NMEA”,另一种是基于以太网的IEEE 1588/802.1AS(PTP/gPTP)时钟同步协议。
时间戳误差现象
当传感器数据被标记上从GPS接受到的全局时间戳,时间戳通常来源于精确的时间同步协议(如UTC time·),这样以GPS为基准的时间戳,简化了同步过程,非常方便。每个传感器数据都有了全局一致的时间参考。
但同样也会面临一个问题,不同的传感器采样频率不一样,比如激光雷达(通常为10Hz)和相机(通常为25/30Hz)。导致在特定时间获取同步数据可能会有延迟,在动态环境中可能造成较大的误差。
如下图所示,三个传感器具有不同的采样频率。在T1时刻,传感器2有一个数据,此时,我们需要对应传感器1和3的数据是多少,就会进行查找。查找的方式就是找对应的传感器数据和传感器2时间差最近的数据包。如果查找的数据包时间和T1时刻传感器2数据包的差距较大,在加上车身和障碍物都在移动,这样误差会比较大。
![](https://keymotek.com/wp-content/uploads/2024/06/传感器时间戳-1024x580.webp)
传感器时间戳
为了缓解查找时间戳造成的误差现象,主要采用的方式有硬件同步和软件同步。
二、硬件同步
硬件同步是一种通过物理信号来确保不同传感器数据采集时间一致性的方法。自动驾驶上使用的相机(Rolling Shutter)一般是支持外部触发曝光的。激光雷达通常支持两种时间同步接口,基于PTP时间同步和PPS+NMEA协议。因此,一种常见的硬件同步方法是使用PPS信号作为触发器。PPS信号是一个精确的时钟信号,可以触发传感器在特定的时间点采集数据。
例如,激光雷达和相机可以配置为在PPS信号的上升沿采集数据,从而确保两者的数据采集是同步的。具体来说,激光雷达可以利用其相位锁定功能来实现与PPS信号的同步,如图3所示。通过设置激光雷达的相位锁定角度与相机视野的中心对齐,可以在激光雷达的激光束旋转到特定角度时触发相机,实现两者的同步采集。
![](https://keymotek.com/wp-content/uploads/2024/06/时间同步触发.webp)
激光雷达与相机时间同步触发
当然,由于激光雷达是连续旋转采集数据,而相机则是瞬间曝光,因此硬件同步只能近似实现。例如,激光雷达的帧率若是10Hz,那么一帧点云中最早和最晚采集的点之间的时间差可能达到100ms。相机由于曝光是瞬时的,其所有像素点的采集时刻是一致的。因此,对于相机视野中心的点云,采集时间与图像采集时间一致,但对于视野边缘的点云,存在一定的时间偏差,这个偏差可能在5ms到20ms之间。
三、软件同步
软件同步是一种在数据处理阶段对传感器数据进行时间校正的方法。当硬件同步无法实现或不足以满足系统要求时,软件同步提供了一种解决方案,利用已知的时间标签和传感器的运动信息来推算传感器数据的准确时间点。
内插外推法是软件同步中常用的一种算法。通过以下步骤实现同步:
- 时间差计算:首先,计算两个传感器数据帧之间的时间差。例如,如果有一个激光雷达(Lidar)数据帧和一个相机数据帧,它们的时间标签可能不同,我们需要找出这两个时间标签之间的差异。
- 运动信息获取:收集传感器在两个时间标签期间的运动信息,这通常包括速度、加速度和旋转等。
- 位置推算:利用传感器的运动信息和时间差,通过物理模型或机器学习模型推算目标在两个时间点之间的位置变化。
- 建立新帧:根据推算出的目标位置,创建一个新的数据帧,这个新帧代表了两个原始数据帧之间的某个时间点的状态。