注册 登录
查看: 359|回复: 3

[平衡组] 关于卡尔曼滤波参数

[复制链接]
发表于 2014-5-20 14:31:38 | 显示全部楼层 |阅读模式
static float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
这几个参数没赋初值,要怎么用啊?第一次就是随机值吗?
回复

使用道具 举报

 楼主| 发表于 2014-5-20 14:32:37 | 显示全部楼层
//**************************************************************************
//   Kalman滤波
//**************************************************************************

float angle, angle_dot;         //外部需要引用的变量
//-------------------------------------------------------
// 0.00015     //0.0001
const float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.005;
//0.0001         //0.00015        //1.2
//注意:dt的取值为kalman滤波器采样时间;         //0.8
static float P[2][2] = {
    { 1, 0 },
    { 0, 1 }
};

static float Pdot[4] ={0,0,0,0};

static const char C_0 = 1;

static float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
//-------------------------------------------------------
void Kalman_Filter(float angle_m,float gyro_m)          //gyro_m:gyro_measure
{
    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];
   
    E = R_angle + C_0 * PCt_0;
   
    K_0 = PCt_0 / E;
    K_1 = PCt_1 / E;
   
    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;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 14:33:18 | 显示全部楼层
这需要调试哪几个参数呢?
回复 支持 反对

使用道具 举报

发表于 2014-5-21 22:58:14 | 显示全部楼层
不懂。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部