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