Kalman Filter
本质:线性滤波算法(只适用于线性且满足高斯分布的系统!!!)
核心思想:根据上一时刻(状态)的“预测量”和“预测误差”,以及当前时刻(状态)的“观测量(测量量)”和“测量误差”,来对当前的“真实值”进行最优估计,计算得到当前的“最优量”。
突出观点:计算考虑“误差”,且分为“预测误差”和“测量误差”,同时误差独立存在,始终不受测量数据的影响。
举个例子:
在航海中,船长通常以前一时刻的船位为基准,根据航向、船速、和海流等多种因素推算下一个船位(预测量),但是并不能轻易认为当前船位就一定在推算的船位上,还要选择适当的方法,通过仪器的到另一个推算的船位(测量量)。观测和推算的这两个船位一般不重合,需要通过分析和判断选择一个可靠的船位,作为当前的“真实”船位。
描述数学化:
公式化:
简单场景实践:
实践:
https://github.com/GengMingjin2/Learning_Algorithm/tree/master/EKF/KF
Extend Kalman Filter:
本质:KF的非线性扩展,线性滤波算法(非线性的高斯分布系统!!!)
(一个很优秀的course:https://simondlevy.academic.wlu.edu/kalman-tutorial/)
图片中的公式在表达上全部都是按照常规偏导的方式表达,而在真实的应用场景中,更加一般的表达是使用Joccobi矩阵来表达,而其中的每一项都是提前推导完毕后才应用到代码中的,这一点非常重要。
同时在进行泰勒展开时,上述表达的EKF算法中仅仅在起始点进行了一次线性近似,后续的迭代过程中不再进行线性近似了(这也是为什么最基础的EKF算法的误差比其他几种KF改进算法的误差大的原因,毕竟这仅有的一次线性引入的误差会一直累计下去不断扩大~)