OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4695|回复: 6

请问这个用卡尔曼滤波法解算MPU6050代码什么意思,哪位大佬可以帮我讲解下,非常感谢

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2022-2-8
在线时间
8 小时
发表于 2022-3-13 16:43:06 | 显示全部楼层 |阅读模式
1金钱
char str[100]={0};
        short aacx,aacy,aacz;                //加速度传感器原始数据
        short gyrox,gyroy,gyroz;        //陀螺仪原始数据
        float aacx1,aacy1,aacz1;                //加速度传感器原始数据
        float gyrox1,gyroy1,gyroz1,angle1;        //陀螺仪原始数据
        float Q=10000;
        float dt=0.03;
        float w=0;
        float angle=0;
        float angle2=0;
        float p1=0;
        float p2=0;
        float p3=0;
        float p4=0;
        int q=1;
        static float k1,k0,LTR1,LTR0,Ts;
        static float TTR=100;
  int R=10;
        static float mea;
        static int i=0;
        static float j=0;

        char a[100]={0};
        char b[100]={0};
        char c[100]={0};
        char d[100]={0};
////    *********************************卡尔曼滤波****************************************//
                angle=angle+w*dt;
                p1=p1+(p2+p3)*dt+p4*dt*dt+0.5*dt*dt*dt*Q;
                p2=p2+p4*dt+0.25*dt*dt*dt*dt*Q;               
                p3=p3+p4*dt+dt*dt*Q;
                p4=p4+0.5*dt*dt*dt*Q;
                k0=p2/(p4+R);
    k1=p4/(p4+R);
                angle=angle+k0*(mea-w);
                w=w+k1*(mea-w);
                p1=p1-p3*k0;
                p2=p2-p4*k0;
                p3=p3-p3*k1;
                p4=p4-p4*k1;
                if(i/10!=0)
                {
                angle=180*(atan2(aacx1,aacy1))/3.1415;
                i=0;
                       
                }
                LTR0=0.17*(aacx1*cos(angle*3.14/180)-aacy1*sin(angle*3.14/180))*cos(angle*3.14/180)+1.67*sin(angle*3.14/180);
   for(j=0;j<=3;)
                {
                       
                        Ts=Ts+0.1;
                        j=j+0.1;
                angle2=angle+mea*Ts;
               
                LTR1=0.16*(aacx1*cos(angle2*3.14/180)-aacy1*sin(angle2*3.14/180))*cos(angle2*3.14/180)+1.6*sin(angle2*3.14/180);
                        if(LTR1>=0.9||LTR1<=-0.9)
                        {       
             
                                if(q==0)
                                {
                                TTR=Ts;
                                j=4;
                                }
                          else
                                {
                                GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_RESET);       
                                q=0;
                                TTR=Ts;
                                j=4;
                                }
                        }                        
                }
                TTR=Ts;
                if(TTR>3)
                {
                        TTR=100;
                        q=1;
                        GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_SET);       
                }       
   sprintf(str,"angle=%.2f\r\n",angle);               
                LCD_ShowString(10,120,tftlcd_data.width,tftlcd_data.height,24,str);
                sprintf(a,"TTR=%.2f\r\n",TTR);       
                LCD_ShowString(10,160,tftlcd_data.width,tftlcd_data.height,24,a);
                sprintf(b,"LTR0=%.2f\r\n",LTR0);       
                LCD_ShowString(10,200,tftlcd_data.width,tftlcd_data.height,24,b);
                ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );

最佳答案

查看完整内容[请看2#楼]

卡尔曼是预测并且根据下一次的实际值来不断修正预测值 https://blog.csdn.net/u010720661/article/details/63253509看这里
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2022-3-13 16:43:07 | 显示全部楼层
卡尔曼是预测并且根据下一次的实际值来不断修正预测值
https://blog.csdn.net/u010720661/article/details/63253509看这里
个人CSDN 首页https://blog.csdn.net/qq_41930631
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2022-2-8
在线时间
8 小时
 楼主| 发表于 2022-3-13 16:56:25 | 显示全部楼层
尤其是从  if(i/10!=0)后面开始就看不懂了,也不知道abcd是什么,有的变量也看不太懂
回复

使用道具 举报

3

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2021-12-22
在线时间
34 小时
发表于 2022-3-14 16:25:20 | 显示全部楼层
这些就需要一些他内部的知识了,你可以上网查查。举个例子:比如ADC读取一些电压,他也是要转换才能得到真正想要的数据,所以这些内容你需要自己查看相关公式啊之类的
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2022-2-8
在线时间
8 小时
 楼主| 发表于 2022-3-24 18:21:28 来自手机 | 显示全部楼层
13169175513 发表于 2022-3-14 16:25
这些就需要一些他内部的知识了,你可以上网查查。举个例子:比如ADC读取一些电压,他也是要转换才能得到真 ...

好的,谢谢
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2022-3-25 11:34:19 | 显示全部楼层
也可以过滤一些你不需要的数据
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2022-2-8
在线时间
8 小时
 楼主| 发表于 2022-4-5 13:37:44 | 显示全部楼层
Cheng0717 发表于 2022-3-13 16:43
卡尔曼是预测并且根据下一次的实际值来不断修正预测值
https://blog.csdn.net/u010720661/article/details ...

谢谢,我还想问一下 我用卡尔曼滤波测角度 为什么静止的时候 角度往上增加呢,这个应该怎么解决呢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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