查看原文
其他

徐成:自动驾驶系统的时空同步问题

The following article is from 北京智行者 Author 徐成



乘用车自动驾驶量产落地一直是大家津津乐道的话题,2015年的时候许多人做着Demo,在各种路演示范中宣称高级自动驾驶2020年就会到来,现在2020年到了,大家终于就至少一件事达成了共识 —— 打脸比高等级自动驾驶来得快。


“妈妈,我疼”


乘用车自动驾驶量产落地困难,固然有法律法规、伦理道德方面的问题,但是更关键的还是自动驾驶技术本身的不成熟,有着非常多的细节问题等待逐步完善。智行者科技从成立到现在一直专注于解决自动驾驶量产落地的各种技术问题,在这方面可以说已经有了一定程度的积累,今天就和大家共同探讨一下自动驾驶从Demo到量产落地转变过程中必须解决的一个关键问题——时空同步问题。提前说明一下,这是一篇披着技术分享外衣的娱乐文章(狗头保命)。


  • 没有时空同步的后果


我们不妨先想一下,假设自动驾驶系统中没有时空同步,会造成怎样的后果?下面从感知融合、认知决策和运动控制几个环节分别简单分析一下。


(1)感知融合阶段


现在的自动驾驶感知系统基本上都是多传感器融合系统,在多个传感器融合过程中,如果没有时空同步,各个传感器的坐标系不能统一、测量时刻不能准确获取,融合时再一股脑丢到滤波器里,其结果将是灾难性的(中杯)。


下面简单分析一下这个灾难过程:



先不考虑自车运动,假设在感知范围内有个障碍物正在做曲线运动S,有两个不同的传感器能够观测到这个障碍物,分别给出这个障碍物的轨迹S1和S2。但是这两个传感器的采样周期不同,数据处理复杂度也不同,导致融合环节收到的数据存在一定的时间差。而融合环节由于不知道各传感器的真实采样时间,只能都当作最新的数据处理,也就默认是同一时刻的测量结果,导致将不同时刻的数据错误匹配在了一起,最后给出错误的障碍物位置和速度估计(曲线S’)。


更糟糕的情况是障碍物高速运动时,由于两个传感器数据的时间差,给出的位置差异过大,可能导致数据根本就匹配不到一起,最终错误地输出多个障碍物或者认为谁都不可信而不输出障碍物,同情此时做决策规划的同学一秒。

 

(2)认知决策阶段


目前高等级的自动驾驶方案基本上都脱离不了高精度电子地图,导致决策规划的输入存在两个重要的信息源,一个是上面提到的感知融合,另一个就是高精度地图,可以认为一个是后验信息,一个是先验信息,在没有时间同步的情况下,别说使用贝叶斯滤波的思想来处理这两个信息源了,就是单纯地进行坐标转换都会产生大问题,其结果也是灾难性的(大杯)。


我们看一下下面这个灾难过程:



假设在弯道上自车高速行驶,同车道前方有一个静止的障碍物,t1时刻感知识别到了这个障碍物,t2时刻高精度地图根据定位结果给出了周边地图信息,当决策规划收到这两个信息时,如果不考虑时间同步,认知环节将会直接将这两个结果通过坐标转换叠加在一起,然后得出障碍物是压着车道线的结论,从而做出错误的决策规划结果——原本应该直接减速停车或者往右换道避障,结果可能是做出往左车道内避障的动作,被称为人工智障也就不奇怪了。

(3)运动控制阶段


运动控制的信息源是决策规划,不存在多源融合的问题,看起来似乎和时空同步无关,但是经过上面一系列不考虑时空同步的过程之后,再加上从决策规划开始到运动控制结束的时间延迟,不考虑时空同步的后果毫无疑问是灾难性的(超大杯)。


按照套路咱们还是看看下面这个灾难过程:



在t1时刻路边有个静止障碍物,正常来说应该往左避让一下绕开该障碍物,而经过上述不考虑时空同步的融合与认知决策过程,规划出的轨迹此刻已经存在碰撞风险(后续收到新的感知结果时可能触发减速和路径重规划,不一定真的造成碰撞),而控制时刻如果不考虑时空同步的问题,就会把规划轨迹作为当前时刻的规划结果执行,造成实际执行结果与期望结果在行驶方向上产生一个平移,进一步造成碰撞风险的上升,此刻应该已经激活了安全员的敏感神经,接管车辆退出自动驾驶,熟练地吐槽加上淡定的眼神,自动驾驶完败。



  • 时空同步的基本思想


分析完上述自动驾驶系统没有时空同步的后果,相信大家跟我一样惊(nei)出(xin)一(hao)身(wu)冷(bo)汗(lan)。那么问题来了,时空同步到底需要做什么呢?既然叫时空同步肯定是解决时间和空间的一致性问题,那么反过来就是要识别并处理所有导致时间不一致或者空间不一致的问题。当然,如果能做到感知融合、地图定位、决策规划和运动控制在一个足够短的时间内全部完成,也就不存在时空同步的问题了,好了,醒醒醒醒,换个地方睡。


 

以当前硬件性能和软件算法能力,自动驾驶系统时空同步将是很长一段时间内都必须面对的问题,其中导致时间不一致的主要因素有:不同硬件时钟不一致、传感器的采样频率不一致、同频率传感器采样触发时刻不一致、不同传感器数据处理时长不一致、串行模块中的时延累积(处理时延、传输时延等)。


导致空间不一致的主要因素有:不同传感器安装的空间位置不同、自车运动(包括车辆的俯仰、横摆和横滚)导致的空间变化。这些因素里面有些是可以消除的,需要在系统设计中做对应的软硬件设计,有些是无法消除的,只能在自动驾驶软件中加以考虑并处理。综合考虑以上因素,解决时空同步问题主要手段包括:传感器精确标定、硬件时间同步和软件时空同步处理。由于篇(neng)幅(li)有限,下面简单介绍一下各个手段的一些思路。


(1)传感器标定


传感器标定就是通过一系列测量或者特定的目标识别过程计算出传感器坐标系与自车坐标系转换关系(旋转和平移)的过程。自动驾驶常用的传感器包括激光雷达、摄像头、毫米波雷达、GPS和IMU.


其中激光雷达、摄像头和毫米波雷达通常通过测量车辆坐标系下特定位置的标定物来计算传感器与车辆的坐标转换关系。GPS 和IMU则是通过粗测量安装位置后再通过特定的行驶过程对标定参数进行修正。标定精度的高低直接影响后续传感器处理结果的好坏,在标定过程中充分发挥激光这类高精度传感器的作用是提高标定精度的一个重要手段,另外,自动标定以及设计专门的标定场也是提高标定精度、简化标定过程的好办法。


(2)硬件时间同步


前面提到,导致时间不一致的原因之一是不同硬件时钟不一致,另外如果想控制各传感器采样频率和触发时刻,或者计算各环节产生的时延,都离不开统一的时间基准。我们先了解一下各个硬件时钟不一致的原因。


我们用到的硬件一般都采用晶振来计时,晶振理想情况下可以理解为一个固定频率的计数器(计数器每增加1代表一个固定的时间间隔),但是实际上晶振的频率受电磁干扰、机械震动与冲击、湿度和温度等的影响,频率并不能保持绝对稳定,导致计数器所代表的累积时间会与绝对时间产生偏差,并且偏差会随着时间的增长而变大(大家可以找两台计算机,一台关闭网络时间同步功能,另一台打开网络时间同步功能,然后过十天半个月对比二者的时间差)。


所以即使两个硬件一开始时间是完全一致的,时间久了也会产生明显的差异,就好像你每天固定比别人多努力1%,那么一年下来你的收(xin)获(ku)就会是别人的37.78倍,鹅妹子嘤。



各个硬件时钟想要统一就需要做时间同步,时间同步通过定期消除时钟的累积误差,保障时间误差一直在一个可控的范围内。目前典型的时间同步手段包括软件时间同步和硬件时间同步。无论是软件时钟同步还是硬件时钟同步,都有一个时间源,该时间源的时间认为是真实时间,其他设备时间都需要校正到与该时间源一致。


软件时间同步就是通过特定的时间同步服务软件,在待同步设备和时间服务器(时间源)之间按照特定的协议进行数据交换(例如NTP协议),获取时间源的时间信息及网络通信延迟,最后计算出待同步设备和时间源的时差,从而修正待同步设备的时间。


硬件时间同步顾名思义与硬件有关,通常是时间服务器根据时间源的精确时间发出秒脉冲电平信号(PPS)和时间源真实时间信息(精确到秒),待同步设备使用秒脉冲电平信号消除内部时钟产生的累积误差(频率同步),然后使用时间源真实时间获取绝对时间基准,从而将待同步设备的时钟校准到时间源同一时间基准上。



理论上硬件时间同步后最大时间误差不超过晶振1s内的累积误差(大概在几个微秒左右),在自动驾驶系统中几乎就可以认为是精确同步了。而软件时间同步效果受到同步设备之间网络拓扑、延迟抖动等的影响,同时同步软件运行稳定性也无法保障,所以软件时间同步在需要高可靠、高精度的时间同步时是难以满足需求的。


在高速乘用车自动驾驶中,还是推荐使用硬件时间同步方案,当然这个需要硬件支持,但是不用担心,贴心的智行者硬件攻城狮们已经帮大家准备好了带有硬件时间同步功能的自动驾驶大脑控制器BrainBox,欢迎各位自动驾驶玩家垂询。这里必须吹一波咱们的硬件设计能力,就像XXX点读机一样,哪里缺少补哪里,哪里不通连哪里,妈妈再也不用担心我的工作了!


 

(3)软件时空同步处理


有了精确传感器标定和硬件时间同步基础之后,理论上传感器同步触发采样就可以实现了,但是后续处理环节的时间不确定性和自车运动造成的影响还是没有解决。理论上我们也不可能消除后续处理时间,更不可能让车不动(那就不叫自动驾驶,而是自动不驾驶了)。


所以在软件处理环节,对时空同步的主要处理思想不是消除时间延迟和空间变化,而是为所有关键事件打上时间戳,同时精确记录车辆运动过程,从而建立对车辆周边环境变化及自车运动变化的客观认识,最后基于这样的客观认识进行决策和控制。



换言之,自动驾驶每个环节都应该建立这样的逻辑过程:在我之前的Tm时刻发生了事件m,而当前时间是Tn,车辆在Tm到Tn时刻之间发生了运动变化ΔX,所以我应该执行动作n,同时告诉下游我的判断依据是Tm时刻的事件m。


为了践行以上思想,这里必须请出自动驾驶系统软件中的两个重量级服务——时间服务和位置服务。时间服务用于提供同步后的系统时间,位置服务用于提供任何时刻自车的位姿信息,有了这哼哈二将,单传感器多帧数据处理变得清晰了,多传感器融合终于能找准对应同一时刻的数据了,认知也不会胡乱匹配感知和地图了,决策规划再也不犹豫了,控制终于更接近实时了,我再也不会误会妈妈多打了我一次了(感动得热泪盈眶)……下面我们以黑客帝国电影中的子弹时间为例简单说明一下自动驾驶软件时空同步处理的思想(什么鬼……)。



相信大部分同学应该都看过黑客帝国这部电影(什么?没看过?赶紧回去补!),其中的子弹时间大家应该记忆犹新(什么?不记得?请你坐下!),当时特工Smith向救世主Neo“啪啪啪”连开三枪,在这千钧一发之际,只见子弹似乎突然全部降至龟速,上帝视角环绕子弹一周,然后Neo一个漂亮的慢动作战术后仰,三颗子弹在其胸前擦身而过。


问:Neo躲子弹的动作帅不帅,啊不,Neo是如何帅气地躲过子弹的?让我们来复盘一下,在子弹出膛之后发生了一件重要的事情——在子弹距离Neo还有5m的时候摄影机给了一个360度观察子弹的机会,这个过程可以想象成一圈摄头机同时对着子弹拍摄了一遍,通过这一圈摄像机的同步拍摄,Neo清晰地获得了子弹的大小、位置、方向、速度等等一系列重要信息,结合当时的空气密度、风速、天气和光线经过墨镜时产生的折射,Neo估计出了三颗子弹后面的弹道。


基于估计出的弹道,Neo微微一笑,很快想出了后仰躲避子弹的策略。可是从看到子弹到思考完应对策略,时间就已经过去了0.01s,Neo的躲避策略能够成功么?Naive,在设计后仰躲避策略的时候Neo就已经考虑到了思考过程造成的时延:按照子弹速度约400m/s计算,在思考应对策略时子弹会前进大约4m,为了不被子弹击中同时还保留足够的安全空间,在子弹看起来还有5m远的时候就需要考虑躲避策略了,这样就能安全又优雅地躲过子弹,一切尽在掌握之中。



可是Neo万万没有想到的是,肌肉的控制速度赶不上思考的速度,在他决定开始后仰之后,又过了大约千分之一秒肌肉才开始响应大脑的决定,原计划最后用于躲避子弹的1m距离又生生缩短了40cm,还好Neo清晰地认识到了身体在这千分之一秒内处于静止状态,于是乎他强行加大后仰时的肌肉收缩强度,终于在最后这子弹飞行的60cm距离内追上了原计划的身体后仰幅度,漂亮地躲过了子弹的射击。


从上面这个例子可以看出,Neo之所以能够成功躲避子弹,关键在于他对自动驾驶系统软件时空同步处理策略的活学活用——在观察子弹时用到了多传感器融合的思想,在思考应对策略时运用了认知决策的技巧,而在控制肌肉时则体现了实时运动控制的精髓,而这一切的基础又是他如同铯原子钟一般的时间测量能力(时间服务)和清晰到每个细胞的身体状态监测能力(位置服务)。



回到真实的自动驾驶系统中来,时间服务建立在时间同步的基础上,而位置服务的关键则是自车位姿的高频率精确测量,这里我又要打一波广告了,对位置服务感兴趣的同学可以了解一下智行者软硬件一体的多合一融合定位设备NavBox,相信一定不负你的期待。


经过上面我一本正经的胡说八道,相信大家已经理解了自动驾驶时空同步的一些思路,当然,上面提到的只是时空同步的一些皮毛,真正实施过程中的传感器数据处理流程、数据丢帧的处理、多节点数据并发的处理、时间服务和位置服务的随机调用、位置服务的性能要求及使用方法、各软件节点的运行顺序及运算资源分配等等问题都没有讨论。即使还有疑惑也没有关系,智行者有着先进的AVOS自动驾驶软件架构,还有各个方向的资深自动驾驶工程师,欢迎各位对自动驾驶感兴趣的朋友加入智行者大家庭,共同探讨自动驾驶系统中各种有意思的问题,一起实践自动驾驶系统中各种有意思的方案,为自动驾驶技术的产业化落地添砖加瓦,相信我们每个人都可以成为自动驾驶领域的Neo.




盘点5G时代的自动驾驶核心技术 2020-07-06
国内外高精地图厂商一览 2020-07-05
杨元喜徐颖央视谈北斗导航 2020-07-03
最新自动驾驶轨迹预测方法 2020-06-30
李德仁院士论测绘遥感与智能驾驶 2020-06-27




: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存