智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4215|回复: 14
打印 上一主题 下一主题

[软件类] 卡尔曼滤波

[复制链接]

12

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1295
威望
775
贡献
302
兑换币
35
注册时间
2012-2-22
在线时间
109 小时
跳转到指定楼层
1#
发表于 2012-4-12 22:43:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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;
但是静止时角度值一直浮动,停不下来,晃动的时候有过冲

12

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1295
威望
775
贡献
302
兑换币
35
注册时间
2012-2-22
在线时间
109 小时
15#
 楼主| 发表于 2012-5-6 23:14:40 | 只看该作者
13楼不用考虑卡尔曼了
回复 支持 反对

使用道具 举报

12

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1295
威望
775
贡献
302
兑换币
35
注册时间
2012-2-22
在线时间
109 小时
14#
 楼主| 发表于 2012-5-6 23:13:26 | 只看该作者
发表于 8 小时前 |只看该作者 我用过一段时间的卡尔曼就放弃了。。具体怎么完善这个卡尔曼模型。。我没这个能力。。

我现在对卡尔曼也没办法了,决定换算法了
回复 支持 反对

使用道具 举报

14

主题

79

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
威望
570
贡献
265
兑换币
8
注册时间
2012-3-4
在线时间
83 小时
13#
发表于 2012-5-6 14:48:44 | 只看该作者
请问,卡尔曼滤波有什么用啊,,,新手求教
回复 支持 反对

使用道具 举报

1

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
威望
264
贡献
107
兑换币
0
注册时间
2012-4-20
在线时间
41 小时
12#
发表于 2012-5-6 14:18:08 | 只看该作者
我用过一段时间的卡尔曼就放弃了。。具体怎么完善这个卡尔曼模型。。我没这个能力。。
回复 支持 反对

使用道具 举报

1

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
威望
264
贡献
107
兑换币
0
注册时间
2012-4-20
在线时间
41 小时
11#
发表于 2012-5-6 14:16:32 | 只看该作者
仰望星空1 发表于 2012-4-21 18:04
那有正确的没

我用过一段时间的卡尔曼就没去用了
回复 支持 反对

使用道具 举报

8

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
694
威望
426
贡献
114
兑换币
4
注册时间
2012-2-2
在线时间
77 小时
10#
发表于 2012-5-3 22:06:31 | 只看该作者
Achao 发表于 2012-4-20 14:12
网络上流行的这个卡尔曼应该不是很正确。卡尔曼滤波似乎不是很适合我们直立这种控制模型。只是起到了一个低 ...

是前面那段求协方差有错误吗,能先微分再积分吗?
回复 支持 反对

使用道具 举报

12

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1295
威望
775
贡献
302
兑换币
35
注册时间
2012-2-22
在线时间
109 小时
9#
 楼主| 发表于 2012-4-21 18:04:59 | 只看该作者
发表于 昨天 14:12 |只看该作者 网络上流行的这个卡尔曼应该不是很正确。卡尔曼滤波似乎不是很适合我们直立这种控制模型。只是起到了一个低通的作用。最主要的系数K_0最后会是一个定值常数,,所以这个模型认真分析,其实跟低通算法是一样的,波形越平滑,越滞后。。

那有正确的没
回复 支持 反对

使用道具 举报

1

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
威望
264
贡献
107
兑换币
0
注册时间
2012-4-20
在线时间
41 小时
8#
发表于 2012-4-20 14:12:42 | 只看该作者
网络上流行的这个卡尔曼应该不是很正确。卡尔曼滤波似乎不是很适合我们直立这种控制模型。只是起到了一个低通的作用。最主要的系数K_0最后会是一个定值常数,,所以这个模型认真分析,其实跟低通算法是一样的,波形越平滑,越滞后。。
回复 支持 反对

使用道具 举报

106

主题

968

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4494

在线王奖章论坛元老奖章活跃会员奖章优秀会员奖章

威望
2681
贡献
921
兑换币
241
注册时间
2012-2-4
在线时间
446 小时
7#
发表于 2012-4-20 12:47:26 | 只看该作者
卡尔曼好吗
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 06:11 , Processed in 0.047263 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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