实际工程项目中是怎么用卡尔曼滤波的?

从知乎上转载的:

https://www.zhihu.com/question/358334095/answer/1009240518?utm_source=wechat_session&utm_medium=social&utm_oi=957369814709252096


先啰嗦一下在工程中卡尔曼滤波要解决的问题是什么。我们得到了2(或多个)个反馈同一件事的信息A和B,但不知道该相信哪个结果,所以简单的,将两个信息相加除以2(加权平均),得到一个结果0.5A+0.5B。但这个方法过于粗暴,不能反映出水平。现在知道了其中一个信息可靠度更好,而另一个可靠度不好,就要更相信好的信息,如,现在给可信度好的B更大的权重,得到0.2A+0.8B,这个结果会好于第一个。但仍然觉得low,因为A与B的参数是根据经验设置的,并不知道是否是最合理的,是否是最优化的。所以高级的,用优化的方法,根据A与B的高斯分布特征,去融合A和B信息,这个就是卡尔曼。所以,我们看到,要利用卡尔曼,需要不同的信息源(大于等于2个)。最常见的信息源是什么?就是我们根据系统模型或动力学模型计算出来的结果,可以通过仿真的形式得到。第二个或第三个信息是什么?在飞行器姿态估计,导航定位,目标跟踪(几个问题的本质一样,都是状态估计)的问题中,这个信息一般来自惯导或GPS或雷达等。有了2个信息数据,就可以根据Kalman的公式进行融合。下面举一个机器人运动估计的例子,来自《Probabilistic Robotics》。

首先假设你的机器人长这样(一个圆,比较简单),在二维笛卡尔坐标系中运动。

实际工程项目中是怎么用卡尔曼滤波的?
根据这个图,可以得到它的运动学模型
实际工程项目中是怎么用卡尔曼滤波的?
得到以上模型还不能直接用,这个模型有变量的乘积和三角函数,是个非线性模型,但要利用卡尔曼公式,需要满足EKF(实际工程应用中,我还没见过直接用KF的)的线性化条件。所以要将非线性的模型线性化。

实际工程项目中是怎么用卡尔曼滤波的?

到这一步,得到的Gt可以直接用了,可以得到状态的迭代形式:

实际工程项目中是怎么用卡尔曼滤波的?

然后EKF公式中,有一项

实际工程项目中是怎么用卡尔曼滤波的?

其中两个z,代表了2个信息,比如其中一个是通过动力学得到的机器人位置,另一个通过雷达得到的机器人位置。

通过以上的计算,会得到一个靠谱的结果。

Kalman的其它公式都是用优化理论去解算高斯函数的,在此不啰嗦了。