用卡尔曼互补滤波,为什么pitch这个值滤出来没有负数

[复制链接]
1287|0
 楼主| qq2216691777 发表于 2015-5-30 15:14 | 显示全部楼层 |阅读模式
代码如下:
  1. float dt_pitch=0.005;//×¢Ò⣺dtµÄȡֵΪkalmanÂ˲¨Æ÷²ÉÑùʱ¼ä
  2. float angle_kalmen_pitch, angle_dot_pitch;//½Ç¶ÈºÍ½ÇËÙ¶È
  3. float P_pitch[2][2] = {{ 1, 0 },
  4.               { 0, 1 }};
  5. float Pdot_pitch[4] ={ 0,0,0,0};
  6. float Q_angle_pitch=0.001, Q_gyro_pitch=0.005; //½Ç¶ÈÊý¾ÝÖÃÐŶÈ,½ÇËÙ¶ÈÊý¾ÝÖÃÐŶÈ
  7. float R_angle_pitch=0.1 ,C_0_pitch = 0.5;
  8. float q_bias_pitch=0, angle_err_pitch=0, PCt_0_pitch=0, PCt_1_pitch=0, E_pitch=0, K_0_pitch=0, K_1_pitch=0, t_0_pitch=0, t_1_pitch=0;

  9. float Kalman_Filter_pitch(float angle_m, float gyro_m)//angleAx ºÍ gyroGy
  10. {
  11.                 angle_kalmen_pitch += (gyro_m-q_bias_pitch) * dt_pitch;        //½ÇËÙ¶È»ý·Ö
  12.                 angle_err_pitch = angle_m - angle_kalmen_pitch;
  13.        
  14.                 Pdot_pitch[0]=Q_angle_pitch - P_pitch[0][1] - P_pitch[1][0];
  15.        
  16.                 Pdot_pitch[1]=-P_pitch[1][1];
  17.                 Pdot_pitch[2]=-P_pitch[1][1];
  18.                 Pdot_pitch[3]=Q_gyro_pitch;
  19.        
  20.                 P_pitch[0][0] += Pdot_pitch[0] * dt_pitch;
  21.                 P_pitch[0][1] += Pdot_pitch[1] * dt_pitch;
  22.                 P_pitch[1][0] += Pdot_pitch[2] * dt_pitch;
  23.                 P_pitch[1][1] += Pdot_pitch[3] * dt_pitch;
  24.        
  25.                 angle_err_pitch = angle_m - angle_kalmen_pitch;
  26.         /******************************************************************/
  27.        
  28.                 PCt_0_pitch = C_0_pitch * P_pitch[0][0];
  29.                 PCt_1_pitch = C_0_pitch * P_pitch[1][0];
  30.        
  31.                 E_pitch = R_angle_pitch + C_0_pitch * PCt_0_pitch;
  32.        
  33.                 K_0_pitch = PCt_0_pitch / E_pitch;
  34.                 K_1_pitch = PCt_1_pitch / E_pitch;
  35.                
  36.                 t_0_pitch = PCt_0_pitch;
  37.                
  38.                 t_1_pitch = C_0_pitch * P_pitch[0][1];
  39.                
  40.                 P_pitch[0][0] -= K_0_pitch * t_0_pitch;
  41.                 P_pitch[0][1] -= K_0_pitch * t_1_pitch;
  42.                 P_pitch[1][0] -= K_1_pitch * t_0_pitch;
  43.                 P_pitch[1][1] -= K_1_pitch * t_1_pitch;
  44.                
  45.                 angle_kalmen_pitch += K_0_pitch * angle_err_pitch; //×îÓŽǶÈ
  46.                 q_bias_pitch += K_1_pitch * angle_err_pitch;
  47.                 angle_dot_pitch = gyro_m-q_bias_pitch;//×îÓŽÇËÙ¶È
  48.                 return angle_kalmen_pitch;
  49. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

37

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部