来自系列:自主导航
该视频围绕姿态图优化提供了一些直觉 - 一种流行的框架,用于解决自主导航中的同时定位和映射(SLAM)问题。
我们将介绍为什么车辆传感器和状态估计的不确定性使得建立环境的地图困难,以及姿势图优化如何处理它。我们还将简要涵盖占用网格图作为表示环境模型的一种方法。
在最后一个视频中,我们谈到了我们如何估计自主车辆的姿势,如果我们已经有一个型号或环境的地图,那就是它的位置和方向。在这个视频中,我们不会提前有一个地图。我们将不得不建立一个,同时弄清楚车辆在该地图中使用一个名为Slam的过程;同时定位和映射。
有许多不同的SLAM算法,但它们主要可以分为两组;过滤和平滑。如扩展卡尔曼滤波器或粒子滤波器,滤波,将问题模拟为在线状态估计,其中新测量可用时更新机器人状态(和可能的环境部分)。
另一方面,平滑技术从完整的测量值而不仅仅是新的测量值来估计机器人的完整轨迹。如果我们在基于图的公式下处理它们,那么理解这些方法会更加直观。事实上,近年来,一种特定的框架,即姿态图优化(或更一般的因子图优化)已经成为大多数现代SLAM软件解决方案(如g2o或GTSAM)的事实上的标准。金宝搏官方网站所以,在这个视频中,我们将集中于理解什么是姿态图优化以及它为什么有效。所以,我希望你能坚持下去。我是Brian,欢迎来到MATLAB技术讲座。
让我们设置问题。我们有一个自主车辆,一个机器人,具有通过环境的能力。我们已经给了它激光器,以感觉到附近障碍物的距离和角度,并且我们已经通过了使用内径测量来消除其相对位置的方法。在这种情况下,它使用滚轮编码器来计算每个轮子的旋转次数,因为它驱动器的旋转次数,并且它估计它已经消失了多远以及自上次已知位置以来的转变程度。
所以,问题是,我们如何使用这些传感器来了解环境贴图的样子,并弄清了机器人随着时间的推移?好吧,让我们从一个简单的映射问题开始。
在这里,我把机器人放在一个矩形的房间里,角落里有一个圆形的障碍物。我们可以看到这张地图,看到机器人在哪里,但它都不知道。对它来说,它只是一个未知的虚空。让我们从一个非常理想的情况开始,一个在激光雷达或里程表测量中没有不确定性或错误,它们是完美的。在这种情况下,开发环境地图相对来说是微不足道的。机器人可以用激光雷达测量,我们有信心它测量到的就是真正的障碍物位置。它可以保存在全局地图中,然后继续。在行驶了一段距离之后,由于完美的里程表,我们可以精确地知道,它需要另一种测量。这两种测量方法将在全球地图上很好地对齐,因为我们的系统没有错误,通过这种方式,我们可以在周围环境中驾驶,并创建一个完美的地图,同时知道我们在任何时候的确切位置。
当然,这种情况并不现实。激光雷达测量和里程表测量都存在误差,因此在估计机器人姿态和距离测量障碍物的距离方面存在一些不确定性。所以,让我们再一次绘制这个房间的地图,但是这次我们会说激光雷达还是很精确的,但是在里程表测量中有很大的不确定性。也许其中一个轮子一直在滑动,所以机器人认为它在朝一个不同的方向移动。
所以,让我们看看这是如何为我们的机器人解决问题。我们得到了初始激光雷达测量,我们假设那里有一个障碍,就像之前一样,然后我们开了一下。除了,这一次,估计的姿势与真正的姿势不同。因此,LIDAR返回真正机器人看到的墙壁的一些相对距离,但我们只能假设它是相对于估计的机器人姿势,因为我们所知道的。
这将两种可测量的障碍置于不同的框架中,而不是全球环境框架中,因此它们不会对齐。如果我们继续这个过程当我们在房间里驾驶机器人时,里程表中的误差会导致我们估计的姿态更偏离真实的姿态最后,我们剩下的,就是这个障碍物的地图不像真实的环境。所以,这就是为什么我们不能仅仅测量环境,然后把结果放到地图上。我们系统中的不确定性会把它搞砸。但这正是SLAM算法可以帮助我们的地方。
现在,有几种不同的方法可以解决解决流动问题。正如我在开始的那样,在这个视频中,我们将专注于姿势图优化。I want to provide a little intuition behind the algorithm and give you a feeling for how it works without a bunch of math, but if you want to learn more about the mathematics, I’ve left some great resources in the description that go through it in detail.
就像之前一样,我们有我们的真实和估计的机器人姿势,在开始在真实环境地图中彼此的右侧。但现在,在右边,还有这个空白区域。这就是我们将建立姿势图的地方。
我们的机器人所做的第一件事就是测量环境。该测量与当前估计的机器人姿势相关联,我们可以添加到姿势图。因此,基本上我们所做的就是说,这种姿势被定义为x和y位置和旋转角度,并且我们将距离距离和角度省去传感障碍物。现在,还有与这种姿势条目相关的不确定性,但我会在一秒钟内完成。
好吧,我们在帖子图中有第一个条目,让我们得到第二个条目。同样,机器人驱动器一点点,我们的估计姿势开始偏离真正的姿势。与新估计的姿势相关联的环境的另一个测量,现在保存在姿势图中。
所以,我们有两个姿势,每个都有自己的本地估计障碍物所在的地方。即使我们不知道这两种姿势在环境中,我们也有一个关于他们彼此相距多远的想法。在我们的情况下,这来自计算车轮旋转,但是该算法背后的想法并不与特定的传感器组绑定。相对姿势距离可能来自像IMU这样的另一个内部测量来源,或者我们可以弄清楚机器人从其他外部源类似GPS或可见的内径测量移动的距离。重点是,我们有一些最好的猜测这两种姿势彼此多远,以及衡量我们在猜测中有多信心。
以这种方式,有一个约束,我们可以放置在这两种姿势之间的相对距离上。理想情况下,他们会完全留下这一点,因为这是我们的最佳估计,但由于我们在内径过程中的不确定性,如果我们移动这两个彼此,我们可能会更好。例如,如果有一种机制可以能够移动两种姿势来对齐当前未对准的障碍物会很好。好吧,有!约束是这样做的关键。
现在,为了想象一个约束,我认为想象一个连接两种姿势的橡胶杆很有助于。栏的标称长度是我们估计它们的距离。在这些姿势上没有外部力量,杆将保持在这种固定距离处。但是,如果我握住一个姿势固定并移动另一个姿势更接近或进一步,它将压缩或拉伸橡胶杆,并且会有一个想要将姿势恢复到其标称距离的力。橡胶杆的强度取决于我们在距离估计中的信心。如果我们有更多的信心,或者我们有一个非常好的内径过程,那么这是一个非常强大的栏,这使得难以改变这个名义距离。如果我们几乎没有信心,那么这种橡胶杆非常弱,几乎没有恢复力。
因此,在构成图形命名中,我们会说姿势是图形的节点和约束,或橡胶杆,是边缘。当然,这个约束在所有三个姿势尺寸,x和y和旋转中起作用,总是试图将其恢复到其估计距离。好吧,我们不能用两个节点和一个边缘做,所以让我们继续前进。
就像之前一样,机器人继续驾驶并测量环境。在测量之后,我们可以采取估计的姿势,以及其测量本地障碍物,并将其放在姿势图中并添加约束。所以现在我们有三个节点和两个边。我们可以继续这一点,填写我们的姿势图一段时间,直到我们有一些看起来像我们之前构建的不正确的地图一样,但除了连接所有姿势的约束。
现在,我们仍然无法做到很多信息,因为你可以想象所有的酒吧都是他们的标称长度,一切都希望保持正确的地方。但是,我们处于有趣可能发生的观点。我们的第一个姿势和目前的姿势都在观察环境中的相同功能。这意味着我们可以构建一个新的边缘,这两个节点之间的新约束。我们只需要了解这两个特征如何对齐,以弄清楚两种姿势必须相互彼此的位置。并且,在这个例子中,它们必须在完全相同的位置。
因此,现在我们可以添加一个新的约束,该约束连接第一个和最后一个摆姿势并关闭循环。该栏的标称长度为0,因为这两个姿势想要彼此的顶部。这种橡皮棒的强度取决于您在外部测量中的信心以及您将两组数据与相同功能相关联的能力。如果你真的有信心,就像我们在这个例子一样,这个酒吧非常强大,它真的想要把这两者姿势拉到一起。
所以,希望你能开始看到,一个循环闭包是让所有这些工作的东西。如果没有闭包,所有的约束条件都能得到满足。但是有了一个循环闭包,我们就可以把张力注入到这个图中。蓝色条希望将这两个节点拉在一起,紫色条希望保持相对距离。让这个图达到平衡,或者平衡每个约束施加的所有力是位姿图优化的优化部分。
And what’s really cool about this is that by optimizing the pose graph, not only do we have a better estimate of the current pose and a better model of the environment, but we also have a better estimate of where the robot was in the past, since all of the past poses were updated as well. So, we got a lot of value from this one loop closure. Of course, we don’t have a perfect model of the environment, or the robots poses, but that’s ok because we can continue to improve our estimate by making more loop closures.
机器人可以继续驱动,从内径测量中添加新的姿势,并且每当能够使用外部数据确定关系时,新的循环闭合。对于这个例子,让我们假设我们能够将这三个姿势联系在一起,即使这个房间的这个区域相对不示。
此时,所有先前的约束都与之前的约束相同,直到我们添加这些环路闭环,该图形在平衡状态。但是现在我们添加了新的循环闭环,这创造了更多的紧张,这希望拖动并推动所有的姿势,所以我们需要重新运行优化并允许图形重新定位。
通过这种方式,您可以看到每个循环关闭后如何将图表继续改善其环境的环境模型和过去的机器人姿势。
也就是说,只要您连接的两个构成真正查看相同的环境功能。如果您发出不正确的关联,并且您构建了一个没有真实的约束的边缘,您可以想象每次运行它的图表中都会持续存在,并继续扭转您的优化过程。它总是将在远离真理的方向上拉出那些节点。因此,非常重要的是,您对您所做的任何循环闭包都充满信心。事实上,最好错过真正的循环关闭,而不是添加一个错误的循环。您可以随时驾驶更多,并在将来再次封闭,一旦他们进入,将删除坏人更难。
现在,重要的是要注意,循环闭合需要绝对测量环境,就像我们使用LIDAR,或者你可以使用可见的相机或其他一些环境传感器。您无法使用像IMU或轮式编码器这样的相对传感器关闭循环,因为没有办法将该信息与较旧的姿势相关联。您可以认为您在过去的节点附近,但没有检查您无法确定的环境。
好的,所以我们有我们的姿势图,我们已经优化了它,现在我们如何从所有这些数据点构建环境的地图?嗯,有几种不同的方式来代表环境模型,但我将快速介绍二元占用网格。背后的想法是环境被分解为细胞网格。如果您认为它占用的单元格,则将值设置为1,而不占用您将其设置为0.这是我假设整个环境是空的,并且填写我认为有障碍的细胞。您也可以假设相反,其中细胞全部占用,当您的传感器指示没有任何内容时,您将它们设置为零。只有1的矩形房间和一部分圆形障碍物,你可以看到这一点。有一些洞,我们可以通过驾驶更多地填补它们,但整体看起来正常。
Now, there are also probabilistic occupancy grids where the cell doesn’t have to be fully occupied or not and instead there is a probability that it’s occupied between 0 and 1. With this model, you have full confidence in black and white cells and everywhere else is some shade of gray depending on your uncertainty.
在那里,我们拥有它,使用姿势图优化。希望现在您可以看到如何使用此方法同时确定环境的地图和机器人的姿势。现在我们有一个占用网格图,我们可以通过这种环境开始规划未来轨迹的过程。机器人不再需要漫无目的地徘徊,但可以使用此地图计划它想要去的地方。我们将涵盖在下一个视频中探讨规划的一些方法。
但是,在我结束这个之前,我想提醒你,学习这种东西的好方法是只是为了练习它并自己尝试。有一个Matlab示例,使用称为Inflication SLAM的导航工具箱,LIDAR扫描,使用仅限LIDAR构建环境的占用网格图,无需相对测量过程。基本上,环境中具有足够的独特功能,因为通过数据关联或特征匹配,每个姿势的激光雷达测量都可以返回到其他过去姿势。值得答看和玩耍。如果您想要更多信息,我已将其与下面的另一个视频相关联。
好了,这节课到此结束。如果你不想错过任何其他未来的Tech Talk视频,不要忘记订阅这个频道。你们可以去看看我的频道,控制系统讲座,我也讲了更多的控制理论主题。感谢收看,我们下期再见。
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。