智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3082|回复: 14
打印 上一主题 下一主题

直立车用到的三种融合,在这里都有

[复制链接]

4

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
524
威望
271
贡献
167
兑换币
166
注册时间
2015-10-23
在线时间
43 小时
毕业学校
武汉科技大学
跳转到指定楼层
1#
发表于 2016-1-17 20:13:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
/******************************三种滤波函数,每种都调试下,比较动态和静态过程****************************************************/
/*******************下面滤波过程很重要,很重要,很重要,重要的事情说三遍*******************************************************/
/*******************下面滤波过程很重要,很重要,很重要,重要的事情说三遍*******************************************************/
float Angle,Gyro_y;                                                                                                                                                                                                  //*************
float Q_angle=0.001;//0.001                                                                                                                                                                            //*************
float Q_gyro=0.003;//0.03                                                                                                                                                                                  //*************
float R_angle=0.5;//0.5                                                                                                                                                                                          //*************
//float dt=0.01;//0.1                //dt为kalman滤波器采样时间;                                                                                                                  //*************
char  C_0 = 1;                                                                                                                                                                                                          //*************
float Q_bias, Angle_err;                                                                                                                                                                                  //*************
float PCt_0, PCt_1, E;                                                                                                                                                                                          //*************
float K_0, K_1, t_0, t_1;                                                                                                                                                                                  //*************
float Pdot[4] ={0,0,0,0};                                                                                                                                                                                  //*************
float PP[2][2] = { { 1, 0 },{ 0, 1 } };                                                                                                                                                          //*************
float w_kp=1;//0.945                                                                                                                                                                                          //*************
/*矩阵卡尔曼函数*/                                                                                                                                                                                                  //*************
float Kalman_Filter(float Accel,float Gyro)                                                                                                                                                  //*************
{                                                                                                                                                                                                                                  //*************
        Angle+=(Gyro - Q_bias) * dt; //先验估计                                                                                                                                                  //*************
        Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; // Pk-先验估计误差协方差的微分                                                                                  //*************
        Pdot[1]=- PP[1][1];                                                                                                                                                                                          //*************
        Pdot[2]=- PP[1][1];                                                                                                                                                                                           //*************
        Pdot[3]=Q_gyro;                                                                                                                                                                                                   //*************
        PP[0][0] += Pdot[0] * dt;   // Pk-先验估计误差协方差微分的积分                                                                                                   //*************
        PP[0][1] += Pdot[1] * dt;   // =先验估计误差协方差                                                                                                                           //*************
        PP[1][0] += Pdot[2] * dt;                                                                                                                                                                           //*************
        PP[1][1] += Pdot[3] * dt;                                                                                                                                                                           //*************
        Angle_err = Accel - Angle;        //zk-先验估计                                                                                                                                           //*************
        PCt_0 = C_0 * PP[0][0];                                                                                                                                                                                   //*************
        PCt_1 = C_0 * PP[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 * PP[0][1];                                                                                                                                                                                        //*************
        PP[0][0] -= K_0 * t_0;                 //后验估计误差协方差                                                                                                                                //*************
        PP[0][1] -= K_0 * t_1;                                                                                                                                                                                        //*************
        PP[1][0] -= K_1 * t_0;                                                                                                                                                                                        //*************
        PP[1][1] -= K_1 * t_1;                                                                                                                                                                                   //*************
        Angle        += K_0 * Angle_err;         //后验估计                                                                                                                                                   //*************
        Q_bias        += K_1 * Angle_err;         //后验估计                                                                                                                                                  //*************
        Gyro_y   = Gyro - Q_bias;         //输出值(后验估计)的微分=角速度                                                                                                  //*************
        return         Angle;                                                                                                                                                                                                 //*************
}                                                                                                                                                                                                                                  //*************
/**************************************************************************************                                                          
                                角度融合                                                                                                                                       
**************************************************************************************/                                                         //*************
float kalman_filter(float angle_m,float gyro_m)//非矩阵卡尔曼滤波                                                                                                 //*************
{                                                                                                                                                                                                                                 //*************
static float x=0;                                                                                                                                                                                                 //*************
static float P=0.000001;                                                                                                                                                                                 //*************
static float Q=0.000001;                                                                                                                                                                                 //*************
static float R=0.35;//0.35                                                                                                                                                                                //*************
static float k=0;                                                                                                                                                                                                //*************
gyro_m=W_K*gyro_m;//角速度修正                                                                                                                                                                        //*************
x=x+gyro_m*dt;                                                                                                                                                                                                        //*************
P=P+Q;                                                                                                                                                                                                                        //*************
k=P/(P+R);                                                                                                                                                                                                                //*************
x=x+k*(angle_m-x);                                                                                                                                                                                           //*************
P=(1-k)*P;                                                                                                                                                                                                           //*************
return x;                                                                                                                                                                                                                //*************
}                                                                                                                                                                                                                                //*************
                                                                                                                                                                                                                                //*************
float GYRO_Integration;                                                                                                                                                                                        //*************
float Complement_Filter(float angle_m,float gyro_m)//互补融合滤波//*************                                                                 //*************
{                                                                                                                                                                                                                           //*************
    float Angle_Filter_Temp;//互补融合滤波中间量                                                                                                                                //*************
        float Angle_Difference_Value;//融合后的角度与加速度静态角度差值,作为反馈量加入积分回路,让静差为0                   //*************
                                                                                                                                                                                                                           //*************
        Angle_Filter_Temp=GYRO_Integration;                                                                                                                                             //*************
    gyro_m=W_K*gyro_m;//角速度修正                                                                                                                                                            //*************
    Angle_Difference_Value=(angle_m-Angle_Filter_Temp)*1.0;//融合后的角度与加速度静态角度差值                                   //*************
    GYRO_Integration=GYRO_Integration+(gyro_m+Angle_Difference_Value )*dt;                                                                           //*************
        return  GYRO_Integration;                                                                                                                                                                   //*************
}                                                                                                                                                                                                                           //*************
                                                                                                                                                                                                                           //*************
/************************上面滤波过程很重要,很重要,很重要,重要的事情说三遍**************************************************************/
/************************上面滤波过程很重要,很重要,很重要,重要的事情说三遍**************************************************************/


本帖子中包含更多资源

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

x
回复

使用道具 举报

39

主题

467

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6646

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

威望
3491
贡献
1933
兑换币
1810
注册时间
2014-11-16
在线时间
611 小时
推荐
发表于 2016-1-18 10:14:09 | 只看该作者
:):):):)
回复 支持 0 反对 1

使用道具 举报

4

主题

60

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1234
QQ
威望
607
贡献
365
兑换币
394
注册时间
2016-10-5
在线时间
131 小时
毕业学校
厦门大学嘉庚学院
15#
发表于 2017-4-1 23:16:43 | 只看该作者
先谢过再下载!!!!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
197
威望
112
贡献
55
兑换币
62
注册时间
2016-11-4
在线时间
15 小时
毕业学校
立达中学
14#
发表于 2016-12-24 21:45:35 | 只看该作者
赞   正在发愁用什么滤波了
回复 支持 反对

使用道具 举报

0

主题

770

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
9280
威望
5224
贡献
3388
兑换币
3559
注册时间
2016-9-1
在线时间
334 小时
毕业学校
西南某校
13#
发表于 2016-11-30 13:07:58 | 只看该作者
:o,好帖子顶一顶!感谢楼主
回复 支持 反对

使用道具 举报

4

主题

60

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1234
QQ
威望
607
贡献
365
兑换币
394
注册时间
2016-10-5
在线时间
131 小时
毕业学校
厦门大学嘉庚学院
12#
发表于 2016-11-29 23:52:00 | 只看该作者
请问楼主,融合 是用最后一个吗?
回复 支持 反对

使用道具 举报

2

主题

34

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1515
威望
1064
贡献
329
兑换币
178
注册时间
2015-8-11
在线时间
61 小时
毕业学校
防灾
11#
发表于 2016-3-13 13:27:05 | 只看该作者
楼主用的那个,我用的二阶互补
回复 支持 反对

使用道具 举报

3

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
953
威望
487
贡献
276
兑换币
318
注册时间
2015-10-23
在线时间
95 小时
毕业学校
青岛理工大学
10#
发表于 2016-3-13 13:01:17 | 只看该作者
  赞一个   楼主好人
回复 支持 反对

使用道具 举报

2

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
威望
1081
贡献
527
兑换币
533
注册时间
2015-7-15
在线时间
159 小时
9#
发表于 2016-3-12 09:22:26 | 只看该作者
:o:o:o:o
回复 支持 反对

使用道具 举报

8

主题

437

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2938
威望
1452
贡献
846
兑换币
982
注册时间
2014-12-7
在线时间
320 小时
8#
发表于 2016-3-11 14:20:45 | 只看该作者
:lol:lol
回复 支持 反对

使用道具 举报

4

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
524
威望
271
贡献
167
兑换币
166
注册时间
2015-10-23
在线时间
43 小时
毕业学校
武汉科技大学
7#
 楼主| 发表于 2016-3-10 19:06:23 | 只看该作者
你好吗095 发表于 2016-1-18 23:40
楼主是任意一种滤波方式都可以实现滤波吗

是的咯,直接调用就好
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 03:51 , Processed in 0.056045 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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