我正在为地面机器人实现ATLAS SLAM框架,使用EKF Slam绘制局部地图并使用线段特征。线段要素可以抽象为它们各自的线[d,α],其中dα代表线的距离角表示中的距离和角度。

在给定的框架中,存在一个局部地图匹配步骤,在该步骤中将匹配局部地图的线,并且需要2条线之间的距离度量。文献中建议使用马哈拉诺比斯距离,但是严格来说,马哈拉诺比斯距离是在单个测量值和一个分布之间,而不是在两个分布之间。 [d1,α1]和第2行带有协方差矩阵的S1

在塞巴斯蒂安·特伦(Sebastian Thrun)的《概率机器人》一书中的EKF算法中,在特征更新步骤中进行了计算,看起来像将新的测量值和现有的测量值相乘以得出结果协方差矩阵,然后在马氏距离计算中使用逆。

这与

Mahalanobis_Distance = [d2-d1,α2-α1] * Inverse(S1*S2) * [d2-d1,α2-α1]'


正确吗?

#1 楼

有很多方法可以测量两个分布之间的统计差异。对于您的情况,您可以考虑Bhattacharyya距离。从该页面开始,Bhattacharyya距离$ D_B $为

$$
$$

其中$ \ boldsymbol \ mu_i $和$ \ boldsymbol \ Sigma_i $是分布的均值和协方差,以及

$$
\ boldsymbol \ Sigma = {\ boldsymbol \ Sigma_1 + \ boldsymbol \ Sigma_2 \ over 2}。
$$

我也会喜欢发出警告。在计算角度之间的差异时(例如$ \ alpha_1-\ alpha_2 $),您必须注意包装问题。例如,对于$ \ alpha_1 = -179 $ deg和$ \ alpha_2 = 179 $ deg,它们的区别不是$(-179)-(179)= -358 $ deg,而是$ 2 $ deg。如果仅关注统计差异的相对值(例如“最小”),则考虑使用两个角度之间的圆距离($ c $),即

$ $
c = \ frac {1-\ cos(\ alpha_1-\ alpha_2)} {2}。
$$

这总是返回值$ c \ in [ 0,1] $,其中$ c = 1 $是两个角度相隔180度时的结果。因此,如果您使用Bhattacharyya距离,则$ \ boldsymbol {\ mu} $的角度部分将是一个圆形距离。但是,如果您正在看线,则将线旋转180度会将其恢复为原始方向!这是因为线的方向是轴向数据的示例,并且对于+/- 180度的旋转不变。在这种情况下,只需将上述圆形距离的角度加倍即可;即,

$$
c = \ frac {1-\ cos [2(\ alpha_1-\ alpha_2)]} {2}。
$$

现在当线分开90度时,$ c = 1 $!

祝你好运!

#2 楼

马氏距离是有用的,因为它是对两点的“概率接近度”的度量。

例如,如果我有一个均值为零且方差为100的高斯PDF,则很有可能会生成一个值约为100的样本。($(100-0)/ 100 = 1 $) 。但是,具有均值100和方差1的高斯PDF更有可能是生成100附近样本的PDF。($(100-100)/ 1 = 0 $)。因此,我们认为第二个点“更接近”。

因此,在确定谁生成样本100时,我们需要一个度量来确定哪个PDF是“更好”的选择。

因此,在您的情况下,取决于随机过程产生的数量。例如,如果您假设$ d $和$ a $被测量,但是由于独立的随机噪声而损坏,那么是的,您对马氏距离的定义是正确的。

$ d $和$ a $上的噪声是独立的,因为它们可能不是独立测量的。但是,许多算法都做出这样的假设。请确定您要这么做。

#3 楼

这可能不是答案,但请查阅本书第126页的“用雷达进行机器人导航和制图”。他们讨论马氏距离远胜于概率机器人中的描述。此外,他们提到为什么这种方法(也称为最近邻居(NN))在某些情况下不是很好的解决方案,因此提出了另一种解决方案。