智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6666|回复: 16
打印 上一主题 下一主题

[软件类] 电磁组卡尔曼 滤波问题

  [复制链接]

5

主题

74

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3484
威望
1687
贡献
1007
兑换币
720
注册时间
2012-3-19
在线时间
395 小时
跳转到指定楼层
1#
发表于 2012-4-10 12:09:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问卡尔曼滤波算法中,哪些出事值如何设定,以及Q,R,P等参数如何定??

7

主题

119

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4603

优秀会员奖章

威望
1226
贡献
2163
兑换币
110
注册时间
2010-8-2
在线时间
607 小时
2#
发表于 2012-4-10 16:16:22 | 只看该作者
得看你的具体程序是什么,不然怎么说
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3484
威望
1687
贡献
1007
兑换币
720
注册时间
2012-3-19
在线时间
395 小时
3#
 楼主| 发表于 2012-4-11 19:21:25 | 只看该作者
十八龙潭 发表于 2012-4-10 16:16
得看你的具体程序是什么,不然怎么说

float Q =1,R = 300;
   static float RealData = 0,RealData_P = 0;
   float NowData = 0,NowData_P = 0;
   float Kg = 0,gyroscope_rate = 0,accelerometer_angle=0;
   float Acc_x = 0,Acc_z = 0, Gyro = 0;
   static float his_acc = 0.0,his_accx = 0.0,his_accz = 0.0;
void kalman_update(void)
{
  
   
   while(!ATD0STAT0_SCF);   //等待转换完成
   
    Gyro  = (float)ATD0DR0;   
    Acc_x = (float)ATD0DR1;
    Acc_z = (float)ATD0DR2;
   
   
   if(Gyro > 4090) Gyro += 1000;
   else
   if(Gyro > 4084) Gyro += 500;
   
   if(Gyro < 55)   Gyro -= 1000;
   else
   if(Gyro < 60)   Gyro -= 500;
      
    Acc_x = Acc_x - 2342.0;
    Acc_z = Acc_z - 2076.0;
    Gyro  = Gyro  - 2048.0;
    Gyro_Data = Gyro;
   
    OutData[0] = Gyro_Data;
    accelerometer_angle =Acc_z*Rz; //atan2f(-Acc_x,Acc_z);
    OutData[1] = accelerometer_angle*1000;

    gyroscope_rate = Gyro*0.0023;         //参考电压3.3v 12位ADC 放大9.1倍 enc-03 0.67mv/deg./sec.
   
                                          //(3300/4096)/(0.67*9.1)*(3.14/180) =  0.0023
   
    NowData = RealData + gyroscope_rate*0.01;                 //1.预估计 X(k|k-1) = A(k,k-1)*X(k-1|k-1) + B(k)*u(k)
    NowData_P = sqrt(Q*Q+RealData_P*RealData_P);              //2.计算预估计协方差矩阵   P(k|k-1) = A(k,k-1)*P(k-1|k-1)*A(k,k-1)'+Q(k)
    Kg = sqrt(NowData_P*NowData_P/(NowData_P*NowData_P+R*R)); //3.计算卡尔曼增益矩阵 K(k) = P(k|k-1)*H(k)' / (H(k)*P(k|k-1)*H(k)' + R(k))
    RealData = NowData + Kg*(accelerometer_angle - NowData);  //4.更新估计 X(k|k) = X(k|k-1)+K(k)*(Z(k)-H(k)*X(k|k-1))
    RealData_P = sqrt((1-Kg)*NowData_P*NowData_P);            //5.计算更新后估计协防差矩阵 P(k|k) =(I-K(k)*H(k))*P(k|k-1)
   
    QingJiao =  RealData;  
   
   
    OutData[2] = QingJiao*1000;
    OutPut_Data();

回复 支持 反对

使用道具 举报

7

主题

119

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4603

优秀会员奖章

威望
1226
贡献
2163
兑换币
110
注册时间
2010-8-2
在线时间
607 小时
4#
发表于 2012-4-12 22:00:28 | 只看该作者
P、Q、R三个参数中,RealData_P初始值可随便设,没什么关系;Q =1不动;最关键是改变R值,什么值合适得自己看;另外,改变程序中的0.0023值也可改变波形,该值也应该合适。
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3484
威望
1687
贡献
1007
兑换币
720
注册时间
2012-3-19
在线时间
395 小时
5#
 楼主| 发表于 2012-4-13 11:34:45 | 只看该作者
十八龙潭 发表于 2012-4-12 22:00
P、Q、R三个参数中,RealData_P初始值可随便设,没什么关系;Q =1不动;最关键是改变R值,什么值合适得自己 ...

请问 你们滤波后的角度,在直立控制时给PWM时有没有将角度放大处理?

回复 支持 反对

使用道具 举报

7

主题

119

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4603

优秀会员奖章

威望
1226
贡献
2163
兑换币
110
注册时间
2010-8-2
在线时间
607 小时
6#
发表于 2012-4-13 21:54:20 | 只看该作者
bu1193510501 发表于 2012-4-13 11:34
请问 你们滤波后的角度,在直立控制时给PWM时有没有将角度放大处理?

就是对角度进行P控制呀
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3484
威望
1687
贡献
1007
兑换币
720
注册时间
2012-3-19
在线时间
395 小时
7#
 楼主| 发表于 2012-4-14 00:21:13 | 只看该作者
十八龙潭 发表于 2012-4-13 21:54
就是对角度进行P控制呀

627213143麻烦大神加我,还有点想请教
回复 支持 反对

使用道具 举报

10

主题

247

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2320
QQ
威望
1335
贡献
471
兑换币
99
注册时间
2012-2-8
在线时间
257 小时
毕业学校
西北师大
8#
发表于 2012-4-14 23:41:44 | 只看该作者
bu1193510501 发表于 2012-4-11 19:21
float Q =1,R = 300;
   static float RealData = 0,RealData_P = 0;
   float NowData = 0,NowData_P ...

请问楼主你用这个程序做的怎么样了,应该站起来了吧...
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
威望
186
贡献
71
兑换币
0
注册时间
2012-3-15
在线时间
13 小时
毕业学校
大连理工城市学院
9#
发表于 2012-4-16 22:38:11 | 只看该作者
请问楼上的  用这个程序输出的波形真确吗?我用的就是这个 不过波形变化太不明显啦
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3484
威望
1687
贡献
1007
兑换币
720
注册时间
2012-3-19
在线时间
395 小时
10#
 楼主| 发表于 2012-4-17 12:49:29 | 只看该作者
只羡鸳鸯不羡 发表于 2012-4-16 22:38
请问楼上的  用这个程序输出的波形真确吗?我用的就是这个 不过波形变化太不明显啦


回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-6 04:58 , Processed in 0.056588 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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