粒子滤波概念
1.1 机器人定位问题
关于机器人定位,有三大问题,它们分别是:
(1)“全局定位”:指初始位置未知,机器人靠自身运动确定自己在地图中的位姿。
(2)“位姿跟踪”:指已知自身位姿或者已经通过“全局定位”得到了一个较好的位姿估计,在后续运动时补偿精度较差的运动控制误差;
(3)“绑架劫持”:指机器人在已知自身位姿的情况下,得到了一个错误的位姿信息或者外界将其放到另外一个位姿,而里程计信息给出了错误的信息甚至没有给出控制信息。
1.2 粒子滤波步骤(可结合2中例题)
(1)初始状态:用大量粒子模拟运动状态,使粒子在空间内均匀分布;
(2)预测阶段:根据状态转移方程,将每一个粒子带入,得到一个预测粒子;
(3)校正阶段:对预测粒子进行评价(计算权重),越接近于真实状态的粒子,其权重越大;
(4)重采样:根据粒子权重对粒子进行筛选,筛选过程中,既要大量保留权重大的粒子,又要有一小部分权重小的粒子;
(5)滤波:将重采样后的粒子带入状态转移方程得到新的预测粒子,即步骤(2)。
代码分析
虽然选修课选修了Matlab, 但是自己Matlab工程代码到底写了太少, 特别是涉及维度转换以及数学相关的玩的都不是很好, 因此这次看这份代码学到了很多基础入门的写法, 记录一下:
- 变量关系:
- X为对象的真实位置, Z是观测到对象的观测位置(在真实的坐标上加上了噪声),P是粒子群,Pcenter是所有粒子的几何中心
- 变量维度的确定: 行为一维,列为二维。其中X(1, :)表示X坐标, X(2, :)表示Y坐标。其中列的T表示多少测量数量,测量时间。
- err大小也是(2, T), 但是(第一行为粒子与真实路径误差 第二行为测量与真实路径误差)
- 权重更新方式: 权重 (权重与距离的关系 为 均值是0,方差是sqrt®的高斯分布曲线)
- 代码组成部分:
- 参数设置
- 初始化粒子群
- 开始运动
- 绘制轨迹
- 绘制误差图
1 | %粒子滤波(定位运动轨迹) |
用到的函数记录
Matlab中的norm
demo代码中有关norm的运用如下,
1 | %% 初始化粒子群 |
其中没有特别指出是啥范数, 因此可以通过help norm
来查看一下关于norm的使用介绍.
1 | >> help norm |
可以得到, norm(X)的效果默认是取2-范数的。
同时, norm函数既可以取向量范数又可以取矩阵范数:
1、如果A为矩阵
-
n=norm(A) 《Simulink与信号处理》
返回A的最大奇异值,即max(svd(A))
-
n=norm(A,p)
根据p的不同,返回不同的值
p | 返回值 |
---|---|
1 | 返回A中最大一列和,即max(sum(abs(A))) |
2 | 返回A的最大奇异值,和n=norm(A)用法一样 |
inf | 返回A中最大一行和,即max(sum(abs(A’))) |
‘fro’ | A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A’*A))) |
2、如果A为向量
-
norm(A,p)
返回向量A的p范数。即返回 sum(abs(A).p)(1/p),对任意 1<p<+∞.
-
norm(A)
返回向量A的2范数,即等价于norm(A,2)。
-
norm(A,inf)
返回max(abs(A))
-
norm(A,-inf)
返回min(abs(A))
Matlab中的sum
sum(A, 1)
: 对一维求和, 如果A为二维数组, 则按列求和sum(A, 2)
: 对二维求和, 如果A为二维数组, 则按行求和
Matlab中的wgn
1 | >> help wgn |
Author: Mrli
Link: https://nymrli.top/2020/10/27/粒子滤波Matlab代码解读/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.