智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 14443|回复: 43
打印 上一主题 下一主题

[咨询] 卡尔曼滤波程序

  [复制链接]

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

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

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
跳转到指定楼层
1#
发表于 2012-5-27 19:33:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式



void Kalman_Filter(void)
{
       static float P[2][2] = {{ 0.005, 0.005}, { 0.005, 0.005 }};//误差相关矩阵
  
         static float q_bias=0;                                                //陀螺仪偏差
         
        
         static const float dt = 0.005;             //dt的取值为kalman滤波器采样时间
         static float A[2][2]={{1, 0.005 }, {0,1}} ,a[2][2]={{1,0}, {0.005,1}} ;//a为A的转置
         static float angle_err;
         static float X[2][2]={{0,0}, {0,0}} ,Y[2][2]={{0,0}, {0,0}};
         static float PHt_0=0,PHt_1=0;
         static float En=0,t_0=0,t_1=0;
          float h_0 = 1.0;
          int i,j,k;
        g_fgyroangle=g_fGyroSpeed*dt;  
        
        g_fCarAngle=g_fCarAngle+q_bias * dt;     //X(K|K-1)=A*X(K-1|K-1)
     
     
      
          for(i=0;i<2;i++)                                           //P(K|K-1)=A*P(K-1|K-1)*A'+Q
              {
                  for(j=0;j<2;j++)
                      {
                             for(k=0;k<2;k++)
                                 X[j]+=A[k]*P[k][j] ;
                       }
                }
   
           
          for(i=0;i<2;i++)
             {
                 for(j=0;j<2;j++)
                     {
                            for(k=0;k<2;k++)
                            Y[j]+=X[k]*a[k][j] ;
                       }
               }
         
          P[0][0] =Y[0][0]+ Q_angle;
          P[0][1]= Y[0][1] ;
          P[1][0]=Y[1][0];
          P[1][1] =Y[1][1]+Q_gyro ;
      
     //Y矩阵清零   ,X矩阵清零   
          for(i=0;i<2;i++)
               {
                     for(j=0;j<2;j++)
                         {
                              Y[j]=0;
                               X[j]=0;
                          }
                 }
        
        
        
         
        angle_err = g_fGravityAngle - g_fCarAngle;
         
         PHt_0 = h_0*P[0][0];
         PHt_1 = h_0*P[1][0];
         
         En = R_angle + h_0 * PHt_0;
         
         K_0 = PHt_0 / En;
         K_1 = PHt_1 / En;
         
         t_0 = PHt_0;
         t_1 = h_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;
                 
         g_fCarAngle   += K_0 * angle_err;
         q_bias += K_1 * angle_err;
          g_fangle_dot = g_fGyroSpeed-q_bias;      
}
    为什么前面求P的时候用数组就不行了?






     

本帖子中包含更多资源

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

x

0

主题

1

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
403
威望
177
贡献
104
兑换币
105
注册时间
2015-2-7
在线时间
61 小时
毕业学校
西安理工大学
44#
发表于 2015-5-23 21:53:41 | 只看该作者
xiongcaifei 发表于 2013-1-22 16:58
楼主,你的卡尔曼滤波的两个参数,一个是加速度计的角度,另一个是陀螺仪的角速度。那这个角度是度还是弧度 ...

你的问题解决了吗?求指导
回复 支持 反对

使用道具 举报

2

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
威望
150
贡献
64
兑换币
87
注册时间
2013-3-21
在线时间
26 小时
43#
发表于 2013-5-8 09:09:57 | 只看该作者
在路上520 发表于 2012-5-27 21:13
void Kalman_Filter(void)
{
       static float P[2][2] = {{ 0.005, 0.005}, { 0.005, 0.005 }};//误 ...

g_fangle_dot最后的这个变量是什么意思?干什么的?为什么只在这个程序中出现了一次?
回复 支持 反对

使用道具 举报

55

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1987
威望
1361
贡献
22
兑换币
638
注册时间
2012-9-23
在线时间
302 小时
毕业学校
同济大学
42#
发表于 2013-1-22 16:58:13 | 只看该作者
楼主,你的卡尔曼滤波的两个参数,一个是加速度计的角度,另一个是陀螺仪的角速度。那这个角度是度还是弧度?还是角度经过3.14后的数值啊??还有你的角度和角速度给卡尔曼之前虑过波(平均滤波、、、)吗??
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
13
威望
9
贡献
4
兑换币
3
注册时间
2012-12-14
在线时间
0 小时
41#
发表于 2012-12-14 11:37:24 | 只看该作者
给力~ 学习!!!
回复 支持 反对

使用道具 举报

0

主题

34

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1167
威望
452
贡献
219
兑换币
146
注册时间
2012-1-8
在线时间
248 小时
40#
发表于 2012-6-14 01:29:06 | 只看该作者
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

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

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
39#
 楼主| 发表于 2012-6-1 16:42:29 | 只看该作者
心剑无痕 发表于 2012-5-31 09:59
楼主能加Q交流下吗  391691397

18994078
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
27
威望
95
贡献
22
兑换币
0
注册时间
2012-5-31
在线时间
0 小时
毕业学校
广西师大
38#
发表于 2012-5-31 09:59:19 | 只看该作者
楼主能加Q交流下吗  391691397
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

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

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
37#
 楼主| 发表于 2012-5-29 20:41:06 | 只看该作者
过冲很严重,而且有点滞后
回复 支持 反对

使用道具 举报

7

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
717
贡献
216
兑换币
16
注册时间
2012-2-21
在线时间
172 小时
36#
发表于 2012-5-29 16:09:57 | 只看该作者
楼主融合后的波形哪里有问题  我真是看不出来  能指点一下么?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 22:46 , Processed in 0.091953 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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