智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2996|回复: 10
打印 上一主题 下一主题

[其他] 不知道为什么 卡尔曼滤波的跟随性不是很好

[复制链接]

3

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
威望
167
贡献
106
兑换币
96
注册时间
2015-4-9
在线时间
29 小时
跳转到指定楼层
1#
发表于 2015-5-23 22:24:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大概过了1s左右 卡尔曼算出的角度才能基本上和加速度计算出来的差不多 我卡尔曼运算的周期大概是2ms 应该不算很长 如果真是这种效果的话 感觉还不如互补滤波 如下是我的卡尔曼滤波算法
回复

使用道具 举报

3

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
威望
167
贡献
106
兑换币
96
注册时间
2015-4-9
在线时间
29 小时
2#
 楼主| 发表于 2015-5-23 22:24:25 | 只看该作者
float dt=0.005;//注意:dt的取值为kalman滤波器采样时间
float angle, angle_dot;//角度和角速度
float P[2][2] = {{ 1, 0 },
              { 0, 1 }};
float Pdot[4] ={ 0,0,0,0};
float Q_angle=0.001, Q_gyro=0.005; //角度数据置信度,角速度数据置信度
float R_angle=0.5 ,C_0 = 1;
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)//angleAx 和 gyroGy
{
angle+=(gyro_m-q_bias) * dt;
angle_err = angle_m - angle;
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;
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;//最优角速度
}
回复 支持 反对

使用道具 举报

10

主题

406

帖子

0

精华

跨届大侠

车魔

Rank: 10Rank: 10Rank: 10

积分
11152

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章资源大师奖章

威望
7292
贡献
2938
兑换币
1271
注册时间
2014-1-7
在线时间
461 小时
3#
发表于 2015-5-23 23:42:10 | 只看该作者
:)周期
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
威望
167
贡献
106
兑换币
96
注册时间
2015-4-9
在线时间
29 小时
4#
 楼主| 发表于 2015-5-24 11:15:48 | 只看该作者

是采样周期长了吗 不好意思啊 还是不怎么懂 能详细说一下吗 我实际的采样周期是2ms 程序里的dt=5ms是因为我是直接复制别人的过来了 在我自己的程序里我是用定时器去算的dt
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
威望
167
贡献
106
兑换币
96
注册时间
2015-4-9
在线时间
29 小时
5#
 楼主| 发表于 2015-5-24 12:01:53 | 只看该作者

我知道我的问题出在哪里了 dt时间算的不精确 现在没问题了 发现卡尔曼滤波 真强大 把过冲问题都解决了 哈哈
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
威望
196
贡献
132
兑换币
134
注册时间
2014-7-15
在线时间
54 小时
6#
发表于 2015-5-27 20:22:57 | 只看该作者
罹燼湮滅 发表于 2015-5-24 12:01
我知道我的问题出在哪里了 dt时间算的不精确 现在没问题了 发现卡尔曼滤波 真强大 把过冲问题都解决了 哈 ...

dt时间要怎么计算,通过示波器吗?其他参数要不要修改
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
威望
167
贡献
106
兑换币
96
注册时间
2015-4-9
在线时间
29 小时
7#
 楼主| 发表于 2015-5-29 20:06:18 | 只看该作者
夏日纳兹 发表于 2015-5-27 20:22
dt时间要怎么计算,通过示波器吗?其他参数要不要修改

就是用定时器算的 你也可以通过硬件仿真的模式 设断点来查看采样周期 其他参数不用改 你只要明白几个关键的参数的意义就可以了
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
威望
144
贡献
80
兑换币
78
注册时间
2015-6-2
在线时间
25 小时
毕业学校
浙江海洋学院
8#
发表于 2015-6-6 23:28:48 | 只看该作者
罹燼湮滅 发表于 2015-5-29 20:06
就是用定时器算的 你也可以通过硬件仿真的模式 设断点来查看采样周期 其他参数不用改 你只要明白几个关键 ...

关键的参数是哪几个,求教一下,刚刚接触卡尔曼,有点茫然~~
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
141
威望
83
贡献
36
兑换币
42
注册时间
2014-11-9
在线时间
11 小时
毕业学校
中山学院
9#
发表于 2015-6-14 20:26:34 | 只看该作者
把dt改成卡尔曼的采样时间就能OK了  我的dt=0.0004
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
威望
196
贡献
132
兑换币
134
注册时间
2014-7-15
在线时间
54 小时
10#
发表于 2015-6-15 21:43:17 | 只看该作者
我也用定时器计算的dt,也有跟随性不好,lz是用什么方法改进的?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-5 23:30 , Processed in 0.080413 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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