简述:
每一个粒子代表一个机器人当前位置的一个估计值,走一步后,运动u使每个粒子得到自己的新预测位置,每个预测位置与已知地图的点构建预测观察值,预测观察值和实际观察值的误差值 在上一步计算的协方差中就得到了这个粒子的权重。 所有粒子位置的加权平均就是当前位置估计值,协方差的更新是通过对所有粒子与估计位置的加权离差平方和SSD
:
根据权重再重新采样?思路就是把权重大的粒子切分成很多个最小单位的粒子
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 19 10:30:20 2018
@author: sc
"""
import numpy as np
import math
import matplotlib.pyplot as plt
dt=0.1
NP=100
NTh=NP/2
Q=np.diag([0.1])**2
Qsim=np.diag([0.2])**2
MAX_RANGE=20
def motion_model(x,u):
B=np.matrix([[dt*math.cos(x[2,0]),0.0],
[dt*math.sin(x[2,0]),0.0],
[0.0,dt],
[1.0,0.0]])
x=x+B.dot(u)
return x
def pf_filter(xEst,covEst,px,pw,z,u):
for i in range(NP):
pf=motion