分享我的MPU6050+卡尔曼+一阶互补+二阶互补滤波

2019-07-21 06:32发布

本帖最后由 wszdxmh 于 2016-8-23 15:12 编辑

不说,上图
X-Kalman.png
X-Kalman滤波
Y-Kalman.png
Y-Kalman滤波
Z-Kalman.png
Z-Kalman滤波,这个滤得不是很好。
X-Thr.png
X轴三种滤波对比图
Big.png
放大图
一阶互补跟随快,但是抗干扰也会差一点,其他两个要等几个周期才会跟随比较好,应该是要更新参数。
上代码。
STM32F103VModel.zip (409.82 KB, 下载次数: 5987) 2016-7-22 09:53 上传 点击文件名下载附件
滤波代码

匿名上位机
ANO_TC匿名科创地面站v4.06.rar (13.66 MB, 下载次数: 17406) 2016-7-22 10:17 上传 点击文件名下载附件
匿名地面站V4.0

UCOSIII移植版
STM32F103C8T6Model-UCOSIII.zip (1.65 MB, 下载次数: 7163) 2016-8-23 15:11 上传 点击文件名下载附件
UCOSIII版


现在研究PID算法,有空再更。








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
48条回答
华丽与creazy
1楼-- · 2019-07-27 08:12
wszdxmh 发表于 2016-8-9 20:00
http://www.openedv.com/forum.php?mod=viewthread&tid=79275&page=1#pid459593
目测你是移植了一个别人 ...

波形图?不知道怎么弄出波形图,软件吗?
华丽与creazy
2楼-- · 2019-07-27 11:25
wszdxmh 发表于 2016-8-9 20:00
http://www.openedv.com/forum.php?mod=viewthread&tid=79275&page=1#pid459593
目测你是移植了一个别人 ...

你能加下我的QQ吗?拜托啦,976675605或者你告诉我你的QQ或者微信什么的,求教
JueSe
3楼-- · 2019-07-27 11:46
         顶
wszdxmh
4楼-- · 2019-07-27 14:47
 精彩回答 2  元偷偷看……
华丽与creazy
5楼-- · 2019-07-27 19:19
wszdxmh 发表于 2016-8-9 20:00
http://www.openedv.com/forum.php?mod=viewthread&tid=79275&page=1#pid459593
目测你是移植了一个别人 ...

我发现我的这两行代码跟你的不同,我的是
MPU6050_Real_Data.Accel_X = -(float)(MPU6050_Raw_Data.Accel_X)/8192.0;
MPU6050_Real_Data.Gyro_Y=-(float)(MPU6050_Raw_Data.Gyro_Y - gyroADC_Y_offset)/65.5;
你的是        if (Accel_x<32764) x = Accel_x / 16384;
        else              x = 1 - (Accel_x - 49152) / 16384;
        if (Gyro_y<32768) Gyro_y = -(Gyro_y / 16.4);//16.4 LSB/(deg/s)
       
        if (Gyro_y>32768) Gyro_y = +(65535 - Gyro_y) / 16.4;
是因为这两行代码的原因吗?我们除的参数不同
华丽与creazy
6楼-- · 2019-07-27 20:54
wszdxmh 发表于 2016-8-9 20:00
http://www.openedv.com/forum.php?mod=viewthread&tid=79275&page=1#pid459593
目测你是移植了一个别人 ...

我发现我的这两行代码跟你的不同,我的是 MPU6050_Real_Data.Accel_X =-(float)(MPU6050_Raw_Data.Accel_X)/8192.0; MPU6050_Real_Data.Gyro_Y=-(float)(MPU6050_Raw_Data.Gyro_Y- gyroADC_Y_offset)/65.5;你的是     if (Accel_x<32764) x =Accel_x / 16384;         else              x = 1 - (Accel_x - 49152) /16384;         if(Gyro_y<32768) Gyro_y = -(Gyro_y / 16.4);//16.4 LSB/(deg/s)                  if(Gyro_y>32768) Gyro_y = +(65535 - Gyro_y) / 16.4;是这个原因吗? 这是我卡尔曼滤波后的倾角,我朝一个方向改变倾角,发现它却先向反方向变化,然后才向这个方向变化,并且还会超过,再才到改变后的角度下图红 {MOD}是滤波后的倾角,白 {MOD}是Angle_ax(即加速度计转变为角度后的值),黄 {MOD}是Gyro_y(即角速度)


一周热门 更多>