智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3990|回复: 19
打印 上一主题 下一主题

关于卡尔曼滤波,大家都过来看眼呀~~~~~~~~~~~求教

  [复制链接]

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
跳转到指定楼层
1#
发表于 2012-3-8 20:18:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
都一个多月了,觉得滤波还是不行。现在求助大家帮我看看。不知道我的滤波行不行,首先用的是卡尔曼滤波程序

float Q_angle=0.001, Q_gyro=0.001, R_angle=0.0008, dt=0.010;

                        //注意:dt的取值为kalman滤波器采样时间;
float P[2][2] = {
                                                        { 1, 0 },
                                                        { 0, 1 }
                                                };
       
float Pdot[4] ={0,0,0,0};

const char 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)                        //gyro_m:gyro_measure
{
        angle+=(gyro_m-q_bias) * dt;//先验估计

        Pdot[0]=Q_angle - P[0][1] - P[1][0];// Pk-' 先验估计误差协方差的微分
        Pdot[1]=- P[1][1];
        Pdot[2]=- P[1][1];
        Pdot[3]=Q_gyro;
       
        P[0][0] += Pdot[0] * dt;// Pk- 先验估计误差协方差微分的积分 = 先验估计误差协方差
        P[0][1] += Pdot[1] * dt;
        P[1][0] += Pdot[2] * dt;
        P[1][1] += Pdot[3] * dt;
       
       
        angle_err = angle_m - angle;//zk-先验估计
       
       

        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;//Kk
        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;//输出值(后验估计)的微分 = 角速度

}



我通过中断采样,周期是10ms一次,陀螺仪和加速度器均采样一次
然后输入卡尔曼进行滤波。用的那个串口程序发送就要9ms左右,所以暂时没提高采样频率
其次我用是弧度制。觉得按理应该就是一个比例问题,不是很大。
有空弄成角度后也发上来给大伙看看。
我下列的图像,蓝色的加速度传感器实际测到的值
红色为滤波后加速度计的值对于程序中的angle
粉红色是陀螺仪采到的值
黄色是滤波后陀螺仪的值对于程序中的angle_dot

这张图中,白色圆圈的地方不知道怎么滤掉。我用手往前倒,加速度理想是增加的,这里却有个下降的过程。float Q_angle=0.001, Q_gyro=0.0015, R_angle=0.001, dt=0.010是此时的参数
我觉得这个时刻滤波出来的数据均由延迟,相对于实际都是有偏移的。

float Q_angle=0.008, Q_gyro=0.0015, R_angle=0.001, dt=0.010;这个时刻的参数。这个会靠近实际数据。
但仍像第一张图似的。开始倒下去的时候加速度有负值。
其他图大家也看看那个符合点。

然后我对陀螺仪有些疑问,陀螺仪积分是按手册中0.76度/mv/s的么。就是按时间转换?可是我在用手摇摆的时候,陀螺仪最大的时刻是差不多对应车子平衡位置。这样不就不是角度,而是对应角速度了么?可以通过积分到到角度么?

大伙都给点提示和支持呀。挣扎好久了呀。

本帖子中包含更多资源

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

x

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
20#
 楼主| 发表于 2012-5-11 15:27:56 | 只看该作者
200802030103 发表于 2012-5-11 14:34
我做的卡拉曼滤波效果图

觉得有点滞后。不过感觉可以直立试试。
回复 支持 反对

使用道具 举报

1

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
585
威望
359
贡献
84
兑换币
0
注册时间
2010-10-10
在线时间
71 小时
19#
发表于 2012-5-11 14:34:54 | 只看该作者
我做的卡拉曼滤波效果图

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
18#
 楼主| 发表于 2012-3-20 10:28:37 | 只看该作者
有-木-友 发表于 2012-3-9 01:45

上面哪副还算比较靠谱的呀??
回复 支持 反对

使用道具 举报

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
17#
 楼主| 发表于 2012-3-17 15:48:18 | 只看该作者
玩ㄝ★卟恭 发表于 2012-3-17 14:00
楼主 想要显示波形 是不是一定要按一定的格式发数据呢

嗯。必须按它的规则去发~
回复 支持 反对

使用道具 举报

7

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
717
贡献
216
兑换币
16
注册时间
2012-2-21
在线时间
172 小时
16#
发表于 2012-3-17 14:00:22 | 只看该作者
liu1guo2qiang3 发表于 2012-3-16 16:22
首先你看看串口连好了没。最好用别的上位机看看能不能接收字符~~

楼主 想要显示波形 是不是一定要按一定的格式发数据呢  
回复 支持 反对

使用道具 举报

7

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
717
贡献
216
兑换币
16
注册时间
2012-2-21
在线时间
172 小时
15#
发表于 2012-3-16 20:56:37 | 只看该作者
liu1guo2qiang3 发表于 2012-3-16 16:22
首先你看看串口连好了没。最好用别的上位机看看能不能接收字符~~

谢谢楼主
回复 支持 反对

使用道具 举报

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
14#
 楼主| 发表于 2012-3-16 16:22:58 | 只看该作者
玩ㄝ★卟恭 发表于 2012-3-15 18:43
想问一下楼主 怎么通过那个visual scope 获得数据的图形的  为什么我用串口接收 却没有波形显示呢 是系统的 ...

首先你看看串口连好了没。最好用别的上位机看看能不能接收字符~~
回复 支持 反对

使用道具 举报

7

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
717
贡献
216
兑换币
16
注册时间
2012-2-21
在线时间
172 小时
13#
发表于 2012-3-15 18:43:49 | 只看该作者
想问一下楼主 怎么通过那个visual scope 获得数据的图形的  为什么我用串口接收 却没有波形显示呢 是系统的原因吗  
回复 支持 反对

使用道具 举报

25

主题

418

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3568

优秀会员奖章活跃会员奖章

QQ
威望
1995
贡献
863
兑换币
279
注册时间
2011-3-12
在线时间
355 小时
12#
 楼主| 发表于 2012-3-13 14:22:39 | 只看该作者
wo520 发表于 2012-3-13 10:04
不行,明显的滞后了!

是陀螺仪滞后还是加速度呀,。应该是加速度吧,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-24 13:56 , Processed in 0.080578 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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