2014-01-21 38 views
0

我执行的Monte-Carlo定位为我的机器人,它被赋予地图的环境和它的起始位置和方向。我的方法如下:蒙特卡洛定位的移动机器人

  1. 一致在每一步产生围绕给定的位置500米的颗粒
  2. 然后:
    • 运动更新所有与里程计的颗粒(我的当前方法是下一页末= oldX + odometryX(1 + standardGaussianRandom)等)
    • 使用声纳数据(公式为每个传感器概率* = gaussianPDF(realReading)其中高斯具有平均predictedReading)
    • 返回的粒子与最大概率作为升分配权重给每个粒子ocation在该步骤
    • 然后新粒子的9/10从旧的根据权重和1/10围绕预测位置

均匀采样的再采样现在,我写一个模拟器机器人的环境,这里是这个本地化如何表现:http://www.youtube.com/watch?v=q7q3cqktwZI

我非常害怕,在较长的时间内机器人可能会迷路。如果将粒子添加到更广的区域,机器人会更容易丢失。

我期待更好的表现。有什么建议?

+0

请不要在[多个堆栈交换站点](http://robotics.stackexchange.com/q/2337/37)上提出同样的问题。如果您不小心问错了网站,可以将其迁移到正确的网站。 –

+0

将其迁移到机器人 – Neo

回答

5

最大的错误是,你认为权重最高的粒子是你的后路状态。这不符合粒子滤波器的主要思想。

设定你的里程计读数更新粒子的就是你的建议分布。通过考虑最高权重的粒子,你完全忽略了这种分布。如果你只是在整个状态空间中随机传播粒子,然后用解释声纳数据的一个粒子最好,那也是一样的。你只能依靠声纳阅读,因为声纳数据非常嘈杂,你的估计非常糟糕。更好的方法是给每个粒子分配一个权重,对权重进行归一化,将每个粒子状态乘以它的权重并将它们相加得到你的后验状态。

对于您的resample步骤,我建议删除围绕预测状态的随机样本,因为它们会破坏您的提案分布。生成随机样本以从失败中恢复是合法的,但这些样本应该分布在整个状态空间中,并且明确地不在当前的预测范围内。

+0

您好!你能看看我的问题和答案吗? http://robotics.stackexchange.com/questions/11685/markov-localization-using-control-as-an-input – Fabi