智能车制作

标题: 卡尔曼滤波程序 [打印本页]

作者: mllen858585    时间: 2012-5-3 16:22
标题: 卡尔曼滤波程序
有谁能解释下这个卡尔滤波程序的每条语句的意思不?老是觉得跟卡尔曼里的五条公式对不上。。。
//*
//-------------------------------------------------------
//Kalman滤波,8MHz的处理时间约1.8ms;
//-------------------------------------------------------
static float angle, angle_dot;   //外部需要引用的变量
//-------------------------------------------------------
static const float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.01;
   //注意:dt的取值为kalman滤波器采样时间;
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;
}
//*/


作者: 7998    时间: 2012-5-3 16:33

作者: wo520    时间: 2012-5-3 18:33
会用就行了!
作者: yssdsz    时间: 2012-5-3 18:47
wo520 发表于 2012-5-3 18:33
会用就行了!

学长极不推荐我用互补。。。现在研究中。。。。。。对过程有了初步的了解。。。不过矩阵没学好,那段程序不是很懂。。。
作者: wo520    时间: 2012-5-3 18:49
yssdsz 发表于 2012-5-3 18:47
学长极不推荐我用互补。。。现在研究中。。。。。。对过程有了初步的了解。。。不过矩阵没学好,那段程序 ...

互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时间的!!
作者: yssdsz    时间: 2012-5-3 19:02
wo520 发表于 2012-5-3 18:49
互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时 ...

三四天吧。。。纯英文资料。。
作者: 在路上曹阳    时间: 2012-5-3 21:59
wo520 发表于 2012-5-3 18:33
会用就行了!

参数怎么调,指教下,还有前面那段微分不理解,直接求不可以吗,为什么要先微分在积分?
作者: 颠覆理论    时间: 2012-5-22 22:43
wo520 发表于 2012-5-3 18:49
互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时 ...

问一下,我的卡尔曼滤波出来为什么总是是无效的值啊?出现,nan和-inf呢
作者: 林海金    时间: 2013-6-4 18:06
颠覆理论 发表于 2012-5-22 22:43
问一下,我的卡尔曼滤波出来为什么总是是无效的值啊?出现,nan和-inf呢

亲啊,我的也出现同样的问题,NAN……





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2