来自系列:自主导航
这个视频提供了一些关于姿态图优化的直觉——一个流行的框架来解决同步定位和映射(SLAM)的自主导航问题。
我们将讨论为什么车辆传感器和状态估计的不确定性使得创建环境地图变得困难,以及姿态图优化如何处理它。我们还将简要介绍占用网格地图作为表示环境模型的一种方法。
在最后一个视频中,我们谈到了我们如何估计自主车辆的姿势,如果我们已经有一个型号或环境的地图,那就是它的位置和方向。在这个视频中,我们不会提前有一个地图。我们将不得不建立一个,同时弄清楚车辆在该地图中使用一个名为Slam的过程;同时定位和映射。
SLAM有很多不同的算法,但它们大多可以分为两类;过滤和平滑。滤波,如扩展卡尔曼滤波或粒子滤波,将问题建模为在线状态估计,其中机器人状态(也许是环境的一部分)在新的测量可用时随时更新。
另一方面,平滑技术估计完整的测量集的完整机器人轨迹,而不仅仅是新测量。如果我们在基于图形的配方下解决这些方法,请理解这些方法可能更直观。事实上,近年来,一个特定的框架,姿势图优化(或更泛,因子图优化)已成为大多数现代SLAM软件解决方案的事实标准(如G2O或GTSAM)。金宝搏官方网站因此,在此视频中,我们将专注于了解姿势图优化以及它为何工作的原因。所以,我希望你坚持下去。我是Brian,欢迎来到Matlab技术谈话。
让我们设置问题。我们有一个自主车辆,一个机器人,具有通过环境的能力。我们已经给了它激光器,以感觉到附近障碍物的距离和角度,并且我们已经通过了使用内径测量来消除其相对位置的方法。在这种情况下,它使用滚轮编码器来计算每个轮子的旋转次数,因为它驱动器的旋转次数,并且它估计它已经消失了多远以及自上次已知位置以来的转变程度。
所以,问题是,我们如何使用这些传感器来了解环境贴图的样子,并弄清了机器人随着时间的推移?好吧,让我们从一个简单的映射问题开始。
在这里,我将机器人放在一个矩形的房间里,在角落里有一个圆形障碍物。我们可以看到这张地图并查看机器人的位置,但它也不知道。到它,它只是在一个未知的空洞中。让我们从一个非常理想的情况开始,其中LIDAR或内径测量中没有不确定性或错误,它们只是完美。在这种情况下,开发环境的地图是相对微不足道的。机器人可以采取激光器测量,我们有信心测量的是真正的障碍地点。它可以在全球地图中保存该问题并继续继续。在驾驶一段距离之后,我们再次正如完美的内径术,我们都知道,它需要另一个测量。这两项测量将在全球地图中对齐,因为我们的系统中没有错误,并以这种方式我们可以在环境中推动所有环境并创建一个完美的地图,一切都在知道我们始终处于始终的位置。
当然,这种情况并不现实。LIDAR测量和内径术中存在误差,因此估计的机器人姿势和距离测量障碍物的距离存在一些不确定性。所以,让我们再试一次,让这段房子映射,但是这次我们会说激光雷达仍然非常准确,但在内径测量中存在大的不确定性。也许其中一个轮子保持滑倒,所以机器人认为它沿着实际方向移动了不同的方向。
所以,让我们看看这是如何为我们的机器人解决问题。我们得到了初始激光雷达测量,我们假设那里有一个障碍,就像之前一样,然后我们开了一下。除了,这一次,估计的姿势与真正的姿势不同。因此,LIDAR返回真正机器人看到的墙壁的一些相对距离,但我们只能假设它是相对于估计的机器人姿势,因为我们所知道的。
这将两个测量的障碍物放在不同的框架中,而不是全球环境框架,因此它们不会排列。If we continue this process as we drive the robot around the room, the error in odometry causes our estimated pose to deviate more from the real pose and what we’re left with in the end, is this map of obstacles that don’t resemble the real environment. So, this is one of the reasons why we can’t just take measurements of the environment and stick the results into a map. Uncertainty in our system is going to mess it up. But this is where SLAM algorithms can help us.
现在,有几种不同的方法可以解决SLAM问题。正如我在开始说的,在这个视频中,我们将集中于姿态图优化。我想让你们对这个算法有一点直观的认识让你们在没有数学知识的情况下了解它是如何工作的,但如果你们想学习更多的数学知识,我在描述中留下了一些很好的资源,详细介绍它。
就像之前一样,我们有我们的真实和估计的机器人姿势,在开始在真实环境地图中彼此的右侧。但现在,在右边,还有这个空白区域。这就是我们将建立姿势图的地方。
我们的机器人做的第一件事是测量环境。该测量与当前估计的机器人姿态相关,我们可以将两者都添加到姿态图中。本质上,我们所做的是说这个姿势被定义为X和Y位置和旋转角度同时我们保存了感知到的障碍物的距离和角度。现在,也有不确定性与这个姿态进入有关,但我马上会讲到。
好吧,我们在帖子图中有第一个条目,让我们得到第二个条目。同样,机器人驱动器一点点,我们的估计姿势开始偏离真正的姿势。与新估计的姿势相关联的环境的另一个测量,现在保存在姿势图中。
所以,我们有两个姿势,每个都有自己的本地估计障碍物所在的地方。即使我们不知道这两种姿势在环境中,我们也有一个关于他们彼此相距多远的想法。在我们的情况下,这来自计算车轮旋转,但是该算法背后的想法并不与特定的传感器组绑定。相对姿势距离可能来自像IMU这样的另一个内部测量来源,或者我们可以弄清楚机器人从其他外部源类似GPS或可见的内径测量移动的距离。重点是,我们有一些最好的猜测这两种姿势彼此多远,以及衡量我们在猜测中有多信心。
以这种方式,有一个约束,我们可以放置在这两种姿势之间的相对距离上。理想情况下,他们会完全留下这一点,因为这是我们的最佳估计,但由于我们在内径过程中的不确定性,如果我们移动这两个彼此,我们可能会更好。例如,如果有一种机制可以能够移动两种姿势来对齐当前未对准的障碍物会很好。好吧,有!约束是这样做的关键。
现在,为了形象化一个约束条件,我认为想象一个橡胶棒连接这两个姿态是有帮助的。标称长度就是我们估计的它们之间的距离。在没有外力作用于这些姿态的情况下,杆将使它们保持在这个固定的距离。然而,如果我固定一个姿势,移动另一个姿势,使其靠近或远离它,它就会压缩或拉伸橡胶棒,就会有一个力想要将姿势恢复到它们的标称距离。橡胶棒的强度取决于我们对估计距离的信心。如果我们有更多的信心,或者我们有一个非常好的里程表过程,那么这是一个非常强的杆使它很难改变这个标称距离。如果我们几乎没有信心,那么这根橡胶棒就很弱,几乎不能提供回复力。
在姿态图的术语中,我们说姿态是图形的节点而约束,或者说橡胶棒,是一条边。当然,这个约束作用于所有三个姿态维度,X和Y,以及旋转,总是试图将其带回其估计距离。好的,对于两个节点和一条边,我们能做的并不多,我们继续。
就像之前一样,机器人继续驾驶并测量环境。在测量之后,我们可以采取估计的姿势,以及其测量本地障碍物,并将其放在姿势图中并添加约束。所以现在我们有三个节点和两个边。我们可以继续这一点,填写我们的姿势图一段时间,直到我们有一些看起来像我们之前构建的不正确的地图一样,但除了连接所有姿势的约束。
现在,我们仍然不能用这个信息做很多事情,因为你可以想象所有的条形图都在它们的名义长度上并且所有的东西都想保持在它的位置上。然而,我们正处在一个可能发生有趣事情的时刻。我们的第一个姿势和当前的姿势都在观察环境中的相同特征。这意味着我们可以建立一条新的边,一个新的约束在这两个节点之间。我们只需要理解这两个特征是如何对齐的来找出这两个姿态之间的相对关系。在这个例子中,它们必须在完全相同的位置。
所以,现在我们可以添加一个新的约束来连接第一个和最后一个姿势并结束循环。这个条的名义长度为0,因为这两个姿态想要在对方的正上方。橡胶棒的强度取决于你对外部测量的信心程度以及你将两组数据关联为同一特征的能力。如果你真的很自信,就像我们在这个例子中,这个杆是非常强大的,它真的想把这两个姿势拉在一起。
所以,希望你能开始看到一个循环关闭是让所有这项工作的事情。没有关闭,所有的限制都很快就会得到满足。但是通过循环关闭,我们有一种方法可以将张力注入此图。蓝栏希望将这两个节点拉到一起,紫色杆都希望保持相对距离的方式。允许该图沉降到均衡,或者平衡每个约束的所有力量施加的力是姿势图优化的优化部分。
很酷的是,通过优化构成图,我们不仅有一个更好的估计当前的姿势和更好的环境的模型,但我们也有一个更好的估计的机器人在过去,因为过去的姿势都更新。我们从这个循环闭包中得到了很多值。当然,我们没有一个完美的环境模型,或者机器人的姿态,但这没关系,因为我们可以通过制作更多的循环闭包来继续改进我们的估计。
机器人可以继续驾驶,从里程表中添加新的姿态,并在能够使用外部数据确定关系时添加新的环路闭包。对于这个例子,让我们假设我们能够将这三种姿态联系在一起,即使房间的这个区域相对来说没有什么特征。
此时,所有先前的约束都与之前的约束相同,直到我们添加这些环路闭环,该图形在平衡状态。但是现在我们添加了新的循环闭环,这创造了更多的紧张,这希望拖动并推动所有的姿势,所以我们需要重新运行优化并允许图形重新定位。
通过这种方式,您可以看到每个循环关闭后如何将图表继续改善其环境的环境模型和过去的机器人姿势。
也就是说,只要你所连接的两个姿态真正看到的是相同的环境特征。如果您创建了一个不正确的关联,并且使用一个不真实的约束创建了一条边,那么您可以想象,它将如何在您的图中持久存在,并在每次运行它时继续倾斜您的优化过程。它总是把这些节点拉向远离真相的方向。因此,对所做的任何循环闭包都有信心是非常重要的。事实上,忽略一个真正的循环闭包比添加一个假的要好。你可以开更多的车,以后再做一次关闭,一旦有了不好的,就很难清除了。
现在,重要的是要注意到一个闭环需要一个绝对的环境测量,就像我们用激光雷达,或者你可以用一个可见的相机,或其他环境传感器。你不能用IMU或车轮编码器这样的相对传感器来闭合这个回路,因为没有办法将这些信息与以前的姿势联系起来。您可能认为您正在接近一个过去的节点,但是如果不检查环境,您就不能确定。
好了,我们有了我们的姿态图,我们已经优化了它,现在我们如何从所有这些数据点建立一个环境地图呢?有几种不同的方式来表示环境模型,但我将很快地介绍二元占用网格。其背后的理念是,环境被分解成网格状的细胞。如果您相信它占用的单元格,则将该值设为1,而不占用则将其设为0。这里我假设整个环境是空的,并在我认为有障碍的地方填充单元格。你也可以假设相反的情况,所有的细胞都被占据,当你的传感器显示那里什么都没有时,你把它们设为0。你可以看到,只用1和0 I,我们就生成了一个非常精确的矩形房间和圆形障碍物的模型。这里有一些洞,我们可以开更多的车来填补它们,但总的来说看起来还不错。
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.
我们有了SLAM,利用姿态图优化。希望现在你能看到环境地图和机器人的姿态是如何用这种方法同时确定的。现在我们有了一个居住网格图,我们可以通过这个环境开始规划未来的轨迹。机器人不再需要漫无目的地四处游荡,而是可以使用这张地图来规划它想去的地方。我们将在下一集视频中介绍一些实现计划的方法。
但是,在我结束这个之前,我想提醒你,学习这些东西的一个很好的方法就是练习,然后自己去尝试。有一个MATLAB的例子,使用导航工具箱称为实现SLAM与激光雷达扫描,建立一个环境使用激光雷达网格地图,不需要相对的里程表过程。从本质上说,环境中有足够的独特特征,每个姿态的激光雷达测量可以通过数据关联或特征匹配联系到其他过去的姿态。值得一试。如果你想了解更多关于这个例子的信息,我在下面提供了另一个视频的链接。
好的,那是我结束这个视频的地方。如果您不想错过任何其他未来的技术谈话视频,请不要忘记订阅此频道。并且您想查看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。谢谢观看,我下次见到你。
你也可以从以下列表中选择一个网站:
请选择表现最佳的中国网站(中文或英文)。MathWorks的其他国家网站并没有针对您所在位置的访问进行优化。