自动驾驶中的多传感器时间同步

目录

前言

1.多传感器时间特点

2.统一时钟源

       2.1 时钟源

        2.2 PPS+GPRMC

        2.3 PTP        

         2.4 全域架构时间同步方案

3.时间戳误差

        3.1 硬件同步

        3.2 软件同步

        3.2.3 其他方式

        ① ROS 中的 message_filters 包

        ② 双端队列 std::deque

参考:


前言

        对多传感器数据(Lidar,Camera,GPS/IMU)进行高精度的时间同步的原因:

  • 1.每个传感器拥有自己的内部时钟,时钟之间存在“钟漂”,导致各传感器的时间基准不一致;
  •  2.不同的传感器采样频率不一样;
  •  3.数据传输、Camera 曝光等会产生不可控的延迟。

1.多传感器时间特点

传感器时间特点
GNSSGNSS 接收机在接收到卫星信号后,通过解算即可获得接收机系统时间与卫星原子钟之间钟差,并通过钟差来校准自己的系统时间,完成授时功能。
Camera自动驾驶上使用的相机(Rolling Shutter)一般是支持外部触发曝光的。 Camera 帧周期包括曝光时间(exposure time)和读出时间(readout time,cmos 相同时固定)。
Lidar自动驾驶中所使用的 Lidar,例如 Mid-360,从硬件层面上支持PPS+NMEA协议(PPS硬件触发,GPRMC授时)。LiDAR 通常支持两种时间同步接口:基于以太网的PTP/gPTP时间同步和基于GPS的PPS+NMEA协议。
Rader主流的车载毫米波雷达采用 FMCW 调制方式,上电后开始进行信号的发送和接收,内部有专门的时间机制,无法接收外部的时间。但毫米波雷达周期性发送 CAN 信号,所以可以从 CAN 信号中获取时间信息。
IMU一般和 Lidar/GNSS 集成,不需要额外考虑。

2.统一时钟源

        为了解决“钟漂”问题,提供一个所有传感器都遵循的共同时间基准,我们引入了统一时钟源的概念,如下图所示:

        统一时钟源有两种常见方式:一种是基于 GPS 的 “PPS+NMEA” (秒脉冲+GPRMC),另一种是基于以太网的 PTP(IEEE 1588)、gPTP(IEEE 802.1AS)时钟同步协议。 自驾领域主流的方案是结合上述两种方案,以 GNSS 时钟时间为基准时间,采用 PTP/gPTP 时钟同步协议统一各 传感器/域 之间的时钟源,完成时间基准的统一。

       2.1 时钟源

        自动驾驶系统目前绝大多数标配高精度 GNSS 接收机,而 GNSS 中导航卫星内置高精度原子钟,GNSS接收机通过解算导航卫星信号(大于等于 4 颗卫星的信号),可以获得接收机系统时间与卫星原子钟之间钟差,并通过钟差来校准自己的系统时间,得到超高精度的时钟信号,这就是GNSS 的授时功能
        原子钟是人类目前最精确的时间测量仪器,原子在不同能级之间的移动称为“跃迁”,且由高能级跃迁到低能级时,会释放电磁波。而对同一种原子来说,这种频率是固定的,且不受温度和压力影响,只与自身能量有关,物理学上称之为“共振频率”。物理学家通过一些物理手段,获得共振频率的准确物理值。并以此值作为产生时间信号的基本节拍,即丈量时间的基本单位。据相关报道,北斗三号卫星上的原子钟300年才会有1s累积误差。
        

        2.2 PPS+GPRMC

        GNSS 接收机获取时钟信号后,会输出两类同步信号:①同步脉冲信号 PPS。其时间周期为 1s ,脉冲宽度5ms~100ms;②GPRMC 时间同步报文。通过标准串口输出,符合 GPRMC 格式,用于提供精确的时间同步信息。

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

# 示例数据
$GPRMC,001155.00,A,2237.496474,N,11356.089515,E,0.0,225.5,230520,2.3,W,A*28# 数据说明
field 0:$GPRMC, 格式ID,表示该格式为建议的最低特定GPS / TRANSIT数据(RMC)推荐最低定位信息
field 1: UTC时间, 格式hhmmss.ssss,代表时分秒.毫秒
field 2: 状态 A:代表定位成功 V:代表定位失败 
field 3: 纬度 ddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 4: 纬度 N(北纬)  S(南纬)
field 5: 经度 dddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 6: 经度 E(东经) W(西经)
field 7: 速度(也为1.852 km / h)
field 8: 方位角,度(二维方向,等效于二维罗盘)
field 9: UTC日期 DDMMYY 天月年
field 10: 磁偏角(000-180)度,如果前导位数不足,则用0填充)
field 11: 磁偏角方向E =东W =西
field 12: 模式,A =自动,D =差分,E =估计,AND =无效数据(3.0协议内容)
field 13: 校验和

        其中 PPS 前沿时刻与 GPRMC报文 的发送在同一时刻,误差为 ns 级别,可以忽略。PPS 秒脉冲(通常为1PPS,即1次每秒)为物理电平输出,接收及处理 PPS 信号的时间在 ns 级别,依旧可以忽略。但 GPRMC数据一般通过波特率 9600 的串口发送,其发送、接收、处理时间 tx 在 ms 级别,是时间同步的关键。以下是使用 PPS+GPRMC 进行时间同步的原理。 

  • (1)设备收到 PPS 秒脉冲信号后,将内部以晶振为时钟源的系统时间里的毫秒及以下时间清零,并由此开始计算毫秒时间。
  • (2)当收到 GPRMC 数据后,提取报文里的年、月、日、时、分、秒的 UTC 时间。
  • (3)将收到秒脉冲到解析出 GPRMC 中 UTC 时间所用的时间 tx,与 UTC 整秒时间相加,同步给系统时间,至此已完成一次时间同步。下一秒再进行相同的过程,每秒准确校准一次。

        基于单纯的 PPS 和 GPRMC 实现整个自动驾驶系统的时间同步的局限:

  • PPS信号驱动能力不足:PPS 是一种低功率脉冲信号,驱动电流范围通常为 0.5mA 至 20mA,难以触发多个传感器的稳定工作。
  • PPS 信号抗干扰能力较弱:PPS 信号为无屏蔽的单线脉冲信号,在车辆复杂的电磁环境中容易受到干扰。当多条 PPS 线同时布置在车内时,可能难以区分干扰脉冲和有效同步脉冲,导致信号准确性下降。
  • GPRMC 报文的传输限制:GPRMC 通过 RS232 串口传输同步报文,RS232 为 1 对 1 的全双工通信形式,可通过主从方式实现有限的 1 对 N 数据传输。然而,若需支持十几台设备的同步传输,实际应用中可能面临困难,需通过实验验证可行性。此外,线束的复杂性会对工程设计造成较大挑战。导远 INS570D 车载组合导航定位系统的 PPS+GPRMC 信息如下:

        若将其接入 Mid-360,则参考:Mid-360 时间同步说明

  • 时钟源失效的严重后果:当时钟源丢失时,所有依赖同步的设备将失去统一基准,各设备时钟将自主运行,失去全局协调。这种情况在对功能安全要求极高的自动驾驶系统中是不可接受的,需要设计冗余机制以确保在主时钟故障时由备用时钟迅速接替,维持全系统的正常运行。

        2.3 PTP        

        PTP(Precision Time Protocol,IEEE 1588 V2)是基于以太网的高精度时钟同步协议,是一种主从式的时间同步系统,能够实现主节点(Master Node)从节点(Slave Node)之间的亚微秒级时钟同步,前提是所有节点之间都通过以太网互联,交换机支持 PTP 协议,并且每个节点都支持 PTP 协议。

        设备中运行 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 + T_delay(网络延时)+ T_offset(时钟偏差)= t2
  • (3)从端口向主端口发送 Delay_Req 报文,同步记录下 Delay_Req 发送的时间 t3。主端口收到报文后,记录下收到的时间 t4。
  • (4)紧接着主端口将 t4 时间放到 Delay_Resp 报文发送给从端口,从端口收到此报文后就可以解析出 t4,并由此得到第二个方程式:t3 + T_delay(网络延时)- T_offset(时钟偏差)= t4

        这里假设网络延迟是对称的,即上下行的延迟相等。解方程组得:

T_{delay}=\frac{[(t2-t1)+(t4-t3)]}{2}

 T_{offset}=\frac{[(t2-t1)-(t4-t3)]}{2}

         2.4 全域架构时间同步方案

        全域架构下,智驾域控制器因为直接连接GNSS接收机(或内置),而GNSS又是绝佳的时钟源,因此智驾域控制器自然而然成为主时钟节点,中央网关域控制器通过车载以太网主干网串联起其它域控制器,自然而然成为边界时钟的最佳选择,这样在时钟源丢失的时候,边界时钟节点同步主时钟节点的系统时间,仍然可以保持整个全域架构内相对时间一致。
        其它域内传感器、执行器的时间同步需求,若没有,此域控制器设计成普通时钟节点即可。如有,可以设计成边界时钟,以保证无时钟源时的相对时间统一。
        基于以太网设备的时间同步方案已经完善,而对于非车载以太网设备但有非常强烈同步需求的相机,我们还得特殊处理一下。将相机设置为外触发模式,通过主控给相机外触发脉冲信号, 即 PPS。相机拍照时,曝光时刻也会产生脉冲信号发送给主控,主控记录此时系统时间,并将时间戳数据放到相机的图像数据里。

3.时间戳误差

        完成时钟源的统一后,每个传感器数据都有了全局一致的时间参考。但会面临一个新问题,不同的传感器采样频率不一样,比如激光雷达(通常为 10Hz)和相机(通常为 30Hz)。导致在特定时间获取同步数据可能会有延迟,在动态环境中可能造成较大的误差。
        如下图所示,三个传感器具有不同的采样频率。在 T1 时刻,传感器2 有一个数据,此时,我们需要对应传感器1 和  3的数据是多少,就会进行查找。查找的方式就是找对应的传感器数据和传感器2时间差最近的数据包。如果查找的数据包时间和 T1 时刻传感器2 数据包的差距较大,在加上车身和障碍物都在移动,这样误差会比较大。为了缓解查找时间戳造成的误差现象,主要采用的方式有硬件同步和软件同步。

        3.1 硬件同步

        硬件同步是一种通过物理信号来确保不同传感器数据采集时间一致性的方法。一种常见的硬件同步方法是使用 PPS 信号作为触发器。PPS 信号是一个精确的时钟信号,可以触发传感器在特定的时间点采集数据,以此来改变传感器的数据采集频率。GNSS系统除了可以作为统一的时钟源外,还可以利用其 PPS 脉冲来触发传感器在特定的时间点采集数据,当使用 GNSS 的 PPS 脉冲时,传感器给出的数据包中的时间戳即为对齐到绝对时间的上的全局时间戳(GPS时间戳)而非传感器时间戳。由于 GNSS 的 PPS 的频率通常只有 1Hz,所以通常需要一个设备把 PPS 信号转发为任意频率(分频,1Hz -> 10Hz)、但是跟原始 PPS 信号同相位的方波,这样就可以控制各传感器的采集频率了。
        例如,激光雷达和相机可以配置为在 PPS 信号的上升沿采集数据,从而确保两者的数据采集是同步的。具体来说,激光雷达可以利用其相位锁定功能来实现与 PPS 信号的同步,如下图所示。通过设置激光雷达的相位锁定角度与相机视野的中心对齐,可以在激光雷达的激光束旋转到相机视野中心线时触发相机,实现两者的同步采集。

        当然,由于激光雷达是连续旋转采集数据,而相机则是瞬间曝光,因此硬件同步只能近似实现。例如,激光雷达的帧率若是 10Hz,那么一帧点云中最早和最晚采集的点之间的时间差可能达到 100ms。相机由于曝光是瞬时的,其所有像素点的采集时刻是一致的。因此,对于相机视野中心的点云,采集时间与图像采集时间一致,但对于视野边缘的点云,存在一定的时间偏差,这个偏差可能在 5ms 到 20ms 之间。

        3.2 软件同步

        软件同步是一种在数据处理阶段对传感器数据进行时间校正的方法。当硬件同步无法实现或不足以满足系统要求时,软件同步提供了一种解决方案,利用已知的时间标签和传感器的运动信息来推算传感器数据的准确时间点。
        内插外推法是软件同步中常用的一种算法。通过以下步骤实现同步:

  • 时间差计算:首先,计算两个传感器数据帧之间的时间差。例如,如果有一个激光雷达(Lidar)数据帧和一个相机数据帧,它们的时间标签可能不同,我们需要找出这两个时间标签之间的差异。
  • 运动信息获取:收集传感器在两个时间标签期间的运动信息,这通常包括速度、加速度和旋转等。
  • 位置推算:利用传感器的运动信息和时间差,通过物理模型或机器学习模型推算目标在两个时间点之间的位置变化。
  • 建立新帧:根据推算出的目标位置,创建一个新的数据帧,这个新帧代表了两个原始数据帧之间的某个时间点的状态。

        软件同步通过智能的数据处理技术弥补了硬件同步的不足,提高了传感器数据的同步精度,当然,它也需要额外的计算和实时性要求,需要精心设计和优化算法来实现高效准确的同步。

        3.2.3 其他方式

        ① ROS 中的 message_filters 包

        ROS 提供了message_filters 包来进行时间软同步,message_filters 类似一个消息缓存,分别订阅不同传感器的 Topic,当消息到达消息过滤器时,并不会立即输出,而是在满足一定条件下输出,产生一个同步结果并给到回调函数,在回调函数里处理时间同步后的数据。

        message_filters 只是输出时间轴上相近的不同传感器的数据,不能做到主动去同步!详情参考 ROS时间同步----使用message_filters进行时间软同步。

        ② 双端队列 std::deque

        使用双端队列 std::deque 存储不同传感器的数据,根据不同传感器数据的时间戳进行判断,对满足时间同步要求的数据进行处理。类似 message_filters 包,只是输出时间轴上相近的不同传感器的数据。

        详情可参考:从零开始做自动驾驶定位(六): 传感器时间同步

std::queue buf1;
std::queue buf2;
std::thread process;
//typedef M 传感器数据类型,比如sensor_msg::PointCloud2、sensor_msg::Image等等
void callback1(M& msg){//数据入队buf1.push(msg);//其他代码...
}
void callback2(M& msg){//数据入队buf2.push(msg);//其他代码...
}
void process_comparation(){while(ros::ok()){M data1=buf1.front();M data2=buf2.front();if(data1.header.timestamp.toSec()>data2.header.timestamp.toSec()){buf2.pop();}else buf1.pop();//其他操作data1和data2的代码}
}
int main(int argc,char** argv){//initialization}

参考:

        多传感器时间同步----概述

        多传感器融合之时间同步----具体

        时间同步,自动驾驶里的花好月圆----PPS+GPRMC原理

        PTP(IEEE 1588)和  gPTP(802.1AS)时间同步方法

        智能驾驶数据融合中的精确时间同步:PTP/gPTP

        时间同步协议:gPTP(802.1AS)和 PTP(IEEE 1588)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络|(一)加权平均法,感知机和神经元

【1】引言 从这篇文章开始,将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解,如有雷同或者南辕北辙的表述,请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中,我们总会遇到求一组数据平均值的做法…

算法题(48):反转链表

审题: 需要我们将链表反转并返回头结点地址 思路: 一般在面试中,涉及链表的题会主要考察链表的指向改变,所以一般不会允许我们改变节点val值。 这里是单向链表,如果要把指向反过来则需要同时知道前中后三个节点&#x…

DroneXtract:一款针对无人机的网络安全数字取证工具

关于DroneXtract DroneXtract是一款使用 Golang 开发的适用于DJI无人机的综合数字取证套件,该工具可用于分析无人机传感器值和遥测数据、可视化无人机飞行地图、审计威胁活动以及提取多种文件格式中的相关数据。 功能介绍 DroneXtract 具有四个用于无人机取证和审…

SpringBoot中Excel表的导入、导出功能的实现

文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…

C语言,无法正常释放char*的空间

问题描述 #include <stdio.h> #include <stdio.h>const int STRSIZR 10;int main() {char *str (char *)malloc(STRSIZR*sizeof(char));str "string";printf("%s\n", str);free(str); } 乍一看&#xff0c;这块代码没有什么问题。直接书写…

2025蓝桥杯JAVA编程题练习Day1

1.刑侦科推理试题 题目描述 有以下10道单选题&#xff0c;编程求这10道题的答案。 这道题的答案是&#xff1a; A. A B. B C. C D. D 第5题的答案是&#xff1a; A. C B. D C. A D. B 以下选项中哪一题的答案与其他三项不同&#xff1a; A. 第3题 B. 第6题 C. 第2题 D.…

图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)

官网编译文档链接&#xff1a; https://doc.percipio.xyz/cam/latest/getstarted/sdk-ros2-compile.html 国内gitee下载SDK链接&#xff1a; https://gitee.com/percipioxyz 国外github下载SDK链接&#xff1a; https://github.com/percipioxyz 1.Camport ROS2 SDK 介绍 1.1 …

汽车网络信息安全-ISO/SAE 21434解析(中)

目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…

RAG是否被取代(缓存增强生成-CAG)吗?

引言&#xff1a; 本文深入研究一种名为缓存增强生成&#xff08;CAG&#xff09;的新技术如何工作并减少/消除检索增强生成&#xff08;RAG&#xff09;弱点和瓶颈。 LLMs 可以根据输入给他的信息给出对应的输出&#xff0c;但是这样的工作方式很快就不能满足应用的需要: 因…

TCP三次握手和四次挥手

TCP 三次握手和四次挥手 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的协议&#xff0c;在建立连接和断开连接时分别需要通过 三次握手 和 四次挥手 来确保通信的可靠性和完整性。 1. 三次握手 三次握手是 TCP 建立连接的过程&#xff0c;确保客户端和服务器双方…

在线免费快速无痕去除照片海报中的文字logo

上期和大家分享了用photoshop快速无痕去除照片海报中的文字logo的方法&#xff0c;有的同学觉得安装PS太麻烦&#xff0c;有那下载安装时间早都日落西山了&#xff0c;问有没有合适的在线方法可以快速去除&#xff1b;达芬奇上网也尝试了几个网站&#xff0c;今天分享一个对国人…

VS C++ 配置OPENCV环境

VS C 配置OPENCV环境 1.下载opencv2.安装环境3.opencv环境4.VS配置opencv环境5.EXE执行文件路径的环境lib和dll需要根据是debug还是release环境来区分使用哪个 6.Windows环境 1.下载opencv 链接: link 2.安装环境 双击运行即可 3.opencv环境 include文件路径:opencv\build\…

excel如何查找一个表的数据在另外一个表是否存在

比如“Sheet1”有“张三”、“李四”“王五”三个人的数据&#xff0c;“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列&#xff0c;修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的&#xff0c;就能找到两…

电路研究9.2.2——合宙Air780EP分组域相关命令

这个好像是GPRS网络相关的&#xff0c;我过来研究一下。 8.1GPRS 网络注册状态&#xff1a;ATCGREG 设置指令控制关于GPRS注册状态非请求结果码的显示。 当<n>1 并且 MT 的 GPRS 注册状态发生改变&#xff0c;即会有CGREG:<stat>的 URC 上报。 当 <n>2 并 且…

DeepSeek R1:中国AI黑马的崛起与挑战

文章目录 技术突破&#xff1a;从零开始的推理能力进化DeepSeek R1-Zero&#xff1a;纯RL训练的“自我觉醒”DeepSeek R1&#xff1a;冷启动与多阶段训练的平衡之道 实验验证&#xff1a;推理能力的全方位跃升基准测试&#xff1a;超越顶尖闭源模型蒸馏技术&#xff1a;小模型的…

UiAutomator的详细介绍

UIAutomator作为一种高效的测试框架&#xff0c;通过自动化手段显著提升了用户界面&#xff08;UI&#xff09;测试的效率与准确性。它不仅支持自动生成功能测试用例&#xff0c;还允许开发者在不同设备上执行这些测试&#xff0c;确保了应用程序的一致性和稳定性。 以下是对 …

开源物业管理系统赋能社区管理提升居民服务体验与满意度

内容概要 在现代物业管理中&#xff0c;开源物业管理系统的出现为社区管理带来了新的契机。这种系统的核心思想是通过开放、共享的方式&#xff0c;为各类物业管理需求提供灵活的解决方案。从基本的信息传递到复杂的投诉处理&#xff0c;开源物业管理系统能够根据不同社区的实…

【深入理解FFMPEG】命令行阅读笔记

这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…

递归搜索回溯综合练习(十五题)

目录 1.找出所有子集的异或总和再求和 2.全排列2 3.电话号码的字母组合 4.括号生成 5.组合 6.目标和 1.path作为全局变量 2.path用于传参 7.组合总和 方法一&#xff1a;按照每个空选什么数字进行递归 方法二&#xff1a;按照每个数字选几个进行递归 8.字母大小写全排…

JWT实现单点登录

文章目录 JWT实现单点登录JWT 简介存在问题及解决方案登录流程后端程序实现前端保存Tokenstore存放信息的缺点及解决 校验流程&#xff1a;为gateway增加登录校验拦截器 另一种单点登录方法&#xff1a;Token&#xff0b;Redis实现单点登录 JWT实现单点登录 登录流程&#xff…