编者语:后台回复“入群”,加入「智驾最前沿」微信交流群
对于自动驾驶汽车来说,“看”世界的方式不只有一种,一般情况下,会有多个传感器用来感知交通环境,常见的传感器有激光雷达(LiDAR)、摄像头、毫米波雷达、惯性测量单元(IMU)等等。这些传感器各自以不同方式、不同频率不断采集外界的数据。为了确保感知的准确性,会在感知数据处理时,非常注意时间同步。
为什么要讲“时间同步”这个事儿
之所以时间同步非常重要,是因为不同传感器的每一帧数据都有时间标签(时间戳),时间戳不对齐的话,把它们的数据放在一起看世界就会出错。
举个很直观的例子。摄像头拍照是瞬间行为,某一刻拍摄的图片中,整张图片的数据就是那个瞬间的场景。但激光雷达是通过旋转发射激光脉冲来扫一圈生成点云数据的,一圈可能要几十毫秒甚至上百毫秒。如果我们把一个摄像头的图像和一个激光雷达的点云直接拼在一起,没有处理时间差的话,很容易出现“画面描述跟点云不一致”的情况,特别是在车辆高速运动或者场景里有动态物体(比如行人、自行车)的时候,这种不一致会更加明显。
图片源自:网络
对于自动驾驶感知模块来说,这种时间偏差就像一张“局部滞后”的世界图,很容易导致误判和决策错误。时间同步,就是要把这些不同来源的数据对齐,让它们看待同一个时间点的世界。
在自动驾驶汽车上,使用较多的传感器就是摄像头和激光雷达,想要聊他们的时间同步,得先理解激光雷达和摄像头在数据采集上的差异。
摄像头拍照是“瞬间完成”的事情,一旦快门打开关闭,那一帧图像的所有像素都近似在同一时间被捕获(当然,这个时间同时还依赖摄像头的快门方式,比如滚动快门和全局快门会有细节差别,但本质是“一次曝光完就是一帧”)。
激光雷达则是靠发射激光脉冲、接收反射信号并计算时间差来获得距离信息。为了覆盖一个完整的360°视角,它需要不断旋转或机械扫描。在一圈扫描里,一些点是在开始时采集的,有些是在结束时采集的,这就导致一个完整的点云本身内部就存在时间差。
当你想把某一帧图像和某一帧点云对齐时,如果摄像头拿的是这个时刻的图像,而激光雷达的点云包含了前面几十毫秒和后面几十毫秒的数据,即便简单按照“最接近的时间戳”去匹配,也会有明显误差。时间不同步会给后续的融合算法带来麻烦,像是目标检测和定位,就需要对应的图像特征和点云特征对齐才能算得准确的位置和类别。时间同步,就是要把这种时间上的偏差降到可接受的范围。
硬件层面的时间同步
在自动驾驶系统里,最靠谱的时间同步方式之一就是从硬件层面入手,旨在让不同传感器共享一个共同的时间基准。简单理解就是让所有传感器在同一个时钟上计时。
图片源自:网络
1)统一时钟源
时间同步最基础的办法是给所有传感器一个共同的时间来源。这可以是GPS提供的时间信号,也可以是车辆主控计算单元上的高精度时钟。很多自动驾驶系统会利用GPS的1PPS(每秒脉冲)信号结合IEEE1588的PTP(PrecisionTimeProtocol,精密时间协议)来做同步。
GPS的1PPS信号每秒会发出一个脉冲,能提供一个非常准确的时间基准,传感器可以把这个信号作为参考时刻,然后自己的内部时钟按照这个节奏来计时。PTP则是在网络层面提供精确的时间同步协议,让车载以太网设备之间能精确对齐时间。这样激光雷达、摄像头、IMU等都可以把它们的时间戳挂在同一个时间线上。
硬件层面的统一时钟让时间差几乎不可能积累成大误差,而且所有模块都能按统一时间看世界,但网络延迟、硬件时钟漂移等问题不可避免。
2)硬件触发信号
还有一种比较直接的做法是利用硬件触发。也就是让一个传感器发出触发信号去控制另一个传感器采集。比如说激光雷达在旋转到某一角度时触发一次输出信号,让摄像头正好在那个瞬间拍一张照片。这样就能保证那一帧点云某些角度对应的时刻正好是那个图像拍摄的时刻。
这种做法可以让两个传感器在同一个外部事件下同时采集数据。优点是时间一致性强,不需要复杂的时间协议。缺点是只针对特定的事件触发,不一定适合所有场景,而且布线比较麻烦,需要额外的触发线连接各个传感器。
3)时钟同步协议
前面提到的PTP是一种工业上常用的协议,它的原理是让各个网络节点不断互相交换时间信息,自动修正各自时钟的偏差。很多高端摄像头、激光雷达以及车载计算平台都支持这种协议,可以让多个设备在以太网上“看一样的时间”。
这种方式相对灵活一些,不需要额外的硬件信号线,通过网络就可以同步多个设备的时间。但是它也依赖网络质量,对延迟敏感。PTP的精度一般能达到微秒级甚至更好,已经能满足大部分自动驾驶应用的需求。
软件层面的时间处理
即便硬件同步做得再好,实际运行过程中仍然会有微小偏差、抖动或者不能完全精确对齐。这时就需要在软件层面做一些补偿,让数据在时间上“贴得更紧”。
图片源自:网络
1)时间戳插值和对齐
当你有两种传感器的时间戳数据时,可以通过模型预测或者线性插值得到某一时刻的估计数据。如某一时刻图像和前后两次激光雷达数据的时间戳都已知,可以根据时间线性插值得到这个时刻激光雷达的估计点云。这种方法是根据已知的时间关系填补时间空档,让数据在时间线上更一致。
这一技术的核心是做时间差分析,然后用数学方法弥补偏差。虽然不能完全消除硬件时间偏差,但在很多实际场景里已经足够用。因为自动驾驶系统的算法模块一般会有一定的容忍度,只要误差在可控范围内,就不会影响整体感知和决策结果。
2)软件同步模块
在实际软件栈中,比如ROS(机器人操作系统)或是某些车载平台,会提供同步模块。这些模块会把不同传感器的消息订阅进来,然后按照一定的时间窗口进行匹配。如ROS里有message_filters包,可以设置一个时间容忍区间,把摄像头和激光雷达的数据按照时间戳进行对齐匹配。这样,只有符合时间要求的数据对才会被送去处理。虽然这种方法不完美,但在缺乏硬件同步的情况下,依旧是比较实用的办法。很多开源项目也采用这种方式去实现不同传感器的粗同步。
3)在线时间偏差补偿
还有更高级的做法就做在线时钟偏差估计,通过卡尔曼滤波或其他滤波算法来估计实时的时间漂移,然后动态调整时间戳。这种方式需要在软件层面不断监测传感器时钟的漂移情况,实时计算补偿值。这种算法的好处在于能自适应不同的时间漂移情况,缺点是对计算资源的需求更高一些,而且实现起来也有一定复杂度。
时间同步要面对的现实挑战
时间同步听起来只是将传感器之间的时间统一,可通过硬件和软件的方式来时间,但在实际落地时,依然有很多问题需要解决。
不同传感器本身的采集机制不一样。激光雷达的点云数据是扫描得到的,有内部时间分布;摄像头的曝光是一瞬间的;其他像IMU这种传感器则是以非常高的频率输出数据。这就要求时间同步系统要处理的不仅仅是两个不同数据帧的时间戳,还要理解它们内部数据生成的时间结构。此外,还有些传感器可能根本提供不了精确的时间戳,或者时间戳只能由主机采集,这样就更难统一时间。
图片源自:网络
即便有统一时钟源,如果网络延迟不稳定,各个设备接收到时间信号的延迟也是不一样的,这会导致时间同步协议在微观时间尺度上的偏差。网络抖动、车载计算平台系统负载变化等因素都会影响时间同步的精度。协议要处理这些不确定性,需要在底层实现大量时间补偿机制。
有些自动驾驶系统的不同传感器还有不同帧率,那如何对齐这些不同频率的数据也是一大技术问题。通常需要设计复杂的匹配策略,保证时间线上的数据不丢失,也不会产生误匹配。
最后的话
时间同步在自动驾驶里确实是一个看似简单但实际很关键的问题。它要求硬件和软件协作,从源头上统一传感器时间基准,通过时间戳、触发信号、协议机制来让不同传感器的数据都能在同一个时间线上对齐。然后再通过软件算法进行进一步的补偿和对齐,让后续的融合算法(比如目标检测、定位、追踪)能有更高质量的数据输入。
只要做到时间同步,激光雷达和摄像头的数据就能被更准确地融合,自动驾驶系统能更真实、更一致地“理解”周围世界,也就能更安全、更可靠地做出驾驶决策。
-- END --