无迹卡尔曼滤波器
无迹卡尔曼滤波器(UKF)是让卡尔曼滤波器应对弯曲、非线性世界的另一种办法——但它不像扩展卡尔曼滤波器那样用数学把曲线压平,而是对曲线进行采样。其思路是:与其用一条直线去近似那些方程,不如把几个精心挑选的点直接送进真正的方程里走一遭,这往往更简单、也更准确。要想知道一个被抛出的球在有风时落在哪里,与其画一条与球的轨迹相切的直线,不如真扔几个测试球出去,学到的东西更多。
它的运作方式是这样的。滤波器当前的不确定性,形状像是围绕最佳猜测的一团模糊云雾。UKF 从这团云雾里挑出一小撮聪明而有代表性的点——称为西格玛点(sigma 点)——通常在中心放一个,再沿不确定性的每个方向各散开几个。接着,它把这每一个点都送进机器人真实的、未经改动的运动方程和传感器方程里,连同其中所有弯曲。看这些点最后落在哪里,它就量出新的中心(均值)和新的散布(协方差),再由此重建出更新后的云雾——既不用求斜率,也不需要雅可比。
由于喂进去的是货真价实的非线性方程,而不是一个压平的替身,UKF 通常比 EKF 更忠实地跟住陡峭的曲线,计算开销相当,而且不必手工推导导数。这种准确与便利,使它成为处理棘手系统的热门选择,比如航天器的姿态或无人机的剧烈机动。这个名字其实是发明者开的一个小玩笑,并无深意;真正要紧的是它核心处的西格玛点诀窍。
为了跟踪一颗翻滚卫星的姿态,UKF 会在当前猜测周围撒开比如十几个西格玛点,让每一个点都按真实的旋转方程向前转动,然后从中读出新的平均姿态,以及它有多不确定。
UKF 是通过把真实的测试点送过曲线来了解曲线的影响,而不是用一条切线去近似这条曲线。
西格玛点是按公式挑出的、固定且数量很少的一小撮——并非随机抽样——所以 UKF 保持着快速而可预测的特性,这一点不同于撒下大量随机样本的粒子滤波器。