车道线的检测涉及两个方面:第一是识别出车道线,对于弯曲的车道线,能够计算出其曲率,第二是确定车辆自身相对于车道线的偏移(即无人车自身在车道线的哪个位置)。一种方法是抽取一些车道的特征,包括边缘特征(通常是求梯度,如索贝尔算子),车道线的颜色特征等,使用多项式拟合我们认为可能是车道线的像素,然后基于多项式以及当前相机在车上挂载的位置确定前方车道线的曲率和车辆相对于车道的偏离。

可行驶区域的检测目前的一种做法是采用深度神经网络直接对场景进行分割,即通过训练一个逐像素分类的深度神经网络,完成对图像中可行驶区域的切割。

交通参与者的检测和分类目前主要依赖于深度学习模型,常用的模型包括两类:

以RCNN为代表的基于Region Proposal的深度学习目标检测算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN等);

以YOLO为代表的基于回归方法的深度学习目标检测算法(YOLO,SSD等)

2.定位

在无人车感知层面,定位的重要性不言而喻,无人车需要知道自己相对于环境的一个确切位置,这里的定位不能存在超过10cm的误差,试想一下,如果我们的无人车定位误差在30厘米,那么这将是一辆非常危险的无人车(无论是对行人还是乘客而言),因为无人驾驶的规划和执行层并不知道它存在30厘米的误差,它们仍然按照定位精准的前提来做出决策和控制,那么对某些情况作出的决策就是错的,从而造成事故。由此可见,无人车需要高精度的定位。

目前使用最广泛的无人车定位方法当属融合全球定位系统(Global Positioning System,GPS)和惯性导航系统(Inertial Navigation System)定位方法,其中,GPS的定位精度在数十米到厘米级别之间,高精度的GPS传感器价格也就相对昂贵。融合GPS/IMU的定位方法在GPS信号缺失,微弱的情况下无法做到高精度定位,如地下停车场,周围均为高楼的市区等,因此只能适用于部分场景的无人驾驶任务。

地图辅助类定位算法是另一类广泛使用的无人车定位算法,同步定位与地图构建(Simultaneous Localization And Mapping,SLAM)是这类算法的代表,SLAM的目标即构建地图的同时使用该地图进行定位,SLAM通过利用已经观测到的环境特征确定当前车辆的位置以及当前观测特征的位置。

这是一个利用以往的先验和当前的观测来估计当前位置的过程,实践上我们通常使用贝叶斯滤波器(Bayesian filter)来完成,具体来说包括卡尔曼滤波(Kalman Filter),扩展卡尔曼滤波(Extended Kalman Filter)以及粒子滤波(Particle Filter)。

SLAM虽然是机器人定位领域的研究热点,但是在实际无人车开发过程中使用SLAM定位却存在问题,不同于机器人,无人车的运动是长距离的,大开放环境的。在长距离的运动中,随着距离的增大,SLAM定位的偏差也会逐渐增大,从而造成定位失败。