智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3019|回复: 2
打印 上一主题 下一主题

[光电] 卡尔曼滤波问题

[复制链接]

3

主题

15

帖子

0

精华

高级会员

Rank: 4

积分
728
威望
315
贡献
329
兑换币
58
注册时间
2012-8-15
在线时间
43 小时
跳转到指定楼层
1#
发表于 2012-11-17 19:40:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


我是第八届光电组新手,正在做直立部分调试,下面的卡尔曼滤波程序有些不懂,求解释!!!
程序中的这几句有何作用呀?if(Gyro > 4090) Gyro += 1000;
else
if(Gyro > 4084) Gyro += 500;

if(Gyro < 55) Gyro -= 1000;
else
if(Gyro < 60) Gyro -= 500;

那位大神知道呀?
全部程序如下:
#include "main.h"
volatile float QingJiao = 0;
volatile float Gyro_Data = 0;
void kalman_update(void)
{

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;

while(!ATD0STAT0_SCF); //等待转换完成

Acc_x = (float)ATD0DR1;
Acc_z = (float)ATD0DR2;
Gyro = (float)ATD0DR0;

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 = 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

主题

354

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3248

优秀会员奖章活跃会员奖章在线王奖章

威望
1520
贡献
910
兑换币
666
注册时间
2012-4-28
在线时间
409 小时
2#
发表于 2012-12-14 21:42:54 | 只看该作者
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

楼主,你的放大倍数9.1是怎么测得?
回复 支持 反对

使用道具 举报

55

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1987
威望
1361
贡献
22
兑换币
638
注册时间
2012-9-23
在线时间
302 小时
毕业学校
同济大学
3#
发表于 2013-1-22 14:34:25 | 只看该作者
楼主,我看到网上很流行一种卡尔曼滤波,但程序与你这个不一样,不知道有什么差别吗??求楼主解答
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 13:55 , Processed in 0.040187 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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