机器感知系统根据各种各样的传感器来获取汽车周围的驾驶环境,包括Lidar,Camera,Radar,超声波雷达以及拾音器等。相对人类而言,机器感知是全覆盖,并且感知精度更高,能够达到厘米级别,但是机器感知在语义感知方面相差太大。
在地图定位方面,机器感知系统则依赖高精地图。高精地图和导航地图的最大差别是有参考线,汽车需要根据参考线进行行驶,而人很大程度上是根据经验驾驶。
输出信息的比较,人类驾驶员的感知信息输出主要是大脑输出,一是道路信息,包括车道线位置,是左转还是右转车道,是否限速,实线还是虚线等。第二是动态障碍物信息,主要包括障碍物位置、类别、形状大小、相对速度、行为意图等。除此之外,人还需要通过眼睛感知交通信号灯的状态。无人车感知的信息输出主要是各个传感器的数据,固定目标更多的是依赖高精地图,减少在线识别。道路信息以高精地图作为参考,障碍物信息通常使用障碍物检测技术获取,包括检测障碍物的位置(3D位置)、类别、形状以及障碍物跟踪。此外还需要根据不同的传感器数据进行传感器融合获得更精确的感知,保证安全驾驶。
当前无人车感知主要通过摄像头来获取交通信号灯的颜色,灯的语义信息可以由地图提前标注好,长远的目标是通过V2X实现交通信号灯的感知。
相对人类驾驶而言,无人车系统为机器做了很多的工作,把固定信息都嵌入到地图里面,在线识别只针对最小集进行处理,以保证系统的高效和鲁棒性。无人车感知的缺点是强烈依赖高精地图。
感知模块可以划分为两个维度:
感知模块的维度可以根据划分目标而不同,这里给出一种感知模块的维度划分案例,包括以下6个维度:
激光雷达的测距原理是激光头发射光束,打到障碍物上反射回来,到接收器接收到之反射信号的时间间隔乘以光速再除以二得到障碍物的距离,叫做TOF(Time of flight,飞行时间测距法)。
激光雷达传感器的好处在于自带光源不受外界干扰,白天晚上都可以,而且测距准确度高(厘米级的精度)。其缺点是多线激光雷达扫描还比较稀疏,尤其是当障碍物距离比较远的时候,因此,激光雷达目前并不适合做识别任务。
另外,激光雷达需要发射激光,功率限制其不能发射很远,发射太远反弹回来的信号就会很弱。目前,64线激光雷达的感知距离只有60~70米,对于高速行驶的无人车还不够。
相机是最像人的一个传感器。它是被动式的,接受自然可见光的反射最后成像,受光照影响很大,白天的算法在晚上使用,开路灯和不开路灯的对感知结果影响很大,所以对算法研发挑战很大。它的优点是可以稠密感知,比如说现在的1080p图像,可以感知所有细节。
另外通过配置焦距,相机可以感知很远距离的物体,例如可以看到几百米外的物体。相机传感器的缺点是单目相机测距不准,无法做到激光雷达厘米级的测距精度。
毫米波雷达的原理和激光类似,只不过发射的是毫米波。由于它也是主动式感知设备,不太受天气、光照的影响。同时毫米波雷达还有多普勒频移效应可以测量与障碍物之间的相对速度。
其优点是测距、测速比较准,缺点是噪点很多,例如在空旷的地方反馈很多的回波,实际可能是路面的反馈信号而不是障碍物。其次它对于非金属的反射信号比较弱,召回比较低,例如在它面前走过行人有可能漏掉。最后毫米波雷达也是稀疏感知,无法做识别任务。
除了以上三种常见的传感器,还有一些用的相对少的传感方法,例如超声波,高精地图,Image-Lidar。
超声波的感知距离有限,对金属感知距离3米左右,对非金属只有1~2米。此外它的发射头是扇形的,扇形之外无法感知。
高精地图是先把静态元素储存好做成先验知识。它的优点是可以无差错的精确感知,减轻现场感知负担和依赖,其缺点是加重了整个系统对高精度地图和高精度定位的依赖。
Image-Lidar同时集结了激光和图像的好处,接收器同时对可见光、激光都有响应。
首先需要对车辆建立,可以由厂家提供CAD模型,在真正安装之前,需要在软件环境里面放传感器,考虑以下因素对传感器的安装位置做出最合适的决定。第一是障碍物遮挡情况,这就是为什么很多无人驾驶车的传感器安装在车顶的原因。第二是方便传感器融合。传感器的融合需要不同传感器在视野上有重叠,否则很难进行传感器融合。
传感器标定是通过实验建立传感器输出与输入之间的关系并确定不同使用条件下的误差这样一个过程。
标定的核心概念是得到传感器之间的相对位置,将不同传感器的数据在同一个坐标系中表示。
标定分为内参标定和外参标定。
有些算法是在搭建的标定间完成,有些是在自然环境中完成,在自然环境中标定对算法的依赖度比较强。
在空旷房间的墙面贴满不同的二维码Apriltag,在标定间中间放置一个基于激光雷达的毫米级高精度Rigel激光扫描仪,通过对墙上二维码的多次扫描,完成3D建模,获得了标定间任何一个点的3D位置。
根据建模结果输出一个查找表,查找表由两栏组成,第一栏是Tag_ID,表示各个二维码的ID编号,第二栏是二维码四个角的3D位置信息。之后即可在标定间进行不同传感器的参数标定。
假设在采集车前部安装双Camera,Camera1是60度广角短焦距相机,Camera2为30度广角长焦距相机,两者视角部分重叠。
将车开到标定间,双Camera采集标定间的二维码,获得多个二维码对应四个角点的UV坐标,同时通过查找表得到对应点在3D世界坐标系(Rigel)中的坐标。
求解采集点的PNP问题的,得到相机相对于世界坐标系的位移矩阵Ts和Tl,将这两个相对位移矩阵相互传递,得到二者之间的相对位置。
需要注意的是,标定完传感器之后需要进行验证。相机标定的验证方法为,将长焦相机的图像投影到广角相机图像中,看看重合度如何。如果出现重影或者连接不好,则需要重新标定。
将Camera看到的所有Tag角点与Rigel扫出的对应点的3D坐标进行匹配,求解PNP问题,得到Camera相对于Rigel世界坐标系的相对位置。
将Lidar激光雷达扫描得到的点云与Rigel是稠密的点云之间进行ICP(Iterative Closest Point,迭代最近点)匹配,得到激光雷达相对于Rigel的位置。最后将两个位置矩阵相互传递得到Camera 和 Lidar之间的相对位置。
其标定结果验证方法是将激光雷达感知到的3D点云投影到Camera拍摄的图像上,看边界是否一致,如果不一致需要重新标定。
将每一个Lidar 激光雷达扫描得到的点云与Rigel是稠密的点云之间进行ICP匹配,分别得到激光雷达相对于Rigel的位置。最后将两个位置矩阵相互传递得到Lidar和 Lidar之间的相对位置。
验证方法为:将两个激光雷达采集到的点云都投到真实物理世界中,看点云是否模糊、是否锐利。如果比较模糊,则需要重新标定。
借助Rigel,在开阔平坦的场景下进行完整扫描,得到场景的点云。然后,将要标定的激光雷达对同一个场地进行同样的扫描。之后对两次扫描的点云进行匹配,如果激光雷达的内参不准确,会出现远距离地面点浮在空中的现象。
将车辆在空旷地区绕八字行驶多次,记录多个时间点GPS给出的车辆位置信息(相对于GPS为原点的世界坐标系),将Lidar捕捉的多帧点云投影到世界坐标系中,并进行拼接,求解优化获得外参。
由于没有了Rigel-Tag,需要在标定的场景中寻找具有明显边缘的物体作为参照物,将该参照物的点云边缘和Camera拍摄图像的边缘对齐作为参数标定效果的考量指标,如果对齐,这表示标定结果良好。
过程类似于Camera-to-Camera外参标定,但是需要在自然场景中找到边缘锐利的物体作为参照物。
Camera-to-Radar外参标定的重点是得到Radar相对于Camera的Pitch角的上下倾斜问题。通常情况下Radar是水平安装的,问题就转换为求得Camera相对于地面的Pitch角。由于Camera-to-Lidar已经标定好,可以通过Lidar采集到的平面信息解决倾角问题。
点云障碍物感知的主要任务是感知障碍物的位置、大小、类别、朝向、轨迹、速度等。核心是点云检测分割技术,可以用启发式算法NCut和深度学习算法CNNSeg完成。
基本思想:基于空间平滑性假设,即空间上接近的点来自同一个障碍物。
优点:解释性好;
缺点:分割规则过于简单,难以应对实际情况(草丛、绿化带),主要原因在于缺乏语义信息。
主要思想:利用卷积神经网络来处理激光雷达捕获的点云数据,并对点云中的目标进行识别。
深度学习是数据驱动的,把人工构造特征的任务交给机器和算法去完成(即特征学习)。
在百度的深度学习感知实现过程中,团队尝试了很多方法,下面就简单介绍算法研发的历程:
视觉感知最早从ADAS发展而来。随着深度学习技术的发展,尤其是在视觉领域的巨大成功,视觉感知的主流技术路线已经变为“深度学习+后处理计算”的方法。该方法带来了以下几个变化:要求计算硬件升级、数据的需求量大增、如何评估保证安全性。
面向自动驾驶的深度学习算法具有以下几个特点:
CNN检测,从最开始的AlexNet,VggNet到ResNet等,持续提高了ImageNet图像检测的精度,更多的细节和最新进展可以参考Kaiming He(何凯明)的系列工作。
需要注意的是,目前发表的大部分关于检测的成果都是面向计算机视觉应用的,与自动驾驶领域的检测还有很大的区别:
分割(Segmentation)与detection在本质上是一样的,是对一个目标的不同力度的刻画。分割是一种更细粒度刻画物体边界信息的检测方法,不再是画框,而是进行边缘分割。
在感知中,对于不规则物体,往往需要进行分割处理。例如
在车道线感知中,应视具体情况使用分割或者检测方法。
后处理直接针对下游模块,对后续的影响比较直接。在视觉感知中,后处理主要分为三个部分:
(1)2D-to-3D的几何计算。2D到3D的转换需要考虑的因素包括:
(2) 时序信息计算。针对跟踪处理,需要注意以下几点:
(3)多相机的环视融合
红绿灯感知是百度无人车第一个使用深度学习、使用Camera的模块。
红绿灯感知的任务是在距离停止线50~-2米的范围内精准识别红绿灯亮灯状态。
难点在于:
检测精度要求非常高,必须达到三个九(99.9%),否则会出现闯红灯,违法交规的情况。
另外召回也不能太低,影响通过率和体验。
红绿灯感知需要应对各种环境,包括天气和光照。
红绿灯的制式非常多,包括距离、高度、横纵、信号状态等,红绿灯感知都需要识别。
自动驾驶中使用深度学习进行红绿灯感知模块的构建,主要分为以下几步:
实际使用过程中可能会更复杂。如果一条道路上有很多红绿灯,检测算法会把所有的灯都检测出来。把对应关系匹配起来,需要做3D到2D的投影,投影又受到标定、定位、同步、地图等因素的影响,需要综合考虑才能解决好这个问题
下图右边是Radar的点云信号投影的成像。图中有很多的点,但是并不是所有的点都是障碍物,存在很大的噪音,需要进行鉴别。
图中明显成一条线的点是对路边界金属栅栏的感知结果。因为金属的反射信号比较好,所以雷达点会成直线分布。基于该特征,可以用Radar反射信号来做高速路道路边缘栅栏的检测。
超声波只能进行近距离感知,并且无法感知具体的位置。对无人驾驶来说,行驶过程中帮助并不大,更多的是用于倒车和特别近距离的感知。
举例,在车上布了12个超声波传感器,每个超声波探头覆盖一个角度,大概检测到三米范围内的障碍物。当某个地方有障碍物,传感器发送超声波,收到回波信号以后可以得到障碍物的距离信息,但是并不能确定在覆盖范围内哪个地方有障碍物,如图中的绿线。如果两个探头感知范围存在over lap,这两个传感器的两根绿线会交接,就可以确定障碍物的准确位置。
自动驾驶感知中的机器学习对感知的准确率、召回率和响应延时要求很高。
例如在自动驾驶中的感知机器学习出现一些障碍物的漏检、误检会带来安全问题。漏检会带来碰撞,影响事故;误检会造成一些急刹,带来乘车体验的问题。同时要求低延时。
机器学习里面存在一个普遍的假设:训练集和测试集是独立同分布的。但是无人车感知的训练集是封闭的,而测试集是开放的。
为了应对corner case:或者拓展模型能力,提高识别泛化能力;或者升级对应用场景的全面识别,将corner base最小化。
如何评估模型?如何回归测试?如何得到使用边界?
目前认为可解释性可以通过测试来体现,如果大量测试得到相同的结果,那么原理是不是真正的可解释也就没那么重要。
成本问题
深度学习计算量很大,专门研究车载AI芯片是对这一问题的很好解决方案。
现在很耗时的CNN模型以后都不是瓶颈,而且定制AI芯片的功耗可以足够低,满足车载需求。
深度学习需要大量数据的问题,可以通过仿真来弥补。目前,点云仿真相对简单一些,图像仿真相对困难点。另外,仿真+深度学习不断循环迭代,是非常有前景的。
自动驾驶都是在车上安装传感器进行感知,感知的范围、鲁棒性都有待提高。
如果将这套传感器布置在道路上、灯上,然后将实时感知结果传输给无人车。如果车上的传感器失灵,那么路面上的传感器会告知无人车障碍物信息,保证系统安全性。另外在驾驶环境中部署传感器可以拓展感知距离,做到足够安全,提前告知远处的信息。