注册 登录
查看: 1094|回复: 15

山外直立参考中级篇的卡尔曼滤波

[复制链接]
发表于 2015-1-22 16:26:48 | 显示全部楼层 |阅读模式
请问山外老师
//**************************************************************************
//   Kalman滤波
//**************************************************************************

float angle, angle_dot;         //外部需要引用的变量


这个angle  应该是加速度和陀螺仪融合计算出来的角度吧,那,那个angle_dot呢有啥用?
来自PC客户端 来自PC客户端
回复

使用道具 举报

发表于 2015-1-22 16:29:23 | 显示全部楼层
中级篇是用清华滤波的。
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:30:41 | 显示全部楼层
同求 还有请问卡尔曼滤波里  这句话是是什么意思?

    QingJiao =  RealData;
      
    QingJiao = RealData - 0.9;  //输出俯仰角和翻滚角???

为什么输出的 RealData 不是 融合角度?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 16:31:18 | 显示全部楼层
缪沛若 发表于 1421915363
中级篇是用清华滤波的。
给的有卡尔曼的程序。说可以参考的,手头上有一份卡尔曼不太一样,就是不知道那个angle_dot。干嘛的 好像是和陀螺仪的偏差量,但是不知道用在哪里
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 16:32:28 | 显示全部楼层
F117 发表于 1421915441
同求 还有请问卡尔曼滤波里  这句话是是什么意思?

    QingJiao =  RealData;
      
    QingJiao = RealData - 0.9;  //输出俯仰角和翻滚角???

为什么输出的 RealData 不是 融合角度?
我没有用 清华的融合滤波,想用卡尔曼,又不知道 他给的第二个参数是用在哪的干嘛的
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:42:48 | 显示全部楼层
这个 就是 卡尔曼 滤波的 最后 几句
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:43:11 | 显示全部楼层
if(AD_Value1 < 10) AD_Value1 = 0;
    if(AD_Value2 < 10) AD_Value2 = 0;
    if(AD_Value3 < 10) AD_Value3 = 0;
   
   if(Gyro > 4090) Gyro += 1000;    ///这些1000,,500是什么数据?
   else
   if(Gyro > 4084) Gyro += 500;
   
   if(Gyro < 55)   Gyro -= 1000;
   else
   if(Gyro < 60)   Gyro -= 500;
      
    Acc_x = Acc_x - 2042.0;
    Acc_z = Acc_z - 2076.0;
    Gyro  = Gyro  - 2000.0;
    Gyro_Data = Gyro;
   
    OutData[2] =  Gyro_Data;
    accelerometer_angle = atan2f(Acc_x,Acc_z);  //角加速度

    OutData[0] = accelerometer_angle*100; //
    gyroscope_rate = Gyro*0.0095;        //重力加速度
   
    NowData = RealData + gyroscope_rate*0.005;// X(k|k-1)=A X(k-1|k-1)+B U(k)  ; A=1,B=0.005, U(k)=gyroscope_rate,
                                             //  X(k-1|k-1)=RealData,     NowData= X(k|k-1)
    NowData_P = sqrt(Q*Q+RealData_P*RealData_P); //P(k|k-1)=A P(k-1|k-1) A’+Q  ; P(k|k-1)= NowData_P
                                                 //RealData_P=P(k-1|k-1);为什么要开方和相乘???
    Kg = sqrt(NowData_P*NowData_P/(NowData_P*NowData_P+R*R)); //Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R);增益;
                                                              //这里又为什么要开方和R*R???
    RealData = NowData + Kg*(accelerometer_angle - NowData); //X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1))
    RealData_P = sqrt((1-Kg)*NowData_P*NowData_P);  // P(k|k)=(I-Kg(k) H)P(k|k-1)
                                                    //这里为什么开方??
    ws21fq
    OutData[1] = QingJiao*1000;
    OutPut_Data();
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:43:55 | 显示全部楼层
重发一下  
if(AD_Value1 < 10) AD_Value1 = 0;
    if(AD_Value2 < 10) AD_Value2 = 0;
    if(AD_Value3 < 10) AD_Value3 = 0;
   
   if(Gyro > 4090) Gyro += 1000;    ///这些1000,,500是什么数据?
   else
   if(Gyro > 4084) Gyro += 500;
   
   if(Gyro < 55)   Gyro -= 1000;
   else
   if(Gyro < 60)   Gyro -= 500;
      
    Acc_x = Acc_x - 2042.0;
    Acc_z = Acc_z - 2076.0;
    Gyro  = Gyro  - 2000.0;
    Gyro_Data = Gyro;
   
    OutData[2] =  Gyro_Data;
    accelerometer_angle = atan2f(Acc_x,Acc_z);  //角加速度

    OutData[0] = accelerometer_angle*100; //
    gyroscope_rate = Gyro*0.0095;        //重力加速度
   
    NowData = RealData + gyroscope_rate*0.005;// X(k|k-1)=A X(k-1|k-1)+B U(k)  ; A=1,B=0.005, U(k)=gyroscope_rate,
                                             //  X(k-1|k-1)=RealData,     NowData= X(k|k-1)
    NowData_P = sqrt(Q*Q+RealData_P*RealData_P); //P(k|k-1)=A P(k-1|k-1) A’+Q  ; P(k|k-1)= NowData_P
                                                 //RealData_P=P(k-1|k-1);为什么要开方和相乘???
    Kg = sqrt(NowData_P*NowData_P/(NowData_P*NowData_P+R*R)); //Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R);增益;
                                                              //这里又为什么要开方和R*R???
    RealData = NowData + Kg*(accelerometer_angle - NowData); //X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1))
    RealData_P = sqrt((1-Kg)*NowData_P*NowData_P);  // P(k|k)=(I-Kg(k) H)P(k|k-1)
                                                    //这里为什么开方??
   
    QingJiao =  RealData;
      
    QingJiao = RealData - 0.9;  //输出俯仰角和翻滚角???
    OutData[1] = QingJiao*1000;
    OutPut_Data();
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:50:41 | 显示全部楼层
太久没搞直立咯,顶一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 16:51:14 | 显示全部楼层
玄来玄去 发表于 1421916641
太久没搞直立咯,顶一个
别光顶,讲讲呗。版主
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-22 16:53:35 | 显示全部楼层
jixian79 发表于 2015-1-22 16:51
别光顶,讲讲呗。版主

太久没搞,忘光了。多读一下代码,多做注释,消化一下吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 16:55:02 | 显示全部楼层
玄来玄去 发表于 1421916815
太久没搞,忘光了。多读一下代码,多做注释,消化一下吧。
唉,例程的卡尔曼 注释很少
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-2-9 08:26:48 | 显示全部楼层
angle_dot是陀螺仪数据。调直立的时候d参数要乘以这个值
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2015-3-27 18:20:43 | 显示全部楼层
angle_dot是陀螺仪计算的值后减去偏差的值,其实跟陀螺仪计算后的值差不了多少
回复 支持 反对

使用道具 举报

发表于 2015-3-30 16:15:48 | 显示全部楼层
你知道你的 R吗???
回复 支持 反对

使用道具 举报

发表于 2015-7-8 15:12:37 | 显示全部楼层
注释太少,真心看不懂,大神能给解释一下吗???????
回复 支持 反对

使用道具 举报

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

本版积分规则

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