金牌会员
- 积分
- 1295
- 威望
- 775
- 贡献
- 302
- 兑换币
- 35
- 注册时间
- 2012-2-22
- 在线时间
- 109 小时
|
void Kalman_Filter(float angle_m,float gyro_m)
{
angle+=(gyro_m-q_bias) * dt;
Pdot[0]=Q_angle - p[0][1] - p[1][0];
Pdot[1]=- p[1][1];
Pdot[2]=- p[1][1];
Pdot[3]=Q_gyro;
p[0][0] += Pdot[0] * dt;
p[0][1] += Pdot[1] * dt;
p[1][0] += Pdot[2] * dt;
p[1][1] += Pdot[3] * dt;
angle_err = angle_m - angle;
PCt_0 = C_0 * p[0][0];
PCt_1 = C_0 * p[1][0];
En = R_angle + C_0 * PCt_0;
K_0 = PCt_0 / En;
K_1 = PCt_1 / En;
t_0 = PCt_0;
t_1 = C_0 * p[0][1];
p[0][0] -= K_0 * t_0;
p[0][1] -= K_0 * t_1;
p[1][0] -= K_1 * t_0;
p[1][1] -= K_1 * t_1;
angle += K_0 * angle_err;
q_bias += K_1 * angle_err;
angle_dot = gyro_m-q_bias;
}
void AD_calculate(void)
{
while(!ATD0STAT0_SCF);
acceler=ReadATD(2)+28; //角度校正
gyro=ReadATD(0);
acceler*=0.004069; //系数换算:2.5/(1.2*512);
acceler=asin(acceler);
gyro*=0.00341; //角速度系数:(3.14/180)* 100/512=0.01364;
Kalman_Filter(acceler,gyro);
}
这个滤波函数的参数怎么调呀,求指教,现在我调的参数是static const float Q_angle=0.0017, Q_gyro=0.00095, R_angle=0.001, dt=0.005;
但是静止时角度值一直浮动,停不下来,晃动的时候有过冲
|
|