自动驾驶中车辆的如何使用点云定位?
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
激光雷达传感器能够获取丰富,稠密且精确的三维空间中物体的点云数据,这可以帮助自动驾驶车辆实现定位和障碍物的跟踪,lidar也将成为实现完全自动驾驶的核心传感器。本篇文章将主要介绍三维激光雷达在自动驾驶定位领域最新的研究,并分析各种方法的定位的效果。
自动驾驶的定位意味着能够在地图中找到车辆的位置和方向。这里的地图也是只使用激光雷达获取的,使用激光束获取测量的距离并产生点云数据,其中的每个点表示传感器获取的物体表面的(XYZ)的坐标。基于点云的高精地图是可以通过lidar扫描离线的构建出来,也可以在导航过程中通过里程计实现闭环的构建地图,也就是SLAM系统。
这里首先分析使用激光雷达的点云数据作为定位的优缺点,与图像或其他传感器相比。
lidar数据能够在获取更为丰富且精确的空间信息,这也使得车辆在定位中更为有优势。
由于激光雷达的数据不断的下降,这使传感器更易于大众使用和研究,并且对于汽车厂商来说也逐渐被接受。
但是使用3D lidar作为定位设备通常也会有一些问题,由于lidars数据数量巨大,因此需要快速处理输出并确保系统的实时性,所以确保车辆的实时定位具有一定的挑战和难度。所以通常需要使用下采样或者特征点提取的方法来高效的简化点云信息。
我们知道在车辆的实时定位系统中生成里程计是必不可少的部分,在过去的研究中,已经提出了很多的使用lidar的点云数据来计算车辆的里程计的方法,这些方法中主要有三个不同的类别:
(1)基于点云数据的配准方法[1]:这是一种很好的离线的构建高精地图的方法,这种方法由于太慢而无法实时的处理,因为该方法考虑了lidar点云数据中的所有点进行配准,可以将这种方法归纳为稠密的方法。
(2)基于点云特征点的方法:受2D图像特征提取和匹配方法的启发[2,3,4],根据3D点云的特征点的提取,计算连续帧之间的位移,这种方法的准确性和实时处理还是可以的,但是对快速运动不够鲁棒。这种方法仅仅使用了点云中提取的特征点来代表一帧的点云数据进行配准,可以归纳为稀疏的方法。
(3)基于点云数据的深度学习的方法:深度学习在决定车辆的定位问题上的研究获得越来越多的研究。在[5,6,7,8]文章中首先使用2D的图像来预测和计算里程计,并且最终的定位效果还是可以接受的。但仍不能超过现有的技术水平。
最近很多的工作正在探索使用lidar点云数据,而结果上提有着很好的效果。接下来讲介绍各种点云定位技术对比和测试结果。
首先回顾和讨论文献中可用的所有方法,在这些文献中,仅使用3D LIDAR传感器即可实现对车辆的3D定位。我们将可用方法分为三类(点云配准,3D特征点匹配法和深度学习的方法),并在下表中列出了它们。并在接下来的阅读中细细介绍。
1
3D点云配准方法
这里主要回顾基于3d 点云的配准的定位方法,配准的目的是实现一对点云能够对齐在同一坐标系下,从而可以计算出两次扫描之间的点云的变换,在自动驾驶定位场景下,可以通过两种方法使用配准的方法:
(1)通过将获取的扫描帧点云与预构建的高精点云地图的一部分进行配准,对车辆进行定位。
(2)通过连续的Lidar扫描获取的点云计算出车辆的里程计信息。
点云配准主要用于形状对齐和场景重建等领域,其中迭代最近点算法(ICP)是最受欢迎的算法之一,在ICP中通过最小化点云数据之间的度量误差来优化源点云和目标点云之间的转换。并在该研究领域有多种ICP算法的变种【47】,常见的变种算法有点到线段的ICP[48],点到面的ICP[49]以及通用的ICP[10],ICP算法可以认为是解决点云配准的经典算法,在文章【11】中将点云配准和回环检测以及车辆位姿图的优化结果在一起,以减少连续配准带来的累计误差。在论文【50】中提出了一种计算里程计并整合雷达传感器数据的特征来改善ICP算法,这是一种通过对点云的下采样和点云数据的几何性质抑制点云匹配的ICP算法,作者在KITTI数据集上的里程计漂移下降了27%,但是ICP算法最终被3D正态分布(NDT)算法所超越【14】【51】3DNDT算法其实是一种将2D NDT算法的扩展到三维空间的算法,与ICP算法类似的是源点云和目标点云质检的转换也需要进行迭代和优化,但是这种方法的优化的误差方程不在点对之间,而在根据预先计算的体素中存在的点的均值和协方差,NDT首先将点云转换为概率密度函数(PDF),然后将概率密度函数与高斯牛顿算法结合优化,找到两点云之间的空间变换,在【52】中提出了对3D NDT算法的扩展并命名为概率NDT算法,该算法尝试解决经典的NDT算法的稀疏性。这种不再给予点的数量而是概率的点的概率的方法能够获取LIDAR数据之间的转换关系,但是在自动驾驶中,这种方法很少能够满足实时运行计算的要求。所以一般会加入一下辅助的传感器,比如IMU,作为初始的定位值。在IMLS-SLAM[20]算法中提出了三部算法:
(1)首先是动态对象的删除,该动态对象通过对扫描帧点云数据的聚类获取再删除。
(2)对于删除动态障碍物的剩余点云进行下采样,
(3)最后是匹配步骤,通过扫描到模型的匹配策略,使用隐式最小移动法(IMLS)计算和优化转换关系.
另外一种流行的处理方法是计算点云的surfel(SURFace ELement)文章【24】构建点云的surel贴图,构建的贴图和法线贴图可用于ICP算法来计算车辆的里程计,并通过surfel实现回环检测和轨迹优化。在文章[38]中,通过以下步骤将激光雷达扫描转换为线点云:从相邻环的相邻点之间采样线段。然后使用迭代方法将这些线点云对齐:首先,计算生成的线的中心点。然后,通过在目标点云中找到中心距源点云中最近的线,将这些点用于查找连续扫描之间的转换。然后使用其他后期处理技巧来提高准确性,例如使用以前的变换来预测和初始化下一个姿势估计步骤。有时,减小LIDAR数据的维数也可以产生合理的结果,例如在[40]中,将传入的扫描数据投影到具有占用栅格和高度的2.5D网格图上。
2
基于3D特征的定位方法
3D的点云特征有【55】【56】【57】是代表在时间和空间上具有一致性的可识别区域的兴趣点,这些特征点通常用于3D的对象检测使用特征描述子作为唯一的向量表示法,并且描述子可以用于匹配两个不同点云中的特征,通过找到足够且一致的匹配项,再使用优化的方法计算两次扫描点云之间的转换关系。从而能够构建里程计,在文章【12】中作者提出了一项研究着重于寻找出在自动驾驶实现精确定位的特征信息,但是由于点簇的分布由于场景的不同,该方法提取出来的特征点也是不稳定的,在论文【16】中,提出了PoseMap的方法,作者认为地图的连续性是实现车辆定位的关键,并且预先构建的点云高精地图,然后根据重叠阈值对齐进行二次采样,以生成维持关键帧姿态的环境集合,这些子地图可以在不同的时间点彼此独立的更新,然后通过简单的使用两个与当前车辆最近的子地图并且最小化旧地图和和新特征之间的距离,通过滑动窗口的方法解决定位问题。
还有论文【21】【22】利用自动驾驶车辆环境中存在的几何形状作为定位的要素,将平面提取算法与帧与帧之间的技术相结合以产生姿态的估计用于车辆的定位,与通过ICP算法获得的结果比较平面提取和对齐的方法在准确性和速度上都显示出了极大的提高。
目前KITTI里程计排行榜上排名第一的方法[25],首先根据点的平滑度和遮挡度提取平面和角点要素。这些特征与后续扫描中的点patch相匹配,然后使用Levenberg-Marquardt方法求解LIDAR运动。正如通常在大多数SLAM流程中所做的那样,在后台线程中以比里程计估计更慢的频率构建地图,这有助于改善最终定位结果。在文章[26]中提出了对该方法的扩展方法,以提高其速度并保证里程计计算的实时性。主要的改进在于通过消除不可靠的特征并使用两次LevenbergMarquardt方法来加快优化步骤,从而充分利用地面的信息。尽管如此,LOAM流程中的主要遗留问题之一是由于累积误差导致的里程表漂移。但是,将回环检测算法加入到流程中是可以解决此问题,如[28]或[27]中所示。
3
基于3D点云深度学习的定位方法
深度学习的方法应用在里程计和定位上还是比较新颖的研究方向,但是在深度学习被证明在图像领域的价值之后,并且像PointNet【60】和PointNet++这样的方法表明,深度学习的使用将会越来越流行,涉及到深度学习的方法可以尝试使用原始点云作为输入并使用单个网络直接预测车辆的位移以端到端的方式解决此任务,提出使用深度学习方法解决里程计的方法是论文【13】,为了简化深度学习的网络的输入不是直接对3D点云进行处理而是将LIDAR点云投影到2D空间上生成全景的深度图像,然后将其输入到卷积网络中,求解两个输入帧之间的旋转和平移,获得的结果低于标准,但是确是探索使用深度学习解决此任务的方案。
全景的深度图像是lidar数据的一种常见的表示形式,另一种使用深度图像的方法是DeepPCO【17】将雷达投影生成的全景深度图分别输入到两个卷积网络中,分别用于计算两帧之间的旋转和平移。另外还有将雷达点云投影到球形坐标系下生成两个新的2D图像,分别是定点图(表示每个点的位置(XYZ))和发现图(表示每个点的法线值),将两个图像分别输入到两个网络中,分别是:VertexNet他以定点图作为输入,用于预测连续帧之间的转换,NormalNet以法线图作为输入,预测两者之间的旋转。
在[44]中提出了一种称为CAE-LO的解决方案,其中使用无监督卷积自动编码器以多尺度方式从LIDAR数据的球形投影中提取特征。附加的自动编码器用于生成特征描述符,然后使用基于RANSAC的帧到帧匹配来匹配点。最后,ICP算法用于完善里程计结果。
在[29]中,提出了LORAX算法。这种方法引入了超点的概念,超点是位于球体内并描述了点云局部表面的点的子集,这些超点被投影到2D空间上以形成2D深度图。然后使用一系列测试对这些深度图进行过滤,仅留下相关的超点,并使用PCA和深度自动编码器进行编码。然后,再进行粗配准步骤(其中使用涉及RANSAC算法的迭代方法)之前,根据特征之间的欧式距离来选择要匹配的候选对象。作为最后一步,使用ICP算法微调,以提高整个算法结果的准确性。
在集成一系列的论文[32],[31],[33],[34]后提出SegMap方法[35]的作者探索了如何使用简单的卷积网络有效地从点云中提取和编码片段,用于解决定位和构建地图相关任务。这种方法的主要贡献在于其数据驱动的3D片段描述符,该描述符是使用由一系列卷积和完全连接的层组成的网络提取的。使用由两部分组成的损失函数训练描述符提取器网络:分类损失和重建部分。最终,使用k-Nearest Neighbors(k-NN)算法找到提取的片段及其候选对应关系,这使得解决定位任务成为可能。
当试图使两帧点云之间的运动回归时,前面讨论的大多数方法都会不可避免地遭受场景中动态对象(汽车,行人等)的影响。已知在场景中删除动态对象可以改善大多数SLAM流程中的里程计计算结果。但是,以有监督的方式检测然后从场景中删除动态对象会带来额外的复杂性,这可能导致更长的处理时间和不稳定的结果。为了以一种无监督的方式解决这个问题,论文[37]中的作者提出了为动态掩码预测的任务训练编码器-解码器分支。这是通过优化几何一致性损失函数来完成的,该函数说明了点云数据的法线可以对几何一致性进行建模的区域。完整的网络称为LO-Net可以通过端对端的方式进行训练,方法是将几何一致性损失,里程计回归损失和交叉熵损失结合起来以进行正则化。
在KITTI训练数据集上的3D深度学习定位方法的比较
在KITTI测试数据集上3D定位方法的比较。
有些深度学习方法不是直接使用LIDAR进行定位车辆的,而是尝试学习常见流程中的错误模型。换句话说,深度学习可用于校正已经可用的里程计计算,产生功能强大且灵活的插件模块。论文[39]的作者建议学习一个偏差校正项,目的是改善以LIDAR数据作为输入的状态估计器的结果。高斯模型用于对6个测距误差进行相互独立的建模,其精心选择的输入特征集中在受误差影响最大的3个自由度上。在[41]中,提出了一种更高级的方法,称为L3-Net,可以将其关联到偏差校正问题上,因为此处的作者提出了一个尝试学习残差项的网络,而不是预测帧之间的转换关系。首先提取相关特征并将其输入miniPointNet中以生成其相应的特征描述符。然后构建残差项,并使用3D卷积神经网络对其进行正则化。此外,将RNN分支添加到网络中,以确保位移预测的时间平滑性。同一作者在[42],[43]中提出了一个更完整,更通用的L3-Net变种,并将其命名为DeepICP。在这里,使用PointNet ++提取特征,然后使用仅保留最相关特征的加权层进行过滤。与先前的方法类似,使用miniPointNet结构计算特征描述符,然后将其反馈到相应的点云生成层,该层在目标点云中生成相应的关键点。为了使变换的最终值回归,将两个损失函数组合在一起,并对局部相似度和全局几何约束进行编码。
我们根据先前在KITTI里程计数据集[9]上报告的结果对先前引用的方法进行比较,该基准测试是最流行的用于户外里程计评估的大型数据集之一:它包含使用Velodyne HDL-64E记录的22个序列激光雷达扫描仪已经过预处理,以补偿车辆的运动。地面真值可用的11个序列,并且是使用高级GPS / INS系统获得的。尽管LOAM仍然占据着KITTI排行榜的第一位,但是很明显,涉及深度学习的方法正变得越来越准确。例如,DeepICP的报告平均结果优于训练数据集上提出的任何其他方法。但是,我们很难将它们归类为“最先进”的方法,主要有两个原因:
(1)DeepICP报告,配准每对点云大约需要2秒钟。这太慢了,以至于不能在现实生活中运行的真正的自动驾驶汽车上使用。
(2)尚未报告测试数据集上这些方法的结果。在测试数据集上的良好结果将证明这些方法能够在实际场景中使用,而不仅是在深度神经网络已经看到的数据上。在此之前,LOAM及其变体仍然是真正的自动驾驶部署的最佳选择和最可信赖的。
在本文中,主要回顾,分析,比较和讨论了自动驾驶汽车3D LIDAR定位领域中的大多数最新进展和发现。考虑了使用唯一的传感器是3D LIDAR的系统,这是由于该传感器在当今最准确的感知和定位系统中的重要性日益增加,此外,它对大众和制造商的可用性也有所提高。从论文对KITTI里程计数据集进行比较,得出以下结论:尽管基于深度学习的方法展现出良好的结果,并且似乎代表了未来的研究方向,但是基于3D特征检测和匹配的方法由于在现实应用中具有一定的稳定性,仍被认为是最佳且有效的方案。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~