关于LiDAR的时间同步

1、时间不同步的危害

如果一辆无人车上,装了很多传感器,如果各个传感器的时间是孤立的,比如传感器甲在自身时钟的T0时刻,发现有个目标出现;于此同时,传感器乙也看到这个目标,但传感器乙会根据自身时钟,认为当前是T1时刻,于是,当数据融合时,系统会错乱,到底是哪个时刻,出现的目标?如果对两个传感器的时钟都加以采信,如果这个目标是个移动的目标,那么, 系统会看到两个目标,也就是会出现“鬼影”。

如果是众多时钟相互独立的传感器,他们的协同工作将是一团糟。

2、时间同步的解决方法

毫秒级同步: 多采用NTP服务的方式,一般服务器和电脑就是这么同步的。

纳秒级同步:多采用统一时钟源的方式,而统一时钟源中,又多用GNSS时间对齐。(或者可以直接用GNSS接收机对齐时间)

如果你的电脑,或者你的智能手表,想获取当前准确的时间,只要对公网上的某个NTP服务器,发出一个基于UDP的ntp request,远程的NTP服务器,就能给你返回一个含时间reply,这个时间经过客户端对网络时延的评估修正,被计算出来,它就是你所需要的时间。这适用于对时间精度不那么敏感的用户。

如果你需要非常精确的同步(比如无人车,毫秒级的时间失步将是灾难性的),那么NTP显然不能满足需求,这时候,你就需要考虑采用统一时钟源的方式。

3、统一的时钟源设备

统一的时钟源设备在通讯/机场和电力行业中,应用非常之广泛,特别是光传输和4G基站,它们对时间同步的要求丝毫不亚于无人车传感器,甚至有过之而无不及,因此,我们可以参考下它们怎么做的。

它们一般采用统一时钟源设备(一般几U高,安装在机架上),该设备由GPS / COMPASS / GLONASS / GALILEO提供授时。

它的特点:内部有一个非常精准的主时钟(晶体振荡器),并且会用GNSS时钟信号不停的“驯服”该主时钟。在驯服晶振过程中能够不断“学习”晶振的运行特性,并将这些参数存入板载存储器中。当外部时间基准出现异常或不可用时,它能自动切换到内部守时状态,并依据板载存储器中的参数对晶体振荡器特性进行补偿,使守时电路继续提供高可靠性的时间信息输出,同时避免了因晶体振荡器老化造成的频偏对守时指标的影响。

目前绝大部分的无人车团队,相比已经成熟的通讯和电力行业而言,多采用GNSS接收机或惯导直接输出的PPS和GPRMC/GPGGA信号来修正各个传感器的时间,特别是激光雷达的时间,这会有个问题,就是使得GNSS信号不好的时候,时间有反复跳变,半个小时可能有上百毫秒之巨。(原因是传感器本身的时间晶振无法做到很精确的内部守时,当然部分接收机也有类似时时钟同步设备的功能,丢失信号后,也会用内部系统模拟输出,但精度上,对比几十万一台的专业时钟设备,还是有不小的差距)

4、PPS和GPRMC

我们看一个典型的满足Velodyne要求的时钟信号:

第一条线叫PPS信号(Pulse Per Second), 也就是每秒一个脉冲

PPS信号的呈现五花八门,有上升沿有效的,有下降沿有效的,有3.3V的5V的,也有-3.3V和-5V的,占空比多大的都有。

Velodyne激光雷达对PPS的要求:默认低电平,拉高高电平时,上升沿有效,+3.3v或+5v均可,脉宽要控制在10微秒-200毫秒之间,也就是占空比要在80%以上;

第二条线是输出GPRMC信号,这条线,要满足RS232电平标准。(如果你的设备输出UART电平,可以用一块MX232或者7404芯片转一下)。

GPRMC信号要跟在PPS信号后面,也是一秒一个,很多GNSS默认是0.2秒一个,要注意修改,另外,GPRMC信号的末尾离下一个PPS的上升沿,至少要隔开300毫秒。我们一般这样建议,一个PPS上升沿后,过300毫秒,开始输出GPRMC信号,这个是比较理想的。

不知道你注意到没有,GPRMC的NMEA语句,仅仅精确到秒(以pre-2.3版本为例)

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

所以,

5、Velodyne是怎么同步时间的

激光雷达内部有两个时钟:(Timer 1和Timer II),

Timer I:我们称之为微秒定时器,它的范围是0-999,999微秒

Timer II: 我们称之为整秒定时器,它的范围是0-3599秒

在未收到任何外来同步信号的时候,这两个timer正常工作,为激光雷达提供系统时间。当PPS信号到来之后,若该PPS是合法有效的PPS(即PPS被锁定),那么,PPS上升沿,会去置零微秒定时器。当合法有效的GPRMC信号到来的时候,系统抽取GPRMC信号中的时间,换算成整秒,并将Timer II的时间重新赋值,赋值成GPRMC中的整秒时间。

以上就是激光雷达的时间同步过程。你发现没有:激光雷达不能表达整小时以上的时间,也就是说,激光雷达只知道现在是几分几秒几毫秒几微秒,但是不知道现在是几月几号几点钟。所以,激光雷达被授予的,不是标准的UTC时间戳。我们称之为TOH时间(Top of Hour)。

6、数据包中的展现

以VLP-16为例,如果你用tcpdump,那么数据包中有四个时间戳,可不能搞混淆了:

时间戳1 - 数据包接收时间戳,

这是接收系统(不是激光雷达)的时间戳,对于激光雷达而言,是然并卵的存在。

时间戳2 - 位置数据包中NMEA语句,(UDP 8308, 如果你没有改端口的话),

这个是最近一个收到的GPRMC下发的时间,你可以用来参考是否收到GPRMC信号。

时间戳3 - 还是位置数据包中的时间戳:

这个就是激光雷达自己的TOH时间,不过这个TOH时间出现在这里,仅仅表达的是当前位置数据包组包时的时间。

最有用的,是时间戳4 - 主数据包时间戳:

它直接参与点云XYZ坐标的计算,指代的第一个Block第一束激光的发射时,激光雷达自身的TOH时间,其他激光发射时间,要依据手册中的时序表,添加固定的offset。(还记得TOH时间是怎么被同步的么?)

7、控制页面中关于时间同步的一些按钮

不是每个PPS都认为是有效的脉冲,那么,用什么标准判定呢,就是这个PPS Qualifier。

首先,是否要求GNSS接收机指示有效,因为在NMEA语句中,有一个字段是指示GNSS是否有效的,通常是等待卫星的锁定。如果选择ON,那么,GNSS必须确定有效,才能锁定PPS,如果选择OFF,那么,无论是否有效,PPS都会被锁定。

就是这个字段,A表示有效,V表示无效,通常V是表示卫星未锁定。

其次,PPS是否要求延时lock,意思是,收到了多少个电平合格的PPS后,才认为PPS被lock? 默认OFF,就使用2个,也就是第三个有效的pps后,开始锁定。如果你选择ON,你可以自己选择,从0-65535个都行。不过没人会选那么大的值,一般3-5个之后就行。

GPS Qualifier表示的是GPRMC信号是否有效,如果选择ON,则那个NMEA语句中,“V/A”字段会起效,只有当字段为A的时候,整秒定时器才会去跟随GPRMC指示时间。如果选择OFF,那么,无论如何都会去跟,并不关心那个“V/A”字段。

8、Python抽取时间进行分析

如何从pcap数据包中抽取时间,并加以一定的分析,Python是个好工具,墙裂推荐之~

这里不再赘述,常用的几个库socket,dpkg,matplotlib,numpy,pandas等,节选一点供简单参考:

举个例子,如果你想对比是不是发生了时间跳变的现象,只需要把数据包中相应的时间戳拉出来,做个对比,就一目了然:

编辑于 09-17

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值