定位算法—MCL蒙特卡洛滤波

文摘   2024-11-07 08:50   中国  

之前的文章介绍过卡尔曼滤波算法进行定位,我们知道kalman算法适合用于线性的高斯分布的状态环境中,我们也介绍了EKF,来解决在非高斯和非线性环境下的机器人定位算法。


但是他们在现实应用中存在计算量,内存消耗上不是很高效。这就引出了MCL算法。


粒子滤波很粗浅的说就是一开始在地图空间很均匀的撒一把粒子,然后通过获取机器人的motion来移动粒子,比如机器人向前移动了一米,所有的粒子也就向前移动一米,不管现在这个粒子的位置对不对。


使用每个粒子所处位置模拟一个传感器信息跟观察到的传感器信息(一般是激光)作对比,从而赋给每个粒子一个概率。之后根据生成的概率来重新生成粒子,概率越高的生成的概率越大。


这样的迭代之后,所有的粒子会慢慢地收敛到一起,机器人的确切位置也就被推算出来了



MCL VS EKF


MCL的计算步骤:


1. Randomly generate a bunch of particles


Particles can have position, heading, and/or whatever other state variable you need to estimate. Each has a weight (probability) indicating how likely it matches the actual state of the system. Initialize each with the same weight.


2. Predict next state of the particles


Move the particles based on how you predict the real system is behaving.


3. Update


Update the weighting of the particles based on the measurement. Particles that closely match the measurements are weighted higher than particles which don't match the measurements very well.


4. Resample


Discard highly improbable particle and replace them with copies of the more probable particles.


5. Compute Estimate


Optionally, compute weighted mean and covariance of the set of particles to get a state estimate.


粒子滤波的基本步骤为上面所述的5步,其本质是使用一组有限的加权随机样本(粒子)来近似表征任意状态的后验概率密度。


粒子滤波的优势在于对复杂问题的求解上,比如高度的非线性、非高斯动态系统的状态递推估计或概率推理问题。


伪代码:



具体分析下这5步:


第一步:随机生成M个粒子(这些粒子都是有算计的方向和位置)



第四步:重采样,从所有粒子中根据新的权重值获取M个粒子。


之后不断重复上面的4步来实现定位的效果。


通过一个实例来感觉下:



a)图, 我们看到机器人初始在一个门的位置,但是这时候机器人并不知道它自己在哪,这时候我们初始化所有的粒子,并且所有粒子的权重都是一样的。


b)图,这时候机器人通过传感器得知面前是一个门,这时候可以看到和门比较近的粒子的权重都提高了。


c)图,进行重采样之后,机器人移动后,我们可以看到采样后的粒子都集中在原来靠近门的这些粒子点。就是图中黑色密集的位置。



继续看D)图,这时候机器人重新感知,得知面前还是一个门,这时候,原来采样的靠近门的粒子权重变大。从图中已经看到主要的采样点已经集中在第二个门的位置了,机器人现在就知道自己的位置是在第二个门了。


之后在e)图中,冲采样,再次移动机器人,就可以知道机器人这次移动到的位置在中间了。


最后看下实例图,感受下粒子滤波的定位:



重采样的方式有很多,计算权重的方式也是,这里就不多介绍了,可以google!!


文章转载自:https://zhuanlan.zhihu.com/p/70468989

本文仅做学术分享,如有侵权,请联系删文。

       

新机器视觉
一个值得关注的AI视觉技术公众号,主要涉及人工智能领域机器视觉、计算机视觉、机器学习、深度学习等前沿知识干货和资源!致力于为您提供切实可行的AI学习线路。
 最新文章