AMCL定位算法学习个人总结1

您所在的位置:网站首页 ros定位算法只有amcl AMCL定位算法学习个人总结1

AMCL定位算法学习个人总结1

2023-07-29 04:09| 来源: 网络整理| 查看: 265

为了实现未来自己能够熟练使用、编写SLAM技术及程序,一切要先从打好基础开始,仰望星空,脚踏实地。正要目前学习《概率机器人》也有一段时间了,通过对ROS中的AMCL算法进行实际应用与程序解读,加深对已学知识的理解。

前言 AMCL全称是adaptive (or KLD-sampling) Monte Carlo localization,自适应蒙特卡洛定位,该方法利用粒子滤波对机器人在已建好的二维地图进行定位。本章之对其运用到的数学知识进行整理,暂不对代码实现方法进行详细解读。在详细介绍该方法前,需要 “递归状态估计” 这部分知识需要进行深刻理解,该部分知识对应了 《概率机器人》第二章 内容。

在机器人及其环境之间存在两种基本的交互类型:机器人通过执行机构影响环境的状态,同时它通过传感器收集有关状态的信息。 ——《概率机器人》

这句话我看来几乎是《概率机器人》这本书中最关键的一句话,它是后期讲解数学模型的一个重要前提。下面有三个重要的名词也需要掌握:

状态转移概率 p ( x t ∣ x t − 1 , u t ) p\left( {{{\bf{x}}_t}|{{\bf{x}}_{t - 1}},{{\bf{u}}_t}} \right) p(xt​∣xt−1​,ut​): 状态转移分布描述状态如何随时间变化的特征,可能作为机器人控制的效果。 测量概率 p ( z t ∣ x t ) p\left( {{{\bf{z}}_t}|{{\bf{x}}_t}} \right) p(zt​∣xt​): 测量分布描述测量如何由状态控制的特征。 置信度 b e l ( x t ) = ( x t ∣ z 1 : t , u 1 : t ) bel\left( {{{\bf{x}}_t}} \right) = \left( {{{\bf{x}}_t}|{{\bf{z}}_{1:t}},{{\bf{u}}_{1:t}}} \right) bel(xt​)=(xt​∣z1:t​,u1:t​) 机器人的置信度是对给定所有过去的传感器测量和所有过去控制的环境状态(包括机器人的状态)的一个后验分布。

在掌握上述的概念后,必须掌握的一个算法:贝叶斯滤波(Bayes filter)算法,该算法几乎是后期定位算法的一个核心思路,它的伪代码如下: Algorithm Bayes_filter(bel( x t − 1 {{{\bf{x}}_{t - 1}}} xt−1​ ), u t {{\bf{u}}_t} ut​, z t {{{\bf{z}}_t}} zt​): for all x t {{{\bf{x}}_{t}}} xt​ do b e l ‾ ( x t ) = ∫ p ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 \overline {bel} \left( {{{\bf{x}}_t}} \right) = \int {p\left( {{{\bf{x}}_t}|{{\bf{u}}_t},{{\bf{x}}_{t - 1}}} \right)} bel\left( {{{\bf{x}}_{t - 1}}} \right)d{{\bf{x}}_{t - 1}} bel(xt​)=∫p(xt​∣ut​,xt−1​)bel(xt−1​)dxt−1​ b e l ( x t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) bel\left( {{{\bf{x}}_t}} \right) = \eta p\left( {{{\bf{z}}_t}|{{\bf{x}}_t}} \right)\overline {bel} \left( {{{\bf{x}}_t}} \right) bel(xt​)=ηp(zt​∣xt​)bel(xt​) endfor return b e l ( x t ) bel\left( {{{\bf{x}}_t}} \right) bel(xt​) ——《概率机器人》 我对于这部分算法的理解是该算法通过前一时刻对现在的预测乘上这一时刻对外界的检测等于现在这一时刻的状态,其中第三行叫作控制更新或预报,第四行叫作测量更新。 (这段话有点过于学术化了,直白的讲现在的状态等于过去对现在预测的状态乘上测量的情况)

粒子滤波

贝叶斯滤波不是一个实际的算法,不能用数字计算机实现,所以概率算法使用可处理的近似。 ——《概率机器人》

这里“可处理的近似”算法在《概率机器人》中第三章第四章都有讲,而由于AMCL算法为自适应蒙特卡洛算法,其算法的核心思路是粒子滤波算法,因此对应《概率机器人》第四章第三节内容,本博客先简单讲解粒子滤波算法结构,再通过将粒子滤波与蒙特卡洛算法一一对应进行实例介绍。

粒子滤波(particle filter)是贝叶斯滤波的一种非参数体现,主要思想是用一系列从后验得到的随机状态采样表示后验,我的理解是相当于起初会有有限个不同的样本点,假定他们的位置是是服从其状态更新或预测概率的,计算每个样本在当前时刻的测量概率,根据每个点的测量概率,从中在挑选一定数量的样本点,通过展现这一群点的分布情况来描述其当前时刻的置信度,其算法伪代码如下:

Algorithm Particle_filter( χ t − 1 , u t , z t {\chi _{t - 1}},{{\bf{u}}_t},{{\bf{z}}_t} χt−1​,ut​,zt​): χ t ‾ = χ t = ∅ { \overline {{\chi _t}} = {\chi _t} = \emptyset } χt​​=χt​=∅ for m=1 to M do sample x t [ m ] ∼ p ( x t ∣ u t , x t − 1 [ m ] ) {\bf{x}}_t^{\left[ m \right]} \sim p\left( {{{\bf{x}}_t}|{{\bf{u}}_t},{\bf{x}}_{t - 1}^{\left[ m \right]}} \right) xt[m]​∼p(xt​∣ut​,xt−1[m]​) w t [ m ] = p ( z t ∣ x t [ m ] ) w_t^{\left[ m \right]} = p\left( {{{\bf{z}}_t}|{\bf{x}}_t^{\left[ m \right]}} \right) wt[m]​=p(zt​∣xt[m]​) χ t ‾ = χ t ‾ + ⟨ x t [ m ] , w t [ m ] ⟩ {\overline {{\chi _t}} = \overline {{\chi _t}} + \left\langle {{\bf{x}}_t^{\left[ m \right]},w_t^{\left[ m \right]}} \right\rangle } χt​​=χt​​+⟨xt[m]​,wt[m]​⟩ endfor for m=1 to M do draw i with probability ∝ w t [ i ] { \propto w_t^{\left[ i \right]} } ∝wt[i]​ add x t [ i ] {{\bf{x}}_t^{\left[ i \right]}} xt[i]​ to χ t {\chi _{t }} χt​ endfor return χ t {\chi _{t }} χt​ 其中 χ t : = x t [ 1 ] , x t [ 2 ] , x t [ 3 ] , ⋯   , x t [ M ] {\chi _t}: = {\bf{x}}_t^{\left[ 1 \right]},{\bf{x}}_t^{\left[ 2 \right]},{\bf{x}}_t^{\left[ 3 \right]}, \cdots ,{\bf{x}}_t^{\left[ M \right]} χt​:=xt[1]​,xt[2]​,xt[3]​,⋯,xt[M]​,状态预测部分简单的说是第一个for循环,而测量更新部分是第二个for循环,算法输入的部分包括前一个时刻的粒子集、当前的控制及测量,输出是当前时刻的粒子集。其推导过程书上有些,程序第四行sample x t [ m ] ∼ p ( x t ∣ u t , x t − 1 [ m ] ) {\bf{x}}_t^{\left[ m \right]} \sim p\left( {{{\bf{x}}_t}|{{\bf{u}}_t},{\bf{x}}_{t - 1}^{\left[ m \right]}} \right) xt[m]​∼p(xt​∣ut​,xt−1[m]​),这里 x t [ m ] = g ( x t − 1 [ m ] ) {\bf{x}}_t^{\left[ m \right]} = g\left( {{\bf{x}}_{t - 1}^{\left[ m \right]}} \right) xt[m]​=g(xt−1[m]​),而函数g相当于时机器人自身的控制函数。 3. MCL算法 由于粒子滤波算法在机器人定位场景中的实际应用就是MCL(蒙特卡洛)算法,因此直接给出其伪代码: Algorithm MCL( χ t − 1 , u t , z t , m {\chi _{t - 1}},{{\bf{u}}_t},{{\bf{z}}_t},{m} χt−1​,ut​,zt​,m): χ t ‾ = χ t = ∅ { \overline {{\chi _t}} = {\chi _t} = \emptyset } χt​​=χt​=∅ for m=1 to M do x t [ m ] = s a m p l e _ m o t i o n _ m o d e l ( u t , x t − 1 [ m ] ) {\bf{x}}_t^{\left[ m \right]} = sample\_motion\_model\left( {{{\bf{u}}_t},{\bf{x}}_{t - 1}^{\left[ m \right]}} \right) xt[m]​=sample_motion_model(ut​,xt−1[m]​) w t [ m ] = m e a s u r e m e n t _ m o d e l ( z t , x t [ m ] , m ) w_t^{\left[ m \right]} = measurement\_model\left( {{{\bf{z}}_t},{\bf{x}}_t^{\left[ m \right]},m} \right) wt[m]​=measurement_model(zt​,xt[m]​,m) χ t ‾ = χ t ‾ + ⟨ x t [ m ] , w t [ m ] ⟩ {\overline {{\chi _t}} = \overline {{\chi _t}} + \left\langle {{\bf{x}}_t^{\left[ m \right]},w_t^{\left[ m \right]}} \right\rangle } χt​​=χt​​+⟨xt[m]​,wt[m]​⟩ endfor for m=1 to M do draw i with probability ∝ w t [ i ] { \propto w_t^{\left[ i \right]} } ∝wt[i]​ add x t [ i ] {{\bf{x}}_t^{\left[ i \right]}} xt[i]​ to χ t {\chi _{t }} χt​ endfor return χ t {\chi _{t }} χt​ 其中m代表输入的地图,而sample_motion_model()函数也就是粒子滤波中提到的g()函数,measurement_model()函数计算的就是 p ( z t ∣ x t [ m ] , m ) p\left( {{{\bf{z}}_t}|{\bf{x}}_t^{\left[ m \right]},m} \right) p(zt​∣xt[m]​,m),基本符合了粒子滤波算法的形式,并且也展现了贝叶斯滤波的思想。至于其自适应体现,在《概率机器人》中有进一步表现。 4. 状态转移模型和测量模型 AMCL算法中的状态转移模型和测量模型分别对应《概率机器人》第五章“机器人运动”和第六章“机器人感知”两章内容,细节可以参照书上的内容,这里仅仅对ROS AMCL算法中用到的模型进行简单描述,这部分主要是分析amcl_node.cpp程序得到的,该程序中有一个AmclNode::AmclNode()构造函数,该构造函数主要用于实现为AMCL算法参数调参的功能,相当于可以直接利用roslaunch直接对amcl_node.cpp程序进行手动调参而不需要重新编译,是一个相当实用的一个功能,在代码其中几行为:

std::string tmp_model_type; private_nh_.param("laser_model_type",tmp_model_type,std::string("likelihood_field")); private_nh_.param("odom_model_type",tmp_model_type,std::string("diff"));

由代码可以看出,首先AMCL算法中的状态转移模型采用的是《概率机器人》第五章第四节提到的“里程计运动模型”,这里仅仅是区分了差速移动和万向移动。 其次测量模型在最新一版的AMCL算法中默认的采用测距仪的似然域模型,而在算法中还给出另外两种模型,一个是测距仪的波束波形(beam),另一个我还没查到,名字是likelihood_field_prob,猜测与似然域有一定关系。根据《概率机器人》给出的这几种模型的伪代码,也就很好的解释了为什么AMCL算法中会有大量手动设置的参数,同时也解释了这些参数在伪代码中的位置和意义。我建议各位看官有精力的话可以看看这几个模型,前期可以用matlab简单上手写一写代码,这对伪代码的理解启到很好的帮助。

最后简单的总结一下AMCL定位算法就是粒子滤波算法在定位需求中的实际应用,而粒子滤波算法则是贝叶斯滤波算法的计算机化近似显示。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3