找到关键点后如何求出新的状态
新状态的求解公式如下图所示,需要注意的是:
- Xk+1|k
权重wi在i==0时w0=λλ+na,在i!=0时w0=12(λ+na)
多传感器融合
下面,将通过lidar、radar跟踪小车的例子,讲解UKF如何应用于小车状态跟踪。相关传感器信息及大体步骤可见扩展卡尔曼滤波EKF与多传感器融合。
CTRV模型
EKF文章中使用了CV(constant velocity)模型,本文将使用CTRV(constant turn rate and velocity magnitude)模型。其状态变量如下图所示。
因假定turn rate、velocity不变,其Process noise包含加速度与角加速度为:
νk=[νa,kνψ¨,k]
利用x˙
及其对时间的积分xk+1=∫x˙dt可得Process模型为:
xk+1=xk+⎡⎣⎢⎢⎢⎢⎢⎢⎢vkψk˙(sin(ψk+ψk˙Δt)−sin(ψk))vkψk˙(−cos(ψk+ψk˙Δt)+cos(ψk))0ψk˙Δt0⎤⎦⎥⎥⎥⎥⎥⎥⎥
考虑Process noise为:
xk+1=xk+⎡⎣⎢⎢⎢⎢⎢⎢⎢vkψk˙(sin(ψk+ψk˙Δt)−sin(ψk))vkψk˙(−cos(ψk+ψk˙Δt)+cos(ψk))0ψk˙Δt0⎤⎦⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢12νa,kcos(ψk)Δt212νa,ksin(ψk)Δt2νa,kΔt12νψ¨,kΔt2νψ¨,kΔt⎤⎦⎥⎥⎥⎥⎥⎥⎥
RoadMap
UKF的RoadMap如上图所示,核心思想在前部分已介绍过,其算法是:
- 初始化系统状态xk,Pk
根据状态xk,Pk生成Sigma点Xk
根据process model预测未来的Sigma点Xk+1|k
根据预测的Sigma点Xk+1|k生成状态预测xk+1|k,Pk+1|k
当测量值到来时,将预测的Sigma点Xk+1|k转换成预测测量值Zk+1|k
根据预测测量值Zk+1|k与真实测量值zk+1的差值更新得到系统状态xk+1|k+1,Pk+1|k+1
同时,有几个部分需要强调下。
- 数据增广
- Update State
- Noise Level与NIS
数据增广
如上图,在process预测时需要对xk
进行增广,原因是process模型中包含了噪声的非线性关系f(xk,νk)。反之,在measurement model中因为噪声是线性关系的所以不需要进行数据增广。
增广后x,P
变化如下,
x=⎡⎣⎢⎢⎢⎢⎢⎢pxpyvψψ˙⎤⎦⎥⎥⎥⎥⎥⎥⇒xa=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢pxpyvψψ˙νaνψ¨⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
Pa=[P00Q]Q=[ν2a00ν2ψ¨]
Update State
State的更新公式如下图所示:
Noise Level与NIS
UKF中牵涉的噪音有两类:
- Process Noise:νa,νψ¨
- ,需要自己设定
- Measurement Noise:lidar、radar的噪音水平,由厂家提供
自己设定调整的方法有NIS,NIS的分布服从chi-square分布,调整合适的噪音水平使其符合规定的chi-square分布即可。
示例
本文采用与扩展卡尔曼滤波EKF与多传感器融合相同的数据集,结果如下。
NIS验证结果如下:
总体跟踪情况如下:
UKF与EKF的RMSE对比如下,UKF明显占优:
| 方法 | X | Y | VX | VY |
|---|---|---|---|---|
| EKF | 0.0973 | 0.0855 | 0.4513 | 0.4399 |
| UKF | 0.0661 | 0.0827 | 0.3323 | 0.2146 |
相关代码可参考:YoungGer的Github