我正在尝试使用卡尔曼滤波器进行方向检测。就像我在网上发现的大多数其他实现一样,我将使用陀螺仪和加速度计来测量俯仰和滚动,但我打算也添加地平线探测。这将给我一个关于俯仰和翻滚的二读。这意味着我将有两种方法来测量当前状态,加速度计和水平检测,同时陀螺仪将用于控制。
到目前为止,我已根据本教程分别对传感器数据和水平检测实施了过滤器:http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/
我必须修改卡尔曼滤波器的哪一部分才能在算法中选择预测状态,加速度计读数和水平检测读数之间的最佳读数?任何帮助,链接到论文或网站将不胜感激 在此先感谢您的帮助
答案 0 :(得分:6)
KF由两个并行组件组成: 1.估计的状态,AND 2.该估计的不确定性(具体而言,是国家组成部分的协方差矩阵)。
当组合2个状态估计时,标准方法采用加权平均值,权重是(共)方差的倒数。也就是说,2个估计值(较小的协方差)的权重比另一个更高。
因此,如果您尚未跟踪2个估算值的协方差,则需要执行此操作。
对于具有2个估计X'和X“的标量状态X,每个估计值将有一个方差:V'和V”,反转C'= 1 / V'和C“= 1 / V”。 (“确定性”C比方差V更容易使用。)
然后,该状态的MMSE估计(这是KF试图优化的)由下式给出:Xmmse =(X'/ V'+ X“/ V”)/(1 / V'+ 1 / V“ )。 [此时还有对V的相应更新,基于V'和V“。]
对于矢量状态,V将由协方差矩阵替换,并且除法将变为矩阵求逆。在这种情况下,直接跟踪反转C可能更容易:Xmmse =(C'+ C“)\(C'* X'+ C”* X“)[和相应的C更新], 其中“\”表示乘以第一因子的倒数C'+ C“。
我希望这会有所帮助。
[我为这里糟糕的格式道歉。 Stack Overflow推断代数表达式是代码,并且需要将它们格式化为代码才能让我回答。他们不是,所以我不能。]