时间同步
第一次谈及时间同步,可能会有点懵逼。其实这在我们生活中是很常见的,小时候应该都用过那种电子手表,这种电子手表往往隔一段时间就会不准确,需要手动进行校准。这种手动校准的过程就可以认为是时间同步。想想看,若是没有时间同步,那可真是乱了套了,想要在家看个世界杯,都不能及时的和别人分享进球的喜悦,这这这…是不是也太难受了…
好了,下面就重点来说说多传感器的时间同步。多传感器数据的时间同步是多传感器信息融合的必备条件之一。实际上,由于各个传感器独立封装并按照自己的时钟基准运行,往往采样频率也不尽不同,这些将导致种采样数据时间上不同步。针对这一问题有硬同步和软同步两种解决方案。硬件同步是指定制传感器,使得多个传感器能在同一时刻触发采样,例如多个传感器安装于同一个晶振下工作。软件同步是指通过统一的主机给各个传感器提供基准时间,使得传感器每帧数据同步到统一的时间戳上。
1.1 软同步
软件同步的方法主要就是利用时间戳进行不同传感器的匹配。通常是将各传感器数据统一到扫描周期较长(频率较小)的传感器数据上。拿某4线激光雷达(采样频率约12.5Hz)和某相机(采样频率约30Hz)来说明,显然记过雷达的周期大,则以激光雷达的采样频率为基准进行匹配,如下图所示:
图中绿色虚线框表示激光雷达采集频率,蓝色虚线框表示相机采集频率,横轴表示统一的时间戳。传感器的每个采样时刻记录在统一的时间序列上。当激光雷达完成一次采样时,寻找与该时刻最近邻时刻的图像,这样便完成了两种数据的时间匹配,如图中红色方框所示。
可以看出,这种时间同步的方式可能存在一些问题:上文红色字体所述的最近邻时刻较为模糊,若最近邻的时刻同样和激光雷达采样时间差距较大,那最终的时间同步的效果肯定不好;另一方面,如若随着需要进行时间同步的传感器越来越多,那么匹配的难度必然加大,匹配的精度也大大折扣。这时候可能就需要别的方法来支持时间同步了,硬件同步就油然而生。
1.2 硬同步
硬同步主要是通过GNSS进行授时的,传感器自身集成了GPS通信接口,可以接收一些数据和信号。目前使用较多的是使用PTP协议解决各传感器设备时间同步的问题。
首先先来介绍一下PTP协议,其是基于数据包的时间同步协议。数据传输和时间同步使用同一网络,它描述了如何在基于数据包网络(比如以太网)上分配同步时间的机制。时钟精度达到亚微秒级。PTP是一种主从式的时间同步系统,采用硬件时间戳,因此可以大幅减少软件处理时间。同时PTP可运行在L2层(MAC层)和L4层(UDP层),运行在L2层网络时,直接在MAC层进行报文解析,不用经过四层UDP协议栈,从而大幅减少协议栈驻留时间,进一步提高时间同步精度,对于自动驾驶系统来说非常友善。
好了,是不是没怎么看懂,我也是。我觉得姑且可以认为这种方法还是蛮不错的,可以较好的完成时间同步的任务。下面具体阐述通过PTP协议进行时间同步的过程。还是先来对一些基本概念进行一个了解。设备中运行PTP协议的网络端口称为PTP端口,PTP主端口用来发布时间,PTP从端口用来接收时间。同时还定义了如下三种始终节点:
PTP通过在主从设备之间交互同步报文,并记录下报文发送时间,从而计算网络传输延迟和主从设备间时钟的偏差。PTP定义了四条同步报文:Sync、Follow_Up、Delay_Req、Delay_Resp,精确同步过程如下。
1、PTP主端口向从端口发送Sync报文,同步记录下Sync发送的时间t1。从端口收到Sync报文后,记录下收到的时间t2。
2、紧接着主端口将t1时间放到Follow_Up报文发送给从端口,从端口收到此报文后就可以解析出t1,并由此得到第一个方程式:t1+网络延时+时钟偏差=t2。
3、从端口向主端口发送Delay_Req报文,同步记录下Delay_Req发送的时间t3。主端口收到报文后,记录下收到的时间t4。
4、紧接着主端口将t4时间放到Delay_Resp报文发送给从端口,从端口收到此报文后就可以解析出t4,并由此得到第一个方程式:t3+网络延时-时钟偏差=t4。
上文红色公式有两个未知数,两个方程组,应用初中数学知识可以解出:网络延时Delay=[(t2-t1)+(t4-t1)]/2,时钟偏差Offset=[(t2-t1)-(t4-t3)]/2。
知道了Delay和Offset就能对传感器的时间进行调整,从而进行传感器的时间同步。