移动机器人的蒙特卡洛本地化



我正在为我的机器人实施蒙特卡洛本地化,该机器人的映射及其起点和方向。我的方法如下:

  1. 在给定位置周围均匀地创建500个颗粒
  2. 然后在每个步骤中:
    • 运动更新所有具有探测器的粒子(我当前的方法是newx = oldx odometryx(1 standardgaussianrandom)等)
  3. 使用声纳数据将重量分配给每个粒子(每个传感器概率是公式*= gaussianpdf(realeReading),其中高斯具有平均预测阅读)
  4. 以最大的概率作为位置返回粒子在此步骤
  5. 然后根据重量从旧粒子重采样9/10,并根据预测位置均匀地采样

现在,我为机器人的环境写了一个模拟器,这是该本地化的行为:http://www.youtube.com/watch?v=q7q7q3cqkktwzi

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

我希望表现更好。有建议吗?

最大的错误是,您假设重量最高的粒子是您的后状态。这与粒子过滤器的主要思想不同意。

您更新使用探针读数的粒子集是您的建议分布。通过考虑重量最高的粒子,您可以完全忽略此分布。如果您只是在整个状态空间中随机扩散粒子,然后将一个解释声纳数据解释最好的粒子,那将是相同的。您只依靠声纳读数,并且由于声纳数据非常嘈杂,您的估计非常糟糕。一种更好的方法是将重量分配给每个粒子,将重量归一化,将每个粒子状态乘以其重量,然后将它们汇总为以获得您的后状状态。

对于您的重新采样步骤,我建议在预测状态下删除您的提案分布,以删除围绕预测状态的随机样本。为了从失败中恢复,生成随机样本是合法的,但是这些样本应该分布在整个状态空间上,并且明确地不是围绕当前的预测。

最新更新