智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12582|回复: 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

4

主题

796

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
10583

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

威望
5543
贡献
3176
兑换币
3045
注册时间
2013-9-30
在线时间
932 小时
24#
发表于 2014-3-16 16:31:34 | 只看该作者
看不懂卡尔曼呀...
回复 支持 反对

使用道具 举报

2

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
威望
161
贡献
99
兑换币
104
注册时间
2013-6-11
在线时间
26 小时
23#
发表于 2013-7-31 10:27:13 | 只看该作者
响应比较慢的问题你解决没有??
回复 支持 反对

使用道具 举报

0

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
460
QQ
威望
303
贡献
79
兑换币
12
注册时间
2012-2-17
在线时间
39 小时
22#
发表于 2012-3-4 13:39:40 | 只看该作者
这就是卡尔曼啊
回复 支持 反对

使用道具 举报

1

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
威望
305
贡献
86
兑换币
2
注册时间
2011-8-20
在线时间
16 小时
21#
发表于 2012-3-1 22:12:43 | 只看该作者
回复 支持 反对

使用道具 举报

11

主题

141

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
QQ
威望
804
贡献
303
兑换币
39
注册时间
2011-9-30
在线时间
91 小时
20#
发表于 2012-2-29 16:17:39 | 只看该作者
羡慕啊!!!!
回复 支持 反对

使用道具 举报

10

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
818
威望
559
贡献
145
兑换币
79
注册时间
2011-7-11
在线时间
57 小时
19#
 楼主| 发表于 2012-2-21 00:18:14 | 只看该作者
lgupen 发表于 2012-2-13 12:32
反应的慢是你的dt参数太小了吧。。。试着放大试试

谢谢,现在能立了
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
561
威望
378
贡献
95
兑换币
4
注册时间
2010-12-19
在线时间
44 小时
18#
发表于 2012-2-13 12:32:32 | 只看该作者
zelight 发表于 2012-2-10 16:41
看一下这张表格http://www.megasociety.org/noesis/138/kalman.html

反应的慢是你的dt参数太小了吧。。。试着放大试试
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
869
QQ
威望
676
贡献
107
兑换币
0
注册时间
2011-10-18
在线时间
43 小时
17#
发表于 2012-2-11 16:31:47 | 只看该作者
羡慕
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
197
威望
148
贡献
35
兑换币
0
注册时间
2012-2-7
在线时间
7 小时
毕业学校
杭州电子科技大学
16#
发表于 2012-2-10 19:13:44 | 只看该作者
楼主研究得透彻,顶!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 17:08 , Processed in 0.059984 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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