卡尔曼 陀螺仪、倾角传感器融合 C代码 一段语句看不懂

2014-05-078929
AI 快速预览详细 收起
本文详细解析了卡尔曼滤波器在陀螺仪和倾角传感器数据融合中的应用。重点解释了协方差矩阵的更新过程,特别是Pdot = A*P + P*A' + Q的计算及其在C代码中的实现。通过P[0][0] += Pdot[0] * dt;来更新协方差矩阵,确保角度估计的准确性。

  1. void stateUpdate(const float q_m){
  2.         float q;
  3.         float Pdot[4];
  4.         /* Unbias our gyro */
  5.         q = q_m - q_bias;
  6.         /*
  7.          * Compute the derivative of the covariance matrix
  8.          * (equation 22-1)
  9.          *        Pdot = A*P + P*A' + Q //????????????
  10.          *
  11.          */
  12.         Pdot[0] = Q_angle - P[0][1] - P[1][0];        /* 0,0 */
  13.         Pdot[1] = - P[1][1];                        /* 0,1 */
  14.         Pdot[2] = - P[1][1];                         /* 1,0 */
  15.         Pdot[3] = Q_gyro;                        /* 1,1 */
  16.         /* Store our unbias gyro estimate */
  17.         rate = q;
  18.         /*
  19.          * Update our angle estimate
  20.          * angle += angle_dot * dt
  21.          *       += (gyro - gyro_bias) * dt
  22.          *       += q * dt
  23.          */
  24.         angle += q * dt;
  25.         /* Update the covariance matrix */
  26.         P[0][0] += Pdot[0] * dt;
  27.         P[0][1] += Pdot[1] * dt;
  28.         P[1][0] += Pdot[2] * dt;
  29.         P[1][1] += Pdot[3] * dt;
  30. }
复制代码


上面一串问号开始到最后,不太懂。

卡尔曼 陀螺仪、倾角传感器融合 C代码 一段语句看不懂图1

卡尔曼公式 (原文件名:QQ截图未命名4.png)
不是应该向上边1.10式那样么,那样直接就能算出协方差啊,怎么程序中还要先算出Pdot = A*P + P*A' + Q ,再P[0][0] += Pdot[0] * dt;来更新协方差?angle += q * dt;中的dt是积分求角度,可P[0][0] += Pdot[0] * dt;不知道怎么理解了。P.S.从“(equation 22-1)” 看出这个程序应该出自哪篇文章,找了好久没找到,谁知道发一下。谢啦!

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
dongtai
dongtai
开始的好早呀!!!
曹惊博
曹惊博
呵呵,对我帮助很大
:lol:lol:lol:lol:lol:lol:lol
:D:D:D:D:D:D:D:D:D
;P;P;P;P;P;P;P;P;P
lauren
lauren
我说,用卡尔曼滤波,看懂太累了。不如知道导入哪几个量之后输出啥近似实际值=。=
- 没有更多了 -