打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一文了解自动驾驶中的时间同步

说明:转自知乎,著作权归作者,仅供学习和交流,侵删

往期:无人驾驶行业研究宝典

报告:下载 7.85G 自动驾驶&智能网联资料







为什么需要时间同步?

在自动驾驶中,需要用到很多传感器的数据(Lidar,Camera,GPS/IMU),如果计算单元接收到的各传感器的消息时间不统一,则会造成例如障碍物识别不准等问题。


时间同步包含哪些内容?

自动驾驶中,时间同步可以分为几部分的内容:统一时钟源,硬件同步,软件同步。其中硬件时间同步主要针对相机 。

1.统一时钟源

图片来源: @喝苦咖啡的小阿飞

假设各传感器都有自己的内部时钟,但由于每个时钟的钟漂不一样,导致各时钟之间存在时间差,所以需要统一各传感器的时间源。

一般采用GPS时间作为统一时间源,通过GPS给各个传感器提供基准时间,各传感器根据提供的基准时间校准各自的时钟时间。

各传感器根据已经校准后的各自时间为各自独立采集的数据加上时间戳信息,来做到所有传感器时间戳同步。

统一时钟源的常见方式有两种,一种是基于GPS的“PPS+NMEA”,另一种是基于以太网的IEEE 1588(或IEEE 802.1AS)时钟同步协议。

a.PPS+NMEA

GPS能够从卫星获得高精度的时钟信号,因此通常作为整个系统的时钟源。常规的GPS单元都支持输出精确到毫秒的秒脉冲信号PPS和包含年月日时分秒信息的NMEA指令,通过PPS和NMEA的组合就能够实现对激光雷达或主机的毫秒级时钟同步。

PPS+NMEA的优点是协议简单,容易实现;缺点是必须基于RS232。多个设备之间实现同步比较困难。

b.PTP(IEEE 1588或IEEE 802.1AS)

PTP(Precision Time Protocol,1588 V2)是基于以太网的高精度时钟同步协议,能够实现以太网中多个从节点(各种传感器)与主节点(主机)之间的亚微秒级时钟同步,前提是所有节点之间都通过以太网互联,交换机支持PTP协议,并且每个节点都支持PTP协议。

与PTP同时出现的还有一种NTP,即网络时间协议,不同的是PTP是在硬件级实现的,NTP是在应用层级别实现的 。

2.硬件同步

图片来源: @喝苦咖啡的小阿飞

由于每种传感器的采样频率不一致,如lidar通常为10Hz,camera通常为25/30Hz,不同传感器之间的数据传输还存在一定的延迟,那么可以通过寻找相邻时间戳的方法找到最近邻帧,但如果两个时间戳相差较大,且传感器或障碍物又在运动,那么最终会得到较大的同步误差。这个情况可以采用硬件同步触发的方法来缓解查找时间戳造成的误差现象。

那如何实现硬件同步呢?也就是在激光雷达和相机的时间源都统一到GPS时间后,如何保证他们同步触发采集呢?方式是以PPS信号为触发信号,实现激光雷达和相机均在PPS信号上升沿的时候采集数据,且打上各自时钟的时间戳。由于PPS的频率只有1Hz,所以通常需要一个设备把PPS信号转发为任意频率、但是跟PPS信号同相位的方波,这样就可以控制相机的采集频率了。

用外部信号触发相机比较好理解,那如何保证激光雷达在PPS信号上升沿的时候采集数据呢?激光雷达制造商想出了一个相位锁定功能,也就是输入PPS,但PPS上升沿到来时,激光雷达的激光束恰好旋转到一定的角度。
于是乎,我们设置激光雷达的相位锁定角度为相机视野中央,如果相机视野朝着车辆正前方,激光雷达的坐标系也是朝着车辆正前方的话,相位锁定角度应该是0度。那么问题就这样解决了,每当激光雷达的激光束旋转到0度位置,也就是相机视野正中央,PPS上升沿刚好到来,相机也因此触发,就这样就实现了激光雷达和相机的同步采集
但是,由于激光雷达和相机采集数据的方式不同,我们只能近似地保证激光雷达和相机的同步采集。如下图所示,激光雷达的激光束不断地360度旋转,假设帧率为10Hz的话,那么一帧点云中采集时刻最早的一个点和采集时刻最晚的一个点时间相差100ms。而相机就不同了,相机是瞬间曝光的,因此图像里面所有像素点的采集时刻都是一样的。这就导致了我们只能近似地保证激光雷达和相机的同步采集。具体方法就是当激光束旋转到相机视野中央的时候,触发相机,这样就保证了相机视野内的点云采集时间是跟图像采集时间是近似的。为什么说是近似的呢?对于相机视野中央的那些点云,它们的采集时间是跟图像采集时间一致的,但是对于相机视野边缘的那些点云,它们的采集时间就跟图像采集时间要有一定的时间偏差了,根据相机视野的大小和点云采集帧率的不同,时间偏差可能会有5ms~20ms左右。

图片来源:CSDN打工人小谢

3.软件同步

图片来源:CSDN是安澜啊

当两传感器的采集时刻不一致,但又想得到同一时刻下两传感器的结果,就可以使用软件同步的方式。目前常采用的软件同步方式为内插外推法,此方法适用于传感器间帧率不存在倍数关系的情况,或者传感器有帧率不稳定的情况。主要利用两个传感器帧上的时间标签,计算出时间差,然后通过包含有运动信息的目标帧与时间差结合,对帧中每一个目标的位置进行推算,推算出新的帧时各个目标的位置,并于原有的两帧之间建立新的帧。

略作补充的是,Apollo的每一个感知初始阶段,都会采用的内插外推这个经典方法。

时间同步的第一步,其主要目的是,用传感器的时间,在localization/pose中查找该时刻所对应的位姿数据,继而通过坐标系换算,使传感器的局部数据能够映射在全局坐标系上。举例而言,Lidar会感知到物体的位置,但这个位置仅仅是对于lidar而言的,但首先需要通过外参将其转化为物体对于车辆的位置,这才是感知所关心的。其间就涉及到了Lidar与Localization的时间统一。

我们可能比较好奇的是,Lidar的时间已经经过pps授时,那么localization的时间是从何处获取的呢?二者又是如何进行匹配的呢?

实际上,每次查询定位时间时,都会传入Lidar这帧数据的采集时间,在绵绵无长的Localization时间中,去寻找一个插值。而Localization的时间记录,则是实时存在在系统里的,所以系统必须授时,则localiaziton的时间戳就与lidar的时间戳保持了同步。

在此,apollo对ROS经典的tf2:buffer类采用了一次外包装,以实现激光雷达坐标系到定位坐标系的转换。从该源码中,我们稍微窥探一下其背后的原理,便是经典的内插外推原理。

Localization的时间会以缓存的形式进行存储,图中的小盒子,就是我们理解的每一截缓存。在缓存的开始时间,我们称之为Earlist_time,缓存的结束时间,我们称之为Latest_time; 下一个阶段的缓存,又是如此的循环往复。

如果我们传入进来要做查询的时间,也就是Lidar时间,在盒子时间的左右边界外,对于当前盒子而言,已经要采用外插法来做推断。

如果我们传入进来做查询的时间,对于当前盒子而言,在盒子时间的左右边界内,对于当前盒子而言,我们便采用内插法来做推断。

使用内插法时,其原理可以用下图概括:虚线为存储的localization数据的相关时间,而t1和t2,是该时刻缓存的边界。我们可以利用缓存边界内的数据,抽象一个函数f(t)出来,而Lidar(t0)传入的值便可用f(t0)求解

使用外推法时,其原理可以用下图概括,尽管我们可以用t1,t2内的时间抽象出函数f(t),假设外推的时间距离边界较近,我们仍可以采用该模型所求得的值,但假如时间已经过远,之前推导的模型就不再有效,往往会产生较大的误差,Apollo在这里,也在配置中规定了外插法的最大可信任时间,如果时间超过该值,则会报错

各传感器的时间戳

图片来源:CSDN是安澜啊

自动驾驶常用的时间同步方案

  1. 主机通过PPS+NMEA实现与GPS的时钟同步;

  2. 激光雷达若支持PTP,则主机作为PTP的master,激光雷达作为PTP的slave,以此完成对激光雷达的授时。若激光雷达不支持PTP,则通过PPS+NMEA完成对激光雷达的授时;

  3. 相机可以:①若相机支持PTP协议,通过PTP确保相机的时钟与主机同步。然后为每一帧图像都增加一个时间戳,并确保在主机上能够读取到这个时间戳,这样就可以避免编码/解码、以及传输延时引入的同步误差。②想要更高的同步精度,需采取硬件同步触发的方式,根据激光雷达的帧周期同步触发相机的拍摄,实现雷达和相机的完全帧同步,实现完全的毫秒级同步。

以下是某智驾系统的时间同步系统架构


软件介绍

gpsd:gpsd的功能是解析NMEA信息和pps信号,获取当前GPS时间,但是它没有办法给系统授时;

chrony:chrony能够给系统授时,但是需要从gpsd获取当前GPS时间,chronyd和gpsd的通讯是通过共享内存实现的,这需要对chrony做一定的配置;同类软件还有ntpd

ptp4l:ptp4l是PTP同步,即精确网络时间同步协议的软件,它需要从chronyd获取系统当前时间,然后发布到局域网,给相机或其他局域网内的工控机授时,ptp4l与chronyd的通讯也是通过共享内存。

统一时间源的操作步骤

硬件配置

通过串口将NEMA(GPRMC)和PPS信号给到工控机。其中工控机上的引脚定义如下:DB9的1号针脚:PPS信号

DB9的2号针脚:发来的NEMA(GPRMC)信号

DB9的5号针脚:接地

其中华测(组合导航)的A串口输出NEMA(GPRMC)信号,SMA接口输出PPS信号,需要自己做线将他们组合在一起给到工控机。

由于此次接到了工控机的COM2口,所以对应系统中的 /dev/ttyS1。如果接到COM1口,则对应的是 /dev/ttyS0。下面软件配置中需要做相应更改,将下面所有 ttyS1 改成 ttyS0

软件配置

主要参考:github.com/linuxonly199

  1. 准备工作

2.配置gpsd

3.配置chrony

参考文献

激光雷达与相机标定时的时间同步问题怎么进行解决? - 知乎

在自动驾驶领域,如何实现激光雷达和相机的时间同步呢? - 知乎

时间同步,自动驾驶里的花好月圆

关于GPS的1PPS时间同步功能探索与测试_学一点IOT-CSDN博客_1pps

激光雷达与相机时间同步问题的低成本完整解决方案_打工人小谢的博客-CSDN博客

【多传感器融合理论】02自动驾驶中多传感器同步理论_是安澜啊-CSDN博客

激光雷达与相机标定的时间戳同步问题_3D视觉工坊-CSDN博客

github.com/linuxonly199

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一文读懂无人驾驶的常用传感器|厚势汽车
高级智能网联系统的时间同步原理解析
激光雷达介绍
会员动态|地平线-面向规模化量产的智能驾驶系统和软件开发
文远知行发布全新自动驾驶传感器套件
时钟同步系统改变我们的生活
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服