自动驾驶中激光雷达检测障碍物理论与实践


点击“蓝字”关注点云PCL,选择“星标”获取最新文章

激光雷达是利用激光束来感知三维世界,通过测量激光返回所需的时间输出为点云。它集成在自动驾驶、无人机、机器人、卫星、火箭等许多领域。

本文从自动驾驶汽车的角度解释它是如何工作的,然后将探讨如何处理点云,使用三维边界盒检测障碍物,并实时分割可行驶区域。

激光雷达-一种三维激光传感器

激光雷达传感器利用光原理进行工作,激光雷达代表光探测和测距。它们可以探测到300米以内的障碍物,并准确估计它们的位置。在自动驾驶汽车中,这是用于位置估计的最精确的传感器。

激光雷达传感器由两部分组成:激光发射(顶部)和激光接收(底部)。发射系统的工作原理是利用多层激光束,层数越多,激光雷达就越精确。层数越多,传感器就越大。激光被发射到障碍物并反射,当这些激光击中障碍物时,它们会产生一组点云,传感器与飞行时间(TOF)进行工作,从本质上说,它测量的是每束激光反射回来所需的时间。如下图:

当激光雷达的质量和价格非常高时,激光雷达是可以创建丰富的三维环境,并且每秒最多可以发射200万个点。点云表示三维世界激光雷达传感器获得每个撞击点的精确(X,Y,Z)位置。

激光雷达传感器可以是固态的,也可以是旋转的,固态激光雷达将把检测的重点放在一个位置上,并提供一个覆盖范围(比如FOV为90° )。在后一种情况下,它将围绕自身旋转,并提供360度旋转。在这种情况下,一般把它放在设备顶上,以提高能见度。

激光雷达很少用作独立传感器。它们通常与相机或雷达结合在一起,这一过程称为传感器融合。融合过程可分为早期融合和后期融合。早期融合是指点云与图像像素融合,后期融合是指单个检测物的融合。

激光雷达的优缺点?

缺点:

  • 激光雷达不能直接估计速度。他们需要计算两个连续测量值之间的差值。

  • 激光雷达在恶劣的天气条件下工作不好。在有雾或者下雨的情况下,激光会击中它,使场景变得混乱。

  • 激光雷达的价格虽然在下降,但仍然很高。

优点:

  • 激光雷达可以精确地估计障碍物的位置。到目前为止,还没有更准确的方法。

  • 激光雷达处理点云。如果我们看到车辆前方的点云,即使障碍物检测系统没有检测到任何东西,我们也可以及时停车。这是一个很大的安全保证,车辆将不仅依赖于图像的神经网络和概率问题。

基于激光雷达如何进行障碍物检测?

激光雷达进行障碍物的步骤通常分为4个步骤:

  1. 点云处理

  2. 点云分割

  3. 障碍聚类

  4. 边界框拟合

点云处理-体素网格

为了处理点云,我们可以使用最流行的库PCL(point cloud library)。它在Python中可用,但是在C++中使用它更为合理,因为语言更适合机器人学。它也符合ROS(机器人操作系统)。PCL库可以完成探测障碍物所需的大部分计算,从加载点到执行算法。这个库相当于OpenCV的计算机视觉。因为激光雷达的输出很容易达到每秒100000个点,所以我们需要使用一种称为体素网格的方法来对点云进行下采样。

什么是体素网格?

体素网格是一个三维立方体,通过每个立方体只留下一个点来过滤点云。立方体越大,点云的最终分辨率越低。最终,我们可以将点云的采样从几万点减少到几千点。

体素网格

滤波完成后我们可以进行的第二个操作是ROI(感兴趣区域)的提取,我们只需删除不属于特定区域的每一些点云数据,例如左右距离10米以上的点云,前后超过100米的点云都通过滤波器滤除。现在我们有了降采样并滤波后的点云了,此时可以继续进行点云的分割、聚类和边界框实现。

三维点云的分割-RANSAC

点云分割任务是将场景与其中的障碍物分离开来,其实就是地面的分割。一种非常流行的分割方法称为RANSAC(RANdom Sample consenses)。该算法的目标是识别一组点中的异常值。点云的输出通常表示一些形状。有些形状表示障碍物,有些只是表示地面上的反射。RANSAC的目标是识别这些点,并通过拟合平面或直线将它们与其他点分开。

原始点云

为了拟合直线,我们可以考虑线性回归。但是有这么多的异常值,线性回归会试图平均结果,而得出错误的拟合结果,与线性回归相反,这里的ransac算法将识别这些异常值,且不会拟合它们。

如上图所示我们可以将这条线视为场景的目标路径(即道路),而孤立点则是障碍物。它是如何工作的?

过程如下:

  • 随机选取2个点

  • 将线性模型拟合到这些点计算每隔一点到拟合线的距离。如果距离在定义的阈值距离公差范围内,则将该点添加到内联线列表中。

因此需要算法一个参数:距离阈值。

最后选择内点最多的迭代作为模型;其余的都是离群值。这样,我们就可以把每一个内点视为道路的一部分,把每一个外点视为障碍的一部分。RANSAC应用在3D点云中。在这种情况下,3个点之间的构成的平面是算法的基础。然后计算点到平面的距离。

下面点云上RANSAC算法的结果。紫色区域代表车辆。

RANSAC是一个非常强大和简单的点云分割算法。它试图找到属于同一形状的点云和不属于同一形状的点云,然后将其分开。

点云聚类-欧氏聚类与KD tree

RANSAC的输出是障碍点云和地面带你。由此,可以为每个障碍定义独立的簇。它是如何工作的?

聚类是一系列机器学习算法,包括:k-means(最流行)、DBScan、HDBScan等。这里可以简单地使用欧几里德聚类,计算点之间的欧几里德距离。

过程如下:

  • 选取两个点,一个目标点和一个当前点

  • 如果目标和当前点之间的距离在距离公差范围内,请将当前点添加到簇中。

  • 如果没有,选择另一个当前点并重复。

点云欧式聚类算法就是将一组点云按其距离进行分割。聚类算法以距离阈值、最小聚类数目和最大聚类数目作为输入。通过这种方式,可以过滤“幽灵障碍物”(一个单点云在空间中是没有理由存在的),并定义一个封闭的障碍物距离。如下图这里用不同颜色来代表聚类后的障碍物点云簇

计算KD树

在进行点云聚类问题时,由于一个激光雷达传感器可以输出几万个点云,这将意味有上万次的欧几里德距离计算。为了避免计算每个点的距离,这里使用KD树进行加速。

KD树是一种搜索算法,它将根据点在树中的XY位置对点进行排序,一般的想法-如果一个点不在定义的距离阈值内,那么x或y更大的点肯定不会在这个距离内。这样,我们就不必计算每一个点云。

以上面的场景为例,底部的橙色点是不小于距离阈值。我们可以删除这个橙色点右侧的每个点,因为我们确定它们不会在距离阈值内。然后我们可以取另一个点,计算距离并重复。所以KD树能够在计算欧式聚类算法中的计算量大大减少。再加上聚类算法,两者是能够有效获取独立障碍物的有利算法。

边界框

最终的目标是围绕每个点云簇创建一个三维边界框。因为我们没有对点云簇进行任何分类,所以我们必须将边界框与点云相匹配。主成分分析(PCA)是一种有助于拟合边界框的算法。

PCA应用在2D边界框实例

使用PCA,我们可以绘制一个与点云簇精确对应的边界框。通过结合以上三种算法,我们得到了一种基于激光雷达点云的障碍物检测算法!

github仓库:

 https://github.com/4artit/SFND_Lidar_Obstacle_Detection.git

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍


如果你对本文感兴趣,请后台发送“知识星球”获取二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作方式:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云PCL公众号博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值