自动驾驶时间同步分析概述--PPS/GPRMC/PTP/全域架构时间同步方案

article/2025/10/16 8:02:49

时间同步的重要性在生活中已经充分体现。试想你因一个姑娘在酒吧和别人大打出手,并约定下周六早上九点在后海小树林里进行群体活动。为此你微信召集了在南非、印度、泰国干建筑的好兄弟。可在你如期赴约的时候,发现队友只有河畔的孤影。当你在病床上睁开双眼的时候,看到了你好兄弟们愧疚的黑黢黢的脸庞,原来他们忘记考虑时差了。

自动驾驶系统更是如此,身边的一众小弟

(域控制器、激光雷达、相机、毫米波雷达等)

哪个不是桀骜不驯、性格迥异,想要管理好他们,时间同步是基础。家族里的其他域控制器(座舱域、动力域、车身域、底盘域等)也需要实现时间同步,不然来你家看个世界杯,都不能及时分享国足进球、问鼎世界杯冠军的喜悦。

因此自动驾驶圈黑话第四期就详细介绍自动驾驶系统时间同步的前世今生。

1 时间同步背景

儿时,我们都哭过闹过让父母给我们买过儿童电子手表,但这个手表有一个缺点,每过一段时间总会和CCTV的标准时间存在偏差,因此需要手工校准。自动驾驶里的域控制器和传感器若都采用内置的硬件时钟,同样会存在不同硬件时间存在偏差的现象。试想在感知融合阶段,左侧车道有一辆时速80km/h的车辆正准备超车变道,由于没有时间同步,激光300ms前的点云数据与相机当前的图像数据融合。融合时激光点云数据置信度又高于图像数据,则决策单元误判断为后车没有超车行为,继续当前的行车状态或加速行驶,那么下一秒则可能酿成“亲人两行泪”这一悲剧。

除了硬件时钟偏差的原因,各种传感器的采样频率也不一致,当前激光典型采样频率为10HZ,相机为30fps,高精度组合导航为100HZ

没有准确的时钟同步,各传感器在哪一帧进行融合,在哪里进行插值都没法进行判断。

两个传感器即使采样频率一致,其每帧数据的采样点也一般不一致。

真正应了那句,不主动求变,那就只能生死由命富贵在天了。

除了自动驾驶域需要精确的时钟信息外,其他域相关功能同样也需要。

大屏上实时高精地图显示;驾驶员实时疲劳检测;实时的流媒体后视镜显示;车辆与路侧RSU之间的实时信息交互,无一不需要全域架构内的精确时间同步。

2 时间同步技术

要实现时间同步,首先需要一位德高望重,威名远播的的族长(时钟源)。

族长负责宗族内部的管理和各项事务的主持(进行时间同步)。

有的家族过于庞大,族长年事又高,一般会再选一名柱首(主时钟节点)及几名房长(边界时钟节点)替族长处理族里日常杂事,族员的恩怨情仇(主时钟设备对其它设备进行授时)。

时钟源

自动驾驶系统目前绝大多数标配高精度GNSS接收机,而GNSS中导航卫星内置高精度原子钟,GNSS接收机通过解算导航卫星信号,可以获得超高精度的时钟信号。所以GNSS除了广为人知的定位功能,还有一个鲜为人知但重要非凡的授时功能。

原子钟是人类目前最精确的时间测量仪器,原子在不同能级之间的移动称为“跃迁”,且由高能级跃迁到低能级时,会释放电磁波。

而对同一种原子来说,这种频率是固定的,且不受温度和压力影响,只与自身能量有关,物理学上称之为“共振频率”。物理学家通过一些物理手段,获得共振频率的准确物理值。

并以此值作为产生时间信号的基本节拍,即丈量时间的基本单位。据相关报道,北斗三号卫星上的原子钟300年才会有1s累积误差。

GNSS车载接收机在接收到大于等于4颗卫星的地方,通过解算即可获得接收机系统时间与卫星原子钟之间钟差,并通过钟差来校准自己的系统时间,这一步就是GNSS的授时功能。

至此,GNSS车载接收机已经得到上天诰命,成为这个家族最德高望重的族长了。

“两条族规”-PPS+GPRMC

GNSS接收机加冕完成后,会颁布两条族规。一条是时间周期为1s的同步脉冲信号PPS,脉冲宽度5ms~100ms;一条是通过标准串口输出GPRMC标准的时间同步报文。

同步脉冲前沿时刻与GPRMC报文的发送在同一时刻,误差为ns级别,误差可以忽略

GPRMC是一条包含UTC时间(精确到秒),经纬度定位数据的标准格式报文。

 

PPS秒脉冲为物理电平输出,接收及处理PPS信号的时间在ns级别,依旧可以忽略。

但GPRMC数据一般通过波特率9600的串口发送,发送、接收、处理时间tx在ms级别,是时间同步的关键。以下是使用PPS+GPRMC进行时间同步的原理。

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

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

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

聪明的人可能已经恍然大悟,后面哪个小弟需要进行时间同步,谁做两根线接上这两个物理接口就妥了。可见你是一位自以为是的主管,一位听不进去良言的中层!

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

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

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

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

高精度时间同步协议PTP

因此基于单纯的PPS和GPRMC实现整个自动驾驶系统的时间同步,具有理论可行性,但并不具有实际可操作性。

而基于网络的高精度时间同步协议PTP(Precision Time Protocol,1588 V2),同步精度可以达到亚微秒级。这对于主干网络为以太网的全域架构来说,简直是万事具备,只欠各域控制器的硬件PHY芯片支持了。

PTP是一种主从式的时间同步系统,采用硬件时间戳,因此可以大幅减少软件处理时间。

同时PTP可运行在L2层(MAC层)和L4层(UDP层),运行在L2层网络时,直接在MAC层进行报文解析,不用经过四层UDP协议栈,从而大幅减少协议栈驻留时间,进一步提高时间同步精度,对于自动驾驶系统来说非常友善。

设备中运行PTP协议的网络端口称为PTP端口,PTP主端口用来发布时间,PTP从端口用来接收时间。同时定义了三种时钟节点,边界时钟节点(BC,Boundary Clock)、普通时钟节点(OC,Ordinary Clock)和透明时钟节点(TC,Transparent clock)。

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

(2)普通时钟节点只有一个PTP端口,用来同步上游时钟节点的时间。

(3)透明时钟,人如其名,具有多个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。

两个未知数,两个方程组,应用初中数学知识可以解出:网络延时=[(t2-t1)+(t4-t1)]/2,时钟偏差=[(t2-t1)-(t4-t3)]/2。 

3 全域架构时间同步方案

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

其它域内传感器、执行器的时间同步需求,若没有,此域控制器设计成普通时钟节点即可。如有,可以设计成边界时钟,以保证无时钟源时的相对时间统一。

基于以太网设备的时间同步方案已经完善,而对于非车载以太网设备但有非常强烈同步需求的相机,我们还得特殊处理一下。

将相机设置为外触发模式,通过主控给相机外触发脉冲信号。

相机拍照时,曝光时刻也会产生脉冲信号发送给主控,主控记录此时系统时间,并将时间戳数据放到相机的图像数据里。


http://chatgpt.dhexx.cn/article/clZIIMug.shtml

相关文章

U-BLOX GPS 模块及GPRMC指令解析

受朋友所托,调试一款GPS模块,该模块是UBLOX的NEO-6M GPS模组。想到用这款GPS的人较多,自己日后也有可能在用到这个模块,就写下这份笔记。 一、介绍 基本信息如下: 1、 模块采用U-BLOX NEO-6M模组,体积小巧&…

ROS节点解析GPS数据:GPRMC/GPFDP/HEADINGA

数据解析,肯定是要知道数据格式的: 数据格式参考:(前人已经总结的比较齐全了) https://blog.csdn.net/u010384390/article/details/78432016?ops_request_misc%257B%2522request%255Fid%2522%253A%2522163031225416…

python各种模块,迭代器,生成器

从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目录&#…

VFS - 虚拟文件系统的加载和导出

VFS - 代码生成器预览功能实现VFS - 虚拟文件系统基本操作方法的封装VFS - 虚拟文件系统的加载和导出 这是 VFS 的最后一篇,前面两篇中的基本方法已经实现了一个简单的虚拟文件系统,可以创建目录和文件,可以读写文件的内容。在这最后一篇中&a…

如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说,递归就是函数自己调用自己,它作为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说,递归需要有边界条件、递归前进阶段和递归返回阶段…

python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

python数据结构和算法 参考 本文github 计算机科学是解决问题的研究。计算机科学使用抽象作为表示过程和数据的工具。抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性。Python是一种强大但易于使用的面向对象语言。列表、元组和字符串都是用Python有序集合…

黑马毕向东Java课程笔记(day20-1——20-17)IO流:File类及相关方法、递归、递归的相关练习、Properties、PrintWriter类与PrintStream类、合并流与切割流

1、File类概述   File是文件和目录路径名的抽象表示形式。 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。   前面说到的“流”,它只能操作数据,想要操作由数据封装成的文件的信息,必须使用File对象…

算法: 如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说,递归就是函数自己调用自己,它做为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说,递归需要有边界条件、递归前进阶段和递归返回阶段…

day04函数名 闭包 迭代器 生成器(各种推导式和生成器表达式) 内置函数 装饰器 递归...

一.今日内容概 1. 函数本质就是一个内存地址. 用起来和变量一模一样 2. 闭包 内层函数对外层变量的使用 1. 保护变量 2. 让一个变量常驻内存 3. 迭代器 可迭代对象: __iter__ 迭代器: __iter__ __next__ from collecti…

linux 迭代列出文件,讲解在Linux命令行下使用ls命令列出文件的技巧

Linux ls 命令可以说是在 Linux 中常见到的命令之一,因为使用它可以掌握系统中文件所在目录中的内容,从而能够查看与修改文件,如果你正在使用 Linux ls 命令,不妨看一下以下技巧,它能帮助你更快速的完成任务。 ls 命令…

学习递归的另一种方法

每个学期,我都会通过一项调查,以获取有关我的教学的一些反馈。 上学期终于有人给我写一篇新文章的想法。 特别是,他们想了解有关递归的更多信息,所以我认为我会综合一些技巧。 递归概述 对于那些可能是第一次学习递归的人&#x…

用非递归方法实现递归算法时_学习递归的另一种方法

用非递归方法实现递归算法时 每个学期,我都会通过一项调查,以获取有关我的教学的一些反馈。 上学期终于有人给我写一篇新文章的想法。 特别是,他们想了解有关递归的更多信息,所以我认为我会综合一些技巧。 递归概述 对于那些可能…

bat 文件夹移动

echo off echo hello world ::得到当天 set pathLog%date:~0,4%%date:~5,2%%date:~8,2% :: eg:能得到 秒:set pathLog%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% :: set pathLog%pathLog: 0% ::创建文件夹 md "d:\log\log%pathLog% ec…

【Python零基础入门篇 · 19】:os模块、可迭代对象和迭代器对象

目录 一、os模块 1、os模块中的命令: 2、常用命令的代码演示 os.getcwd() os.chdir(path) os.listdir(path) os.mkdir(path) os.makedirs(path) os.rename(旧名,新名) 3、举例:查找文件夹下所有满足要求的文件 二、可迭代对象和迭代器对象 1、…

day18:File(构造方法、创建、删除文件或者文件夹、 判断性、重命名与剪切、得到性、过滤性)、递归(遍历文件夹文件)

一 回顾 1.HashMap集合 特点: A.数据结构也是Hash表结构 B.多线程中是不安全 C.默认的数组的初始化容量是16 2.HashMap与HashSet的比较 相同点:都是hash表结构来存储 不同点: A.HashSet的底层就是使用HashMap来实现 B.HashSet的数据结构针对与是元素 HashMap的…

Python 文件和文件夹 01

Python文件和文件夹 01 ① 修改当前目录,首次利用 pandas 读取 excel 表 os.chdir import os import pandas as pd os.chdir(C:/aa/bb/cc) os.chdir(rC:\aa\bb\cc)数据 pd.read_excel("temp.xlsx") 等同于当前路径下的 temp.xlsx 文件。print(数据)② 字…

删除win10无限嵌套文件夹

解决由于失误操作导致WIN10系统产生无限循环的文件夹问题 昨天本想自己写一个拷贝文件的小程序,结果出现了点小问题,整出了一个无限循环的文件夹,直接删除出出现错误代码提示,显示无法删除,然后我就去网上找解决方案&…

计算机专硕一般研二在干嘛,专硕一般研二在干嘛,专硕两年怎么安排

一般学习两年。 硕士学位的学制取决于您申请的学校和专业。 不同的学校可能不同,同一所学校的硕士学位也可能不同。 许多学校还设有两年半的学制,甚至三年制的学制。本文一起来看一下吧~ 一.什么人适合读专硕 1、英语相对一般的人 学硕主要考英语一试卷&…

研二导师画大饼,不给时间实习,咋办

一个小学弟最近咨询我 我是本硕都在一所双非一本就读,软件工程,目前研二,23 届。我想在暑期进行一下今年的实习,想着可能对后面秋招和来年春招有帮助,但是实验室管的严导师不放时间(其实我当时是为了毕业条件和平时研…

2022年终总结与2023新年展望

前言 时间过得太快了,虽然写博客已经很多年了,但是年终总结一直由于种种原因没有写过,2022年确实是魔幻的一年,不知不觉自己也已经研二了,因为疫情的原因突然放开,提前放假回家,借此机会写一下…