我正在为我的机器人实施蒙特卡罗定位,该机器人获得了环境地图及其起始位置和方向。我的做法如下:
现在,我为机器人的环境编写了一个模拟器,其本地化行为如下:http://www.youtube.com/watch?v=q7q3cqktwZI
我很担心机器人长时间迷路。如果将粒子添加到更广泛的区域,机器人就更容易迷路。
期待更好的表现。有什么建议吗?
最大的错误是你假设权重最高的粒子是你的后验状态。这与粒子滤波器的主要思想不符。
您使用里程计读数更新的粒子集是您的建议分布。通过仅考虑具有最高权重的粒子,您可以完全忽略此分布。如果您只是在整个状态空间中随机散布粒子,然后选取最能解释声纳数据的一个粒子,情况会是一样的。您仅依赖声纳读数,并且由于声纳数据非常嘈杂,您的估计非常糟糕。更好的方法是为每个粒子分配一个权重,对权重进行归一化,将每个粒子状态与其权重相乘,然后将它们相加以获得后验状态。
对于您的重新采样步骤,我建议删除预测状态周围的随机样本,因为它们会破坏您的建议分布。生成随机样本以便从故障中恢复是合法的,但这些样本应该分布在整个状态空间上,并且明确不围绕您当前的预测。