多角度解析为什么自动驾驶需要多传感器深度融合

在自动驾驶的浪潮中,多传感器深度融合,能够帮助整个感知系统效果的提升,并满足自动驾驶对安全性的极高要求。

作者 / 刘博聪 出品 / 公众号“PonyAI小马智行”(ID:pony_ai)

目录:

  • 为什么需要多传感器深度融合?
  • 多传感器深度融合的一些先决条件
  • 如何做多传感器深度融合?

小马智行在多传感器感知上积累了很多的经验,尤其是今年年初在卡车上开始了新的尝试。我们尝试了多样的传感器配置,遇到不同的场景,对多传感器深度融合也带来一些新的挑战,我也因此有了更深刻的认识。今天把这些经验总结一下,分享给大家。

01 为什么需要多传感器深度融合?

首先,在自动驾驶中如果使用单一传感器,例如照相机、激光雷达、毫米波雷达,往往存在不小的局限和挑战。我们先了解下常用的传感器的挑战是什么:

照相机的挑战

照相机数据遇到的挑战包括下面三点:

  • 没有深度信息(距离信息)。
  • 视场角有限,所以传感器配置需要比较多的摄像头,上图展示了6个摄像头覆盖了270°的视场角。
  • 摄像头受外界条件的影响也比较大,这是当车行驶到桥下时(上图右下方),由于背光,且光线变化比较大,导致无法识别正前方的交通灯。

激光雷达的挑战

激光雷达数据面临一个比较大的挑战是感知范围比较近,感知范围平均在150m左右,而且感知距离也会受到环境和障碍物的影响。

激光雷达在角分辨度上远远不如照相机,如下图,有三条小狗在过马路,在照相机上可以清楚的看到,但是在激光雷达上,采集到的点是比较少的,这样的场景经常出现在复杂道路日常测试中。

激光雷达对环境的敏感度也是比较大的,往往会导致出现虚拟噪点的Case(情况)。下方右图里其他车辆行驶时溅起来的水花、左图里车前的扬起的尘土,反映在激光雷达数据上都可能会产生噪点。如何去除这样的噪点,也就是感知系统面对的挑战。

毫米波雷达的挑战

毫米波雷达,受自身性能所限,它的局限是无法反馈高度信息。毫米波雷达能告诉你所探测物体在哪个位置,但却不知道物体多高。举个例子,道路前面有一个比较高的指路牌,毫米波雷达能够探测到此处存在障碍物,但是不知道路牌是悬在道路上方的。

所以,为什么需要多传感器深度融合?

原因很简单。既然单一传感器在自动驾驶中存在挑战,通过多传感器深度融合,传感器之间便能够取长补短,帮助整个感知系统效果的提升。

下面展示的是多传感器深度融合是如何提升感知的探测距离。当障碍物距离自动驾驶车150m左右时,激光雷达的反射点已经比较少了,但是这时毫米波雷达和照相机数检测还是非常稳定的。

当障碍物驶出200m范围时,基本上没有任何的激光雷达反射点了。然而自动驾驶的感知距离与自动驾驶车辆自身车速紧密相关,当车速较快时,超过200m的感知距离是非常必要的。此时只能通过毫米波雷达和摄像头,来确保感知系统对障碍物的感知距离,从下图可以看到系统稳定识别出来前方车辆。

02 多传感器深度融合的先决条件

先决条件一:运动补偿

首先,多传感器深度融合为什么需要做运动补偿?

因为,在自动驾驶感知过程中,传感器采集数据一般都不是瞬时发生的。以激光雷达为例,采集一圈数据需要0.1s,在这0.1s内,自动驾驶车会发生一定的位移,障碍物也会发生一定的位移,如果我们不考虑这些位移,感知系统检测出来的位置则不准确。

自我运动的运动补偿

位移有两种,第一种就是车自身的位移(Ego motion)。

上图右边画了一个示意图,虚线部分可以认为是世界坐标系,红色点代表一个静态的障碍物,在坐标系中有一个稳定的坐标(5,5)。蓝色部分代表自动驾驶车自己的局部坐标系,也就是说世界坐标系的(4,0)为局部坐标系的原点。在T+1时刻,这个局部坐标系移动到了(6,0)的位置,也就是自动驾驶车沿着X方向向前移动了2。也就是说,在T时刻,障碍物的在局部坐标系下的坐标是(1,5),而在T+1是时刻,它的坐标变为了(-1,5)。

如果我们不对车自身运动的进行补偿,静止的障碍物在2帧之间,测量的局部坐标是不一样的,这就会产生错误的速度。因此,我们需要基于车自身运动进行运动补偿。

这个问题解决起来比较简单,因为自动驾驶车拥有比较准确的实时定位信息,它可提供T和T+1两个时刻内,车本身的姿态差距,利用姿态差,我们就可以比较容易补偿自身移动了多少,也就能得出结论——静态障碍物其实是没有移动的。

被检测物体的运动补偿

第二种要考虑的是被检测的运动物体在传感器采集的时间段内发生的位移,相对于自身运动补偿,这是一个更难的case(情况)。因为,快速移动的物体很可能会被激光雷达扫到两次。

上图的红圈内,被检测车辆的尾部出现了拖影。如何消除周围车辆的Motion(运动),对其进行运动补偿呢?

其实解决的方式有很多,目前激光雷达从自身硬件上已经有些相关配置来缓解此类现象。简单解释下,一辆自动驾驶车上采用多个激光雷达时,当激光雷达的激光按照同样的方式旋转来探测周围,那么在某一个特定的时段和方向,这些激光雷达应该扫到相同的物体,一定程度上这能够来减少快速移动的物体产生拖影的问题。

先决条件二:时间同步

目前,自动驾驶车辆传感器大部分支持GPS时间戳的时间同步方法。这个方法比较简单,如果传感器硬件支持这个时间同步法,其给出的传感器数据包便会包含全局的时间戳,这些时间戳以GPS为基准,非常方便。

但是,时间戳查询数据存在一个比较明显的问题。举个例子,上图了包含来自三个传感器的三种数据。由于不同传感器是以不同频率来采集数据,以传感器2为例,在 T1 时刻,传感器2产生了一个数据,如果要进行时间同步,我们需要查找对应时刻的传感器1和传感器3的数据,而实际查找的方式就是找出与传感器2时间差最近的其他传感器数据包。这种方法会受所查数据包的时间戳和传感器2数据包的时间戳之间差距的影响,如果差距比较大,障碍物又都是在移动的,会导致时间同步的误差会比较大。

于是就有了第二种时间同步的方法,以缓解刚刚说的误差现象——也就是主动数据同步方法。该方法可以以激光雷达作为触发其它传感器的源头,当激光雷达转到某个角度时,才触发该角度的摄像头,这可以大大减少时间差的问题。如果把这套时间同步方案做到硬件中,便可产生较低的误差,对齐效果也会更好。如上图所示,运用这种方法,激光雷达的数据和摄像头的数据很好的结合在一起。

除此之外,还可以借助激光雷达自身的功能减少多个传感器对同一物体检测的时间差问题。比如大部分的激光雷达可以支持一种叫做Phase Lock的功能,它能够保证在某一时刻,所有的激光雷达根据Phase Lock的配置,扫在固定的角度附近。

如果两个前向的激光雷达都设置同一个角度,在同一时刻,检测到的物体应该是类似的,这样对于一辆快速行驶的车,它被传感器扫到两次的概率就会减少。当然,这个办法也不能完全解决问题,比如有个人或物体以跟激光雷达同样的频率,绕着激光雷达旋转,那么在激光雷达扫描的点云中,人一直会出现,所以还要通过软件的方法,设置的一些规则或者模型来想办法剔除误差。

先决条件三:传感器标定

除了运动补偿与时间同步,传感器标定(Sensor Calibration)也是多传感器深度融合的重要部分。我这里主要是指传感器外参的标定。

传感器外参标定的核心是刚体旋转。刚体旋转即物体上的两个点,经过旋转和平移之后,两个点之间的3D位置是不会变的,所以叫刚体旋转。在自动驾驶和机器人上,刚体旋转还是比较常见的。

传感器外参的标定就是要找到这样的一个刚体旋转,可以把一个传感器的数据和另一个传感器对齐。相当于把一个传感器测量的数据从其本身的坐标系,通过刚体旋转,转到另一个传感器坐标系,这样就可以进行后续的数据融合。

上图中,左边为照相机图像,中间为激光雷达点云。借助一个比较好的外参工具,感知系统可以将激光雷达点云3D的点投射到2D图像上,同一物体的图像和激光点云都可以对应上,也就相当于把 2D维度上的像素加上了深度信息。那么,在图像质量并不是很高的情况下,通过这样的方式能把更多感知信息补回来。

传感器的标定一般涉及有两种思路,第一种是有激光雷达的传感器标定,第二种是无激光雷达的传感器标定。这么区分是因为激光雷达采集的数据是完整的 3D 信息,空间中的 ( x,y,z ) 都是准确的,并不会有信息的丢失。照相机得到的数据,可以认为是极坐标系下的坐标,没有深度,而毫米波雷达数据是没有高度的。

所以,如果感知系统中某个传感器能够提供完全的 (x,y,z ) 坐标,以此为参照物,其他传感器和它做绑定的话,标定结果会更容易和更准确。接下来我主要讲包含有激光雷达的传感器标定方法。

多激光雷达的标定

首先讲下多激光雷达是如何标定的。

上图可以看到展示了两个前向激光雷达点云数据,这两个激光雷达在前向180°是有比较大的覆盖区域。如果没有处理好两个激光雷达之间的旋转和平移,把二者的点云数据放在一起进行感知处理时,你会发现红框位置会存在比较大的分隔(黄线和蓝线分别代表两个前向激光雷达)。这种情况肯定是不希望遇到的,所以自动驾驶感知系统需要对多个激光雷达做到准确的标定。

标定的方法是已知的,这已经是比较好解决的问题。因为激光雷达本身拥有完全的3D信息,解决这样俩个数据集匹配的问题,就是采用ICP(Iterative Closest Point)迭代式最近点方法,这个方法有很多的变种,感兴趣的同学可以搜索下(下图)。

照相机和激光雷达的标定

第二就是照相机和激光雷达之间的标定。照相机本身是没有距离信息的,那么如何进行标定?

首先,激光雷达是有 3D 信息的,通过标定的方式,我们可以将激光雷达数据投到图像的坐标系中,建立图像的像素点和激光雷达投影后的点云之间的匹配,最后通过优化方程来解决这个匹配问题。

举一个简单的例子,比如现在需要选取一系列激光雷达检测出来的候选点,那么这些点一定是在图像上比较容易能够识别出来的边界点

选取方法也比较简单,因为激光雷达数据有距离信息,只需要找相邻两个激光点之间的距离差,就可以判断这样一个点是不是边界点,最终可以轻易的选出这些帮助标定的候选点。通过这样的投影方式,上图中的红框便是我们要求的标定参数,K矩阵为照相机本身的内参,通过这个数学关系,前面从3D中检测的激光雷达候选点就能够投到2D图片上,上图中的X就是投射后的位置。

根据3D投影点和2D检测的边界,进行匹配,然后根据他们之间的距离匹配程度,建立这样一个优化方程,于是解这样一个优化问题,以得到标定的参数。

如果大家感兴趣,还可以参考一篇论文《Automatic Online Calibration of Cameras and Lasers》,其详细讲述了照相机和激光雷达的标定的数值原理,上图种绿色的点是3D点云投射到图像上,展示的正是边界点候选的区域。如果标定结果比较好,边界点会很好地与图像进行匹配。

先决条件四:传感器视场角

这是传感器不同视场角示意图,它也会与多传感器深度融合相关。

假设在1、2两个位置上分别有一个激光雷达,它们有各自不同的视场角,前方障碍物 A 在传感器2的视场角内正好将障碍物B完全遮挡,也就是说障碍物B只出现在了两个中的一个传感器的视场角内部。它带来的问题是:感知系统到底该不该相信这里存在一个障碍物B?这类比较常见的视场角问题,可以经过不断的路测来积累并完善。

03 如何做多传感器深度融合?

照相机和激光雷达融合

照相机和激光雷达融合的第一个方法,我在前面标定部分提到了一些要点。激光雷达数据是包含了明确的(x,y,z)数据的3D观测,通过标定参数与照相机本身的内参,多传感器深度融合可以实现把3D点投到图像上,图像上的某些像素也就打上了深度信息,帮助感知系统进行基于图像的分割或者训练Deep Learning Model(深度学习模型)。

需要注意的是,多传感器的视场角可能会不一样,有造成噪点或者漏点的可能,这里比较推荐的方法是把照相机和雷达安装在一起,越近越好。

第二个比较直观的方法是将2D检测出来的障碍物直接投影到3D数据上,生成上图中类似的3D障碍物。这种方法在做很多的假设条件下(比如障碍物的大小,地面是否平整),也是可以实现的。上图中相机的内参、车的位置高度都是已知的,这时照相机在2D上识别出的每一帧的障碍物,都可以还原成3D在照相机坐标系下的一条射线,通过找这条射线在3D坐标系下和平面的交点,就能够估计出2D障碍物在3D上的距离。

毫米波雷达和激光雷达融合

毫米波雷达和激光雷达的融合方式比较简单。在笛卡尔坐标系下,它们拥有完整的( x,y )方向的信息。因此在普适的笛卡尔坐标系下,激光雷达和毫米波雷达可以实现基于距离的融合。另外,毫米波雷达还可以探测到障碍物速度,而激光雷达通过位置的追踪,也会得到对障碍物速度的估计,对这些速度的信息进行融合,更能帮助筛选错误的匹配候选集。

下图展示的激光雷达和毫米波雷达融合的效果,红圈里的障碍物是由毫米波雷达补充的。

当然,不同传感器之间融合也存在不少特例,感知的工程师们会通过各类方法使得感知系统正确应对并解决问题。如果你感兴趣,欢迎你加入Pony.ai

总结来说,每个传感器自身都存在一些局限,而多传感器深度融合就是希望把这些传感器结合起来做取长补短,提升整个感知系统的精度和召回度。我今天就分享到这里,谢谢大家。

本文已注明来源和出处,版权归作者所有,如有侵权,您可以告知我们(点击此处)

参与评论

请输入你的评论!
请在这里输入你的名字