智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4136|回复: 8
打印 上一主题 下一主题

[软件类] 卡尔曼滤波程序

[复制链接]

4

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
威望
208
贡献
29
兑换币
2
注册时间
2010-5-1
在线时间
15 小时
跳转到指定楼层
1#
发表于 2012-5-3 16:22:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有谁能解释下这个卡尔滤波程序的每条语句的意思不?老是觉得跟卡尔曼里的五条公式对不上。。。
//*
//-------------------------------------------------------
//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;
}
//*/

2

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
972

活跃会员奖章优秀会员奖章

QQ
威望
574
贡献
200
兑换币
0
注册时间
2011-3-21
在线时间
99 小时
2#
发表于 2012-5-3 16:33:40 | 只看该作者
回复 支持 反对

使用道具 举报

19

主题

667

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2730

热心会员奖章特殊贡献奖章论坛骨干奖章推广达人奖章在线王奖章活跃会员奖章优秀会员奖章

威望
1504
贡献
364
兑换币
29
注册时间
2012-2-4
在线时间
431 小时
毕业学校
外国语学校
3#
发表于 2012-5-3 18:33:34 | 只看该作者
会用就行了!
回复 支持 反对

使用道具 举报

21

主题

273

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2915
威望
1628
贡献
643
兑换币
264
注册时间
2012-1-15
在线时间
322 小时
4#
发表于 2012-5-3 18:47:50 | 只看该作者
wo520 发表于 2012-5-3 18:33
会用就行了!

学长极不推荐我用互补。。。现在研究中。。。。。。对过程有了初步的了解。。。不过矩阵没学好,那段程序不是很懂。。。
回复 支持 反对

使用道具 举报

19

主题

667

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2730

热心会员奖章特殊贡献奖章论坛骨干奖章推广达人奖章在线王奖章活跃会员奖章优秀会员奖章

威望
1504
贡献
364
兑换币
29
注册时间
2012-2-4
在线时间
431 小时
毕业学校
外国语学校
5#
发表于 2012-5-3 18:49:35 | 只看该作者
yssdsz 发表于 2012-5-3 18:47
学长极不推荐我用互补。。。现在研究中。。。。。。对过程有了初步的了解。。。不过矩阵没学好,那段程序 ...

互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时间的!!
回复 支持 反对

使用道具 举报

21

主题

273

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2915
威望
1628
贡献
643
兑换币
264
注册时间
2012-1-15
在线时间
322 小时
6#
发表于 2012-5-3 19:02:54 | 只看该作者
wo520 发表于 2012-5-3 18:49
互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时 ...

三四天吧。。。纯英文资料。。
回复 支持 反对

使用道具 举报

8

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
694
威望
426
贡献
114
兑换币
4
注册时间
2012-2-2
在线时间
77 小时
7#
发表于 2012-5-3 21:59:42 | 只看该作者
wo520 发表于 2012-5-3 18:33
会用就行了!

参数怎么调,指教下,还有前面那段微分不理解,直接求不可以吗,为什么要先微分在积分?
回复 支持 反对

使用道具 举报

13

主题

197

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3560
威望
1655
贡献
937
兑换币
410
注册时间
2011-12-30
在线时间
484 小时
8#
发表于 2012-5-22 22:43:43 | 只看该作者
wo520 发表于 2012-5-3 18:49
互补对直立小车完全够用了!!!不需要卡尔曼那么高级!!再说了卡尔曼会用了就够了,要搞懂还需要一段时 ...

问一下,我的卡尔曼滤波出来为什么总是是无效的值啊?出现,nan和-inf呢
回复 支持 反对

使用道具 举报

3

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
QQ
威望
287
贡献
127
兑换币
120
注册时间
2012-6-25
在线时间
35 小时
9#
发表于 2013-6-4 18:06:53 | 只看该作者
颠覆理论 发表于 2012-5-22 22:43
问一下,我的卡尔曼滤波出来为什么总是是无效的值啊?出现,nan和-inf呢

亲啊,我的也出现同样的问题,NAN……
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 20:19 , Processed in 0.097792 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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