激光雷达探测原理

2020-05-08 00:22:38

激光雷达是目前正在改变世界的传感器。它集成在自动驾驶汽车、自动无人机、机器人、卫星、火箭等中。

这个传感器使用激光束,并测量激光返回所需的时间,以3D方式了解世界。输出是点云。

这是一项比相机更难理解的技术,因为能接触到它的人更少。我曾经接触过它,今天将帮助你了解激光雷达对自动驾驶汽车的检测是如何工作的。

激光雷达的底层技术可以为广泛的用例提供动力,但目前,自动驾驶汽车为我们提供了探索这项技术的最佳方法。

今天,我将提供LiDAR的介绍,并从自动驾驶汽车的角度解释它是如何工作的。然后,我将探讨如何处理点云、使用3D边界框检测障碍物以及实时分割可驾驶区域。

在做任何事情之前,要知道我每天都在用自动机器人等尖端技术创建内容。

加入正在崛起的社区,订阅私人邮件列表,每天都能收到有用的提示和相关内容!

激光雷达传感器与光一起工作。激光雷达是光探测和测距的缩写。他们可以探测到300米内的障碍物,并准确估计自己的位置。在自动驾驶汽车中,这是最准确的位置估计传感器。

激光雷达传感器由激光发射(上)和激光接收(下)两部分组成。发射系统通过利用多层激光束来工作。层越多,激光雷达的精度就越高。在上面的图像中,你可以看到层越多,传感器就越大。

当这些激光击中障碍物时,它们会产生一组点云。该传感器与飞行时间(TOF)一起工作。从本质上说,它测量的是每束激光束反射和返回所需的时间。

当以非常高的质量(和价格),激光雷达可以创建丰富的3D场景的环境。它们每秒可以发射高达200万个点。

点云在三维中表示世界。LiDAR传感器可获得每个撞击点的精确(X,Y,Z)位置。

在第一种情况下,它将检测重点放在一个位置上,并提供覆盖范围(例如90°)。在后一种情况下,它将围绕自身旋转,并提供360°视图。在这种情况下,我们希望将其放置在屋顶上,以获得更好的可见性。

激光雷达很少用作独立传感器。它们通常与摄像机或雷达结合在一起,这一过程被称为传感器融合(Sensor Fusion)。请在这里找到我的传感器融合文章以了解更多信息。

融合过程可以有两种类型:早期融合或晚期融合。在第一种情况下,点云与图像像素融合。在第二种情况下,各个检测被融合在一起。

激光雷达不能直接估计速度。他们需要计算两个连续测量之间的差值才能做到这一点。另一方面,由于多普勒效应,雷达可以估计速度。

激光雷达在恶劣天气条件下不能很好地工作。在有雾的情况下,激光可以击中它,使场景变得混乱。与雨滴或泥土相似。

就尺寸而言,激光雷达很笨重--它们不能像相机或雷达那样隐藏起来。

激光雷达可以准确估计障碍物的位置。到目前为止,我们还没有更准确的方法来做到这一点。

激光雷达使用点云。如果我们看到车辆前面的点云,即使障碍物探测系统没有检测到任何东西,我们也可以停车。对于任何客户来说,知道车辆不会只依赖神经网络和概率是一个巨大的安全性。

在本文中,我将介绍通常分4个步骤进行的障碍检测过程(后期融合):

要处理点云,我们可以使用最流行的库,称为PCL(点云库)。它在Python中可用,但在C++中使用更有意义,因为该语言更适合于机器人。它还符合ROS(机器人操作系统)。

PCL库可以完成检测障碍物所需的大部分计算,从加载点到执行算法。该库是相当于OpenCV的计算机视觉。

由于LiDAR的输出可以轻松地达到每秒100,000点,因此我们需要使用一种称为体素网格的东西来对结果进行下采样。

体素栅格是一个3D立方体,它将通过在每个立方体中只保留一个点来过滤点云。

最后,我们可以对云进行下采样,从100,000个点降到只有几千个点。

我们可以执行的第二个操作是ROI(感兴趣区域),我们只需删除不属于特定区域的每个点-例如,侧面10米,前方100米。

第一个任务是加载点云并对其进行下采样。现在我们有了点云,我们可以继续进行分割、聚类和边界框实现。

手头的分割任务是将场景与其中的障碍物分开。

一种非常流行的分割方法称为RANSAC(随机样本一致性)。该算法的目标是识别一组点中的离群值。

点云的输出通常表示一些形状。有些形状代表障碍物,有些简单地代表地面上的反射。RANSAC的目标是识别这些点,并通过拟合平面或直线将它们与其他点分开。

为了拟合一条直线,我们可以考虑线性回归。但由于有如此多的异常值,回归会试图对结果进行平均,从而错过了这条线。与线性回归不同的是,这里的算法将识别这些异常值,而不会对它们进行拟合。

我们可以认为这条线是场景的目标路径(即道路),离群值是障碍物。

计算每隔一点到拟合直线的距离。如果距离在定义的距离公差内,我们会将该点添加到内嵌点列表中。

最后,选择内点最多的迭代作为模型,其余的都是离群点。这样,我们可以认为每个Inlier都是道路的一部分,而每个离群值都是障碍的一部分。

RANSAC也可以在3D模式下工作。在这种情况下,3个点之间的平面是算法的基础。然后计算一点到平面的距离。

以下是对点云执行RANSAC算法的结果。紫色区域表示车辆。

RANSAC是一种功能非常强大且简单的点云分割算法。它试图找到属于相同形状的点,以及不属于相同形状的点。然后,它可以分离云。

RANSAC的输出是障碍点列表和路点列表。由此,我们可以为每个障碍定义独立的群集。

聚类是一种根据点的距离将一组点分开的技术。考虑上图,我们有一些可见的障碍物-我们需要算法自己理解实际上有多辆车,并为每个障碍物设置一种颜色。

聚类是一系列机器学习算法,包括:K-Means(最流行)、DBScan、HDBScan等。

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

群集算法将距离容限、最小群集大小和最大群集大小作为输入。这样,我们就可以过滤“幽灵障碍物”(无缘无故地在空间某一点上的一个单点云),并为封闭的障碍物定义一个距离。

上述技术的问题是,一个LiDAR传感器可以输出100,000个点云。这意味着100,000个欧几里得距离计算。为了避免计算每个点的距离,我们可以使用KD树。

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

以上面的场景为例,其中底部的橙色点不低于距离容差阈值。我们可以移除这个橙色点右侧的每一个点,因为我们确定它们也不会在容差阈值之内。然后我们可以取另一个点,计算距离,然后重复。

KD树非常适合计算--欧几里得计算的次数大大减少了。再加上聚类算法,它们是高效获取独立障碍物的强大工具。

最终目标是在每个簇周围创建3D边界框。这一部分并不特别难,但它对障碍物的大小做出了假设。因为我们没有做任何分类,所以我们必须将边界框与点相匹配。

使用PCA,我们可以绘制与点云完全对应的边界框。这将对停放的汽车有所帮助,例如,在仅检测到部分的情况下。

通过结合上面讨论的三种技术,我们得到了一个从LiDAR点云构建的障碍物检测算法!

这是我的传感器融合纳米度项目的结果。您可以在此处访问代码。

激光雷达是一种非常强大和可靠的传感器,广泛应用于机器人领域。今天,我们可以走得更远,将点云拟合到3D工作的神经网络中,直接输出边界框。

一段时间以来,LiDAR技术因其笨重的尺寸和价格而受到批评,使其成为一种精英传感器。

最近,苹果在其新款iPad Pro上发布了LiDAR传感器,大大降低了价格门槛,降至1000美元以下。

随着LiDAR的问世,获得使用此传感器的技能将成为工程师的真正加分!传感器融合也是一个引人入胜的话题,只有掌握了LiDAR+相机或LiDAR+雷达检测才有意义。

最后,我想邀请您加入私人邮件列表!自2019年末以来,我每天都在发布这份榜单,我唯一的目标就是帮助有抱负的AI&Amp;自主系统工程师找到梦寐以求的工作。在榜单中,我每天都会分享小贴士,以及技术内容。我也在分享我开发的关于这个主题的在线课程!在竞争中领先一步是真正的优势。加入这里吧。

编者按:心跳是一个贡献者驱动的在线出版物和社区,致力于探索移动应用开发和机器学习的新兴交集。我们致力于支持和激励各行各业的开发人员和工程师。

编辑独立,心跳是由Fritz AI赞助和出版的,Fritz AI是一个帮助开发人员教设备看、听、感和思考的机器学习平台。我们付钱给投稿人,我们不卖广告。

如果您想投稿,请前往我们的征集投稿人。您还可以注册接收我们的每周时事通讯(深度学习周刊和Fritz AI时事通讯),在Slake上加入我们,并在Twitter上关注Fritz AI以了解所有最新的移动机器学习。