来自系列:自主导航
布莱恩·道格拉斯
该视频提出了对粒子过滤器的高级了解,并显示了如何在蒙特卡罗本地化中使用,以确定建筑物内部移动机器人的姿势。
我们将讨论为什么粒子滤波器比传统卡尔曼滤波器更适合解决这类问题,因为它能够处理非高斯概率分布。
在第一个视频中,我们谈论自主导航是什么以及如何应用于不同类型的自主车辆。在此视频中,我们将查看自主导航问题的一部分,并展示如何使用粒子过滤器估计移动机器人的位置和方向。我们将通过与Matlab示例所示,使用Monte Carlo本地化定位的Turtlebot。此示例模拟了在办公楼中移动的海龟,以测量环境并估算它的位置。如果您不熟悉粒子过滤器,则可能会令人困惑地达到为什么解决方案具有一堆蓝色点,每次步骤围绕,然后以某种方式会聚在土耳其的真实位置。过滤器在做什么以及这个看似随机的点数如何帮助我们确定机器人的位置?这就是我们要覆盖的东西,所以我希望你能坚持下去。我是布莱恩,欢迎来到Matlab技术谈话。
让我们建立本地化问题。我们有一个机器人,龟形机器人,它在一栋办公大楼里闲逛。机器人会得到一份建筑地图,所以它知道墙壁和家具的总体布局,但最初它并不知道自己在地图上的位置——它可能在任何地方。因此,问题是机器人需要使用它的传感器和运动模型来估计它的姿态,也就是确定它在建筑中的位置和方向。
该机器人具有激光乐传感器,返回到视野中的对象的距离。因此,如果传感器正在寻找一个角落和两个门,它可能会返回一个看起来像这样的点的点云。但是测量很吵,所以它实际上可能看起来像这样。现在我们可以将这种模式与环境的地图匹配并确定机器人的位置。
现在,除了嘈杂的测量外,机器人还有一种方法可以使用测量数据来致死其位置。致命的是使用过去位置和相对测量的未来位置,如速度和角速率计算。因此,如果您知道机器人面向北部并每秒移动1米,3秒后,您可以估计朝向何处北方的位置3米,您可以有一些不得不检查的情况。无需检查再次环境。Deafecrecking可以在较短的时间框架上使用很多成功,但由于相对测量中的噪声,随着时间的推移,误差的增长并且需要通过测量相对于环境的位置来校正。对于更深入的深入了解致命的,请签出传感器融合和跟踪视频编号3,如下所示,在那里我们将来自GPS的绝对测量与IMU的相对测量相结合。
所以我们有两种可能的方法来确定位置;我们有一个嘈杂的激光雷达传感器,可以感知我们可以与环境地图相比较的特征,我们有嘈杂的里程计数据,可以估计机器人是如何移动的。现在,如果您熟悉卡尔曼滤波器,您可能会认识到,将噪声测量与噪声过程模型混合正是它的用途。
如果你不熟悉卡尔曼滤波器,你可以通过看MATLAB关于它们的技术演讲系列来加快速度,我在下面的描述中给出了链接,但你不需要太多的经验来理解这个视频的其余部分。
Kalman滤波器的一个缺点对于我们来说将重要的是它期望概率分布成为高斯。因此,对于我们的问题,随机失眠噪声需要是高斯,并且激光雷达测量噪声需要是高斯的。两者都可能是,或者至少足够接近仍然使用卡尔曼过滤器。但重要的是,机器人估计状态的概率分布也必须是高斯,我们将在一下看到我们的本地化示例的情况绝对是不正确的。因此,我们需要一种可以处理非高斯概率分布的估计滤波器。这就是粒子过滤器的位置。
为了理解粒子过滤器是如何解决定位问题的,我们应该试着把自己想象成机器人,并弄清楚我们将如何使用激光雷达来确定我们在一个非常简单的地图上的位置。一开始,我们对自己在房间里的位置毫无头绪。我们可以说,同样有可能的是,我们在地图上的任何地方,面对着任何方向。现在,我们用激光雷达传感器测量场景并接收结果。看起来我们在看一堵墙,因为所有的测量值基本上都在一条线上,从测量值我们可以知道我们离墙有多远。仅凭这一点我们无法确定我们的确切位置因为这个房间里有很多墙,我们可能正对着其中的任何一面墙,或者沿着每面墙的任何地方。但我们可以看出,我们可能不是在看一个角落或门,我们可能不是在房间的中间,因为墙很近。
第一个测量限制了我们的位置和方向。然而,由于传感器有一些噪声和误差,我们可能会声称我们可以比测量状态更近或更远一些。因此,我们可以相应地扩展可能的位置,并说我们最有信心我们在这些位置中的一个。现在,我们不能肯定地说我们不是在房间的中间,因为有可能我们看到的是一个暂时的平面障碍,但地图上没有。这种情况发生的概率很低,但仍然是可能的。
因此,在第一次测量之后,我们可以说我们看起来像这样的概率分布。随着较大的黄色位置意味着更高的概率,较暗的位置是较低的概率。这已经是一个非常非高斯的分布,所以,当我们处理这样的本地化时,您可以看到我们如何让自己进入非高斯的情况。
好的,如此直观,它有意义的是,我们不能确定我们来自这个单一测量的地方。但是,让我们说这是我们实际在房间内的地方。再次,我们仍然只是看着这个扁平的无味墙。作为一个人,如果我们围绕查看不同的功能,我们可以通过删除我们沿途所看到的所有测量的位置来开始缩小我们所在的位置。所以,如果我们转向左眼看角落,然后继续转动并看到另一个角落,然后我们看到门,我们将能够使用我们的内存开始在那里我们在地图上的位置开始在地图上what we’ve seen, which are the lidar the measurements, and the estimate of how we moved through the environment - which is direction we turned and about how far we walked.
在这张地图上只有一个地方,像这样的运动会看到两个角,然后在一扇门处结束。所以这一定是我们走的路,这一定是我们现在所处的位置。
所以,这些都很直观,但我们如何为机器人编写这种理解代码呢?它是如何记住多次连续的测量数据,并随着时间的推移精确定位的呢?正如你所期望的,因为我已经告诉过你,一个流行的方法是用粒子过滤器。
我们将对粒子过滤器的工作原理有一个基本的了解。本节的目的是给你一些关于过滤器的直觉,而不是深入任何数学。如果您想了解有关过滤器的更多详细信息,我在描述中留下了一些很好的参考资料。好的,让我们开始吧。
记住,在开始时,机器人有一张房间的地图,但没有其他东西,因此机器人在地图上的任何位置和面对任何方向的概率都是相等的。因此,我们可以通过随机生成一些离散的姿势来近似概率分布,而不是试图用一些平滑定义的函数来捕捉这种概率。在这里,我将使用50种不同的姿势对x和y位置进行均匀随机化,并对方向进行均匀随机化。这捕获了整个地图上的均匀概率分布。
这些姿势或粒子中的每一个都保存在过滤器中作为状态的可能估计。粒子越多,它们代表真正的概率分布越近,但做所有计算所需的时间就越多。因此,在准确性和速度之间存在交易。对于这个思想练习,50个粒子将足够,但是您可能需要数百或数千个,具体取决于地图的大小和您试图代表的概率分布的形状。
现在,系统状态的一堆随机猜测看起来它似乎对我们很多很多,因为他们中的许多人显然都有错误。但我们可以开始消除一些错误的猜测,因为此时我们得到了激光乐节测量并返回,说出看起来像墙壁的模式。现在,过滤器可以逐个通过每个粒子并确定使用该地图,如果该姿势是真实的,将返回LIDAR传感器的返回。然后它可以比较这两个场景并确定粒子是真实系统状态的程度如何。场景较近,概率越高。例如,这种粒子会返回一个比我们所看到的近似靠近所说的场景,而是这个粒子。
我将放大正确概率高的粒子以便我们能更好地看到它们,我将缩小概率低的粒子。就像我们之前看到的在一次测量之后我们的概率分布不再是均匀的,而是向这些更可能的姿势倾斜。
现在,我们不希望在过滤器中保留所有低概率粒子,因为这将在不太可能的姿势上使用计算资源,我们也可以进入它们导致过滤器永远不会收敛的情况。因此,我们将根据新的概率分布重新采样粒子。这将在诸如其他地方更有可能和更少的粒子的姿势中放置更多的粒子。概率分布的这种随机离散重采样是为什么这种类型的定位也被称为蒙特卡罗本地化。
此时,机器人在房间里移动,它沿着我之前展示的圆形路径移动,它通过机载里程计估算了它的相对位置。所以机器人能够感知激光雷达的测量结果。我们可以将这个估计的运动应用到过滤器中的每一个粒子上。基本上,我们是在预测每一个可能的姿势,如果它们以与机器人相同的相对方式移动。
当然,我提到过,deadreckoning是一个有噪声的过程,所以我们在机器人的运动估计中存在一定程度的不确定性。因此,我们并不是用估计的运动精确地传播每个粒子,而是根据过程噪声添加额外的随机运动。有些粒子可能移动得快一些,有些慢一些,有些转得多一些,有些转得少一些。所以,如果过程噪声是非高斯的,粒子滤波器可以处理它,至少只要有足够的粒子来精确地表示分布。
现在,我们可以像以前一样一步。我们用LIDAR传感器测量场景,并弄清楚这些新粒子中最有可能产生类似的测量。机器人正在看一个角落,这很好,因为这在这个地图中是一个相对独特的功能。但它不会完全缩小它。你可以看到这个粒子正在看一个角落,这个粒子正在看一个不同的角落。所以,我们无法判断刚才是真正观察到的角落。再次,我将放大最可能的颗粒并收缩较少的颗粒。我们可以了解概率分布如何发生变化。现在,这是双模模式,其中有两个主要可能的位置,其中机器人可以是并且其他地方的概率较低。
再一次,我们可以根据此概率分布生成新的批次a姿势,从而进入下一代粒子。但我们可以开始变得更聪明一点。在前两代人中,我使用了50个粒子,这样我就可以准确地表示大而复杂的分布。然而,现在我们正在研究机器人的真实位置,分布也越来越窄,不需要那么多的粒子来完全代表它们。我们仍然可以使用50,但这只会降低过滤器的速度,可能不会增加太多的价值。因此,有一种自适应蒙特卡罗局部化(AMCL)的想法,它可以在每一代之后重新计算粒子的数量,这样就不会浪费计算资源。您必须小心粒子数量过少,因为过滤器可能对其解决方案过于自信,并歪曲真实的概率分布,从而导致其收敛到错误的姿势。所以,再一次,这里有一个交易。MATLAB TurtleBot示例使用了这种自适应蒙特卡罗定位,如果您想了解如何完成此调整大小的详细信息,下面有一个链接。
现在每一代都和以前一样。我们使用里程计对机器人的运动建模,将其应用到粒子上,进行另一种激光雷达测量,并确定哪些粒子最有可能。然后我们根据这个新的概率分布重新抽样,重新开始。这个迭代过程就是我们如何利用粒子随着时间的推移收敛到机器人的实际姿态上。即使在一个像这个矩形一样平凡的房间里。
现在如果我们重新审视这个视频的MATLAB的例子从一开始,它应该更多的意义,为什么这些蓝点在这里,他们是粒子,和他们为什么每次迭代移动,为什么粒子的数量随着时间的推移越来越小,因为它是收敛的。这是自适应蒙特卡罗定位方法中的粒子滤波器。
现在,我认为更好地了解这一切是如何工作的,以及如何在MATLAB中实现它的一个好方法是,只需使用这个示例。您可以更改一些过滤器参数,并查看其对解决方案的影响,还可以查看实现我们刚才讨论的每个想法的不同函数。然后,当你去学习它背后的数学知识时,你已经对过滤器的工作方式有了直观的感觉,希望数学变得更容易。
好吧,在这个视频中,我们只看过本地化,假设我们已经有一个我们可以信任的地图。但如果不是这种情况,怎么办?如果我们没有地图,或者环境不断变化怎么办?嗯,在下一个视频中,我们将介绍砰砰的问题。同时进行本地化和映射。
所以,如果您不想错过未来的技术谈话视频,请不要忘记订阅此频道。并且您想查看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。谢谢观看,我下次见到你。
你也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。