智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12579|回复: 23
打印 上一主题 下一主题

[软件类] 问一下各位,加速度计和陀螺仪融合后的波形怎样才算最好,我用了卡尔曼(贴代码贴数据

[复制链接]

10

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
818
威望
559
贡献
145
兑换币
79
注册时间
2011-7-11
在线时间
57 小时
跳转到指定楼层
1#
发表于 2012-2-9 20:31:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zelight 于 2012-2-9 20:43 编辑

我用了卡尔曼融合,代码是zlstone的。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;
  int test_angel=0,test_angel_dot=0;
//-------------------------------------------------------
void Kalman_Filter(float angle_m,float gyro_m)   //gyro_m:gyro_measure      
{                                                   //加速度器,陀螺仪
//float angle=0, angle_dot=0;
  int k;
  
angle+=(gyro_m-q_bias) * dt;                  //   对角速度进行积分

Pdot[0]=Q_angle - P[0][1] - P[1][0]; //=
Pdot[1]=- P[1][1];                   //=-1
Pdot[2]=- P[1][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;        //角速度

我发现响应有点慢,比如从0到19,它会先到21再到19。。。。虽然修改Q和R可以纠正,但感觉响应太快又不好,到底怎样的滤波,才算好的波形??急求??

从下面的图片可以发现,难以去掉的尖峰(可以考虑增加Q,过程噪声的值),还有响应时间的缓慢(可以通过增加Q和R),这些都是通过实践所得,但不能太大,我也是试验所得,其实据说只有R可以改,Q最好不要随意修改。


补充内容 (2012-2-10 16:40):
http://www.megasociety.org/noesis/138/kalman.html  主要是这张表格

补充内容 (2012-2-10 16:41):
这张表格很有用

本帖子中包含更多资源

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

x

19

主题

667

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2730

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

威望
1504
贡献
364
兑换币
29
注册时间
2012-2-4
在线时间
431 小时
毕业学校
外国语学校
2#
发表于 2012-2-9 20:44:45 | 只看该作者
这个,本人也是试过,卡尔曼相对来说是比较慢,互补相对会快点,但融合效果没有卡尔曼好!只能看你自己选了!
回复 支持 反对

使用道具 举报

10

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
818
威望
559
贡献
145
兑换币
79
注册时间
2011-7-11
在线时间
57 小时
3#
 楼主| 发表于 2012-2-9 21:11:57 | 只看该作者
wo520 发表于 2012-2-9 20:44
这个,本人也是试过,卡尔曼相对来说是比较慢,互补相对会快点,但融合效果没有卡尔曼好!只能看你自己选了 ...

谢谢。
回复 支持 反对

使用道具 举报

19

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2859

论坛骨干奖章推广达人奖章特殊贡献奖章优秀版主奖章热心会员奖章

威望
847
贡献
1700
兑换币
2
注册时间
2011-10-16
在线时间
156 小时
4#
发表于 2012-2-9 22:00:38 | 只看该作者
回复 支持 反对

使用道具 举报

9

主题

239

帖子

0

精华

金牌会员

未来,我手中!

Rank: 6Rank: 6

积分
2201

推广达人奖章热心会员奖章

QQ
威望
774
贡献
1249
兑换币
0
注册时间
2011-11-17
在线时间
89 小时
5#
发表于 2012-2-9 22:40:00 | 只看该作者
厉害,上面有个博士?来参赛单位?
回复 支持 反对

使用道具 举报

9

主题

239

帖子

0

精华

金牌会员

未来,我手中!

Rank: 6Rank: 6

积分
2201

推广达人奖章热心会员奖章

QQ
威望
774
贡献
1249
兑换币
0
注册时间
2011-11-17
在线时间
89 小时
6#
发表于 2012-2-9 22:40:24 | 只看该作者
不怎么会阿,大侠们教教他
回复 支持 反对

使用道具 举报

27

主题

244

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6556

论坛元老奖章热心会员奖章

QQ
威望
1277
贡献
4939
兑换币
188
注册时间
2011-12-31
在线时间
170 小时
7#
发表于 2012-2-10 09:40:18 | 只看该作者
楼主是用什么仿真的???
回复 支持 反对

使用道具 举报

6

主题

264

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
威望
959
贡献
341
兑换币
43
注册时间
2010-12-10
在线时间
154 小时
8#
发表于 2012-2-10 10:42:44 | 只看该作者
我怕也有这个问题,”我发现响应有点慢,比如从0到19,它会先到21再到19。。。“
而且我的是陀螺仪采回的原始数据就有一个先大再小的过程。不知大家怎么解决的啊?
回复 支持 反对

使用道具 举报

10

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
818
威望
559
贡献
145
兑换币
79
注册时间
2011-7-11
在线时间
57 小时
9#
 楼主| 发表于 2012-2-10 16:39:13 | 只看该作者
二硫碘化钾 发表于 2012-2-10 09:40
楼主是用什么仿真的???

上位机
回复 支持 反对

使用道具 举报

10

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
818
威望
559
贡献
145
兑换币
79
注册时间
2011-7-11
在线时间
57 小时
10#
 楼主| 发表于 2012-2-10 16:41:36 | 只看该作者
zl6977 发表于 2012-2-10 10:42
我怕也有这个问题,”我发现响应有点慢,比如从0到19,它会先到21再到19。。。“
而且我的是陀螺仪采回的原 ...

看一下这张表格http://www.megasociety.org/noesis/138/kalman.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 14:16 , Processed in 0.065192 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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