从小白到自动驾驶系统工程师18——时间同步

自动驾驶为什么需要时间同步

自动驾驶车辆在未知的动态环境中运行时,需要事先感知周围环境、检测障碍物信息、构建出环境地图,并在地图中进行自我定位,这其中涉及到摄像头、毫米波、激光、GPS、ECU等数十个模块、进程的数据精确的时间同步。

试想在高速行驶时,左侧车道有一辆时速110km/h的车辆正准备超车变道,由于没有时间同步,激光雷达300ms前的点云数据与相机当前的图像数据融合。融合时激光点云数据中障碍物位置信息的置信度又高于图像数据,则决策单元会误判断为后车没有超车行为,继续当前的行车状态或加速行驶,那么下一秒则可能酿成“亲人两行泪”这一悲剧。

由于各个模块物理上的分散性,系统无法为彼此间相互独立的模块提供一个统一的全局时钟,而由各个进程或模块各自维护它们的本地时钟。即使所有本地时钟在某一时刻都被校准,一段时间后,这些本地时钟也会出现不一致。因为准确性和精度之间是有差异的:设置到错误时间的高质量手表可能非常精确,但不准确。

除了本地时钟的计时速率、运行环境存在不一致性,各种传感器的采样频率也不一致,例如激光典型采样频率为10HZ,相机为30fps,高精度组合导航为100HZ,且一台车上存在多个激光雷达、相机。没有准确的时钟同步,各传感器在哪一帧进行融合,在哪里进行插值都没法进行判断。两个传感器即使采样频率一致,其每帧数据的采样点也一般不一致。通过设置唯一的时钟主机给各类传感器和执行机构提供相同的基准时间,但是由于各传感器设备时钟晶振及数据传输路径不同,需要根据提供的基准时间校准各自的时钟时间,实现时间同步。因此催生了包括NTP(网络时间协议)与1588v2 PTP(精确时间协议)等用于互联设备授时协议、以及通过GNSS接收机进行时间同步的方法。

常用授时解决方案

基准时间主要由以下几种来源:本地定时器、无线广播发射器、LTE信号、网络授时、GNSS信号等。

本地定时器

本地时钟易于实施,并且只要有足够的电量就可以随时使用。但其精度和准确性有一定的限制,具体取决于工作频率、晶振的品质因数、功耗、电源以及重要的环境变化,尤其是温度。此类时钟还需要初始化以设置时间。

常见的32 kHz低频时钟非常适合保持近似的时间观,用户可以使用高频、高质量、温度补偿型晶振为设备提供高精度的时基,同时最大程度地降低授时抖动。

无线广播发射器

长期以来,无线发射器一直被用来为广域设备提供授时信号,尤其是Rugby时钟,后来被迁移并在英国更名为MSF,在美国更名为WWVB,在德国更名为DCF77。除了不受发射机和接收机之间的传播延迟影响的频率参考外,它们还广播多种调制信号以指示秒数和绝对授时。

当用于同步多个设备时,可能需要考虑从发射机到设备的传播时间之差(Δt = (dA-dB)/C,其中c是光速)。对于物联网设备分布在较小区域(比如相隔100米)或不需要高精度(比如<1毫秒)的应用,可以安全地忽略此误差影响。

LTE信号

蜂窝通信无线信号(包括来自LTE基准站的信号)甚至在室内都可以广泛使用,并且随着低功耗广域网络的部署,该信号可能还会越来越多地应用于地下设施等以前不可用的位置。对于蜂窝通信调制解调器来说,将此类无线信号用于授时应用以及通信显然是很方便的。

蜂窝通信信号可提供出色的短期稳定性以及良好的长期稳定性,并可为连接到同一基准站的静态分布式物联网传感器网络提供相对精确的授时。视蜂窝通信系统设计而定,蜂窝通信信号可能会更准确地或不太准确地链接到绝对时间。举例来说,CDMA和TDMA系统通常使用GNSS准确地与绝对时间同步,而GSM网络的控制则不那么严格,而LTE基准站的绝对授时取决于网络配置。

与广播无线信号相同,蜂窝通信基准站可以发送指示传输绝对时间的消息,每个设备在收到该消息时会给出一个绝对时间(取决于信号从基准站传播的距离)。

网络授时

建立互联网连接后,授时服务和协议(例如NTP、PTP)可用于为调制解调器设备提供授时服务。此外,在某些为GNSS接收机提供加速定位的服务中,也可能附带提供授时。作为u-blox蜂窝通信调制解调器的CellLocate功能的一部分,绝对授时信息可通过蜂窝通信网络提供。

GNSS信号

GNSS信号可为IoT应用提供原子钟级别的授时精度。GNSS信号的授时单元可根据来自搭载原子钟的GNSS卫星的信号确定其 x、y 和 z 坐标以及绝对时间,因此已成为同步移动通信网络基础设施的首选解决方案,并且非常适合广域应用。

网络时间协议NTP

NTP协议全称网络时间协议(Network Time Protocol)。它的目的是在国际互联网上传递统一、标准的时间(国际标准时间UTC)。具体的实现方案是通过原子钟、天文台、卫星或Internet上获取UTC时间,这样就有了准确而可靠的时间源。NTP同时同步指的是通过网络的NTP协议与时间源进行时间校准。前提条件是时间源输出必须通过网络接口,数据输出格式必须符合NTP协议。局域网内所有的PC、服务器和其他设备通过网络与时间服务器保持同步,NTP协议自动判断网络延时,并给得到的数据进行时间补偿,从而使局域网设备时间保持统一精准。

NTP客户端发出时间请求,与时间服务器交换时间,这个交换的结果是,客户端能计算出时间的延迟,它的弥补值,并调整与服务器时间同步。通常情况下,在设置的初始,在5至10分钟内有6次交换。 一旦同步后,每10分钟与服务器时间进行一次同步,通常要求单一信息交换。冗余服务器和不同的网络路径用于保证可靠性的精确度,除了客户端/服务器商的同步以外,NTP还支持同等计算机的广播同步。NTP在设计上是高度容错和可升级的。

GPRMC+PPS

自动驾驶车辆一般使用卫星进行授时,GNSS接收机工作后,会通过一根单线输出一条时间周期为1s的同步脉冲信号PPS,脉冲宽度5ms~100ms,同时会通过标准串口输出GPRMC标准的时间同步报文。

同步脉冲前沿时刻与GPRMC报文的发送在同一时刻,误差为ns级别,误差可以忽略。GPRMC是一条包含UTC时间(精确到秒)、卫星数量、经纬度等数据的标准格式报文。PPS秒脉冲为物理电平输出,接收及处理PPS信号的时间在ns级别,依旧可以忽略。但GPRMC数据一般通过波特率9600的串口发送,发送、接收、处理时间在ms级别,是时间同步的关键。

使用PPS+GPRMC进行时间同步的原理

(1)设备收到PPS秒脉冲信号后,将内部以晶振为时钟源的系统时间里的毫秒及以下时间清零,并由此开始计算毫秒时间。

(2)当收到GPRMC数据后,提取报文里的时、分、秒、年、月、日UTC时间。

(3)将收到秒脉冲到解析出GPRMC中UTC时间所用的时间tx,与UTC整秒时间相加,同步给系统时间,至此已完成一次时间同步。下一秒再进行相同的过程,每秒准确校准一次。

为什么不把GNSS接收机输出的PPS和GPRMC直接接到系统中需要时间同步的各个模块呢?

(1)PPS是一个低功率的脉冲电平信号,驱动电流少的只有0.5mA,多的也就20mA,带几个模块还行,十几个就很困难了。

(2)PPS是无屏蔽的单线脉冲信号,十几根PPS线穿梭在车内,极易受到车内恶劣电磁环境的干扰,届时根本无法区分出是干扰脉冲还是同步脉冲。

(3)GPRMC通过RS232串口(3根线)发送同步报文,RS232是一种1对1的全双工通信形式,也可以通过主从形式实现1对几数据传输。但一对十几,实属罕见,只能通过试验验证到底可不可行,但至少线束工程师是打死不愿答应的。

(4)当时钟源丢失的时候,所有需要时间同步的设备都一下子没有了主心骨,每个小弟都可以自立门户,没有二当家的及时站出来,主持大局。这对功能安全要求极高的自动驾驶系统来说,根本无法接受。

所以通常需要中央网管作为二当家,当时钟源丢失时(室内、隧道等卫星信号丢失场景),二当家依靠内部时钟源自行走时,二当家的内部时钟源可以选择市场上常见的压控晶振、温补晶振、恒温晶振、铷原子钟等。压控晶振相对来说是守时精度最差的,价格也相对应的最便宜,守时精度一天误差几秒;温补晶振比压控晶振的守时精度稍微能好点,误差在1s/天;恒温晶振会比温补晶振稍微贵一些,指标4ms/天;铷钟会比恒温晶振价格贵些,铷钟的守时指标是5ms/年。设计人员可以根据用户实际应用环境要求来选择内置时钟源,不是越贵越好,合适的才是最好的。

高精度时间同步协议PTP

PTP 是一种高精度时间同步协议, 一般在实际使用中,现有的NTP可以达到5ms以内的精度,PTP可以到达亚微秒级精度,有资料说可达到30纳秒左右的偏差精度,但需要网络的节点(交换机)支持PTP协议,才能实现纳秒量级的同步。

PTP与NTP主要区别:

PTP是在硬件级实现的,NTP是在应用层级别实现的。

PTP 是主从同步系统,采用硬件时间戳,并配合一些对NTP更高精度的延时测量算法,可以大幅减少软件处理时间。

PTP可运行在L2层(MAC层)和L4层(UDP层),运行在L2层网络时,直接在MAC层进行报文解析,不用经过四层UDP协议栈,从而大幅减少协议栈驻留时间,提高同步的精确度。

PTP 可以承载在 UDP 上时 , 软件可以采用 SOCKET 进行收发 UDP包 , 事件消息的 UDP 端口号 319 , 普通消息的组播端口号为 320 ,但其精度就大大降低。

在物理硬件要求主从端都是PTP设备,且网络不能太大,其中间经过的交换机设备也必须支持PTP协议,并且主从时间网络链路唯一,不存在交替的PTP通道。

PTPv2 采用相对时间同步机制。一个参与者被选作主时间钟,其将发送同步信息到从站。主站将发送同步报文到网络。所有的从站计算时间延迟。设备中运行PTP协议的网络端口称为PTP端口,PTP主端口用来发布时间,PTP从端口用来接收时间。

PTP同时定义了三种时钟节点:边界时钟节点、普通时钟节点、透明时钟节点。

边界时钟节点(BC,Boundary Clock):有一个以上PTP通信端口的时钟,其中一个用来同步上游设备时间,其余端口用来向下游设备发送时间。当边界时钟节点的上游时间同步设备是GNSS接收机时,此时的边界时钟节点就是一个主时钟节点(最优时钟)。

普通时钟节点(OC,Ordinary Clock):只有一个PTP通信端口的时钟是普通时钟,用来同步上游时钟节点的时间。

透明时钟节点(TC,Transparent clock):与BC/OC相比,BC/OC需要与其它时钟节点保持时间同步,而TC则不与其它时钟节点保持时间同步,收到什么时间,转发什么时间。TC有多个PTP端口,但它只在这些端口间转发PTP协议报文并对其进行转发延时校正,而不会通过任何一个端口同步时间。TC包括以下两种类型:

E2ETC(End-to-End TransparentClock,端到端透明时钟):直接转发网络中非P2P(Peer-to-Peer,点到点)类型的协议报文,并参与计算整条链路的延时。

P2PTC(Peer-to-PeerTransparent Clock,点到点透明时钟):只直接转发Sync报文、Follow_Up报文和Announce报文,而终结其它PTP协议报文,并参与计算整条链路上每一段链路的延时。

PTP通过在主从设备之间交互同步报文,并记录下报文发送时间,从而计算网络传输延迟和主从设备间时钟的偏差。PTP定义了四条同步报文:Sync、Follow_Up、Delay_Req、Delay_Resp。

Sync: 同步消息,由主设备发送给从设备,消息中可以包含Sync发送时间标签,也可以在后续的Follow UP 消息中包含;

Follow Up:用于传送Sync消息的发送时间;

Delay Req:请求对端返回接收到Delay Req消息时的时间标签,时间标签嵌入在响应消息Delay Resp;

Delay Resp:对 Pdelayreq 的响应,可以带发送时间标签,如果没有带由随后的Pdelay RespFollow Up 传送;

精确同步过程如下

(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。

两个未知数,两个方程组,应用初中数学知识可以解出:

网络延时=[(t2-t1)+(t4-t1)]/2,

时钟偏差=[(t2-t1)-(t4-t3)]/2。

在自动驾驶系统中,智驾域控制器因为直接连接GNSS接收机(或内置),而GNSS又是绝佳的时钟源,因此智驾域控制器自然而然成为主时钟节点,中央网关域控制器通过车载以太网主干网串联起其它域控制器,自然而然成为边界时钟的最佳选择,这样在时钟源丢失的时候,边界时钟节点同步主时钟节点的系统时间,仍然可以保持整个全域架构内相对时间一致。 其它域内传感器、执行器的时间同步需求,若没有,此域控制器设计成普通时钟节点即可。如有,可以设计成边界时钟,以保证无时钟源时的相对时间统一。

基于以太网设备的时间同步方案已经完善,而对于非车载以太网设备但有非常强烈同步需求的相机,我们还得特殊处理一下。将相机设置为外触发模式,通过主控给相机外触发脉冲信号。相机拍照时,曝光时刻也会产生脉冲信号发送给主控,主控记录此时系统时间,并将时间戳数据放到相机的图像数据里。

本文来自投稿,不代表恒远汽车立场,如若转载,请注明出处:https://www.cdgtzz.com/qckj/10059.html