智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4212|回复: 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 小时
2#
 楼主| 发表于 2012-4-12 22:45:41 | 只看该作者


这是效果图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
威望
189
贡献
67
兑换币
5
注册时间
2012-4-8
在线时间
14 小时
3#
发表于 2012-4-12 22:54:44 | 只看该作者
同求呀~~
回复 支持 反对

使用道具 举报

2

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
威望
383
贡献
53
兑换币
0
注册时间
2011-4-27
在线时间
31 小时
4#
发表于 2012-4-13 08:15:42 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
525
威望
328
贡献
115
兑换币
0
注册时间
2012-3-4
在线时间
41 小时
毕业学校
中国矿业大学
5#
发表于 2012-4-14 14:33:40 | 只看该作者
楼主能不能说下你的系数转换根据设么来的  公式含义是什么  谢谢了
回复 支持 反对

使用道具 举报

12

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1295
威望
775
贡献
302
兑换币
35
注册时间
2012-2-22
在线时间
109 小时
6#
 楼主| 发表于 2012-4-15 23:15:28 | 只看该作者
发表于 昨天 14:33 |只看该作者  楼主能不能说下你的系数转换根据设么来的  公式含义是什么  谢谢了
惭愧呀,我是在网上找的,具体我也不知道呢
回复 支持 反对

使用道具 举报

106

主题

968

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4494

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

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

使用道具 举报

1

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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最后会是一个定值常数,,所以这个模型认真分析,其实跟低通算法是一样的,波形越平滑,越滞后。。

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

使用道具 举报

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
网络上流行的这个卡尔曼应该不是很正确。卡尔曼滤波似乎不是很适合我们直立这种控制模型。只是起到了一个低 ...

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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