智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 9633|回复: 27
打印 上一主题 下一主题

这段互补滤波的代码你们能看懂么?

  [复制链接]

8

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1813
威望
1289
贡献
344
兑换币
146
注册时间
2013-9-7
在线时间
90 小时
跳转到指定楼层
1#
发表于 2013-11-30 21:57:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

#include "IMU.h"
#include <math.h>

//----------------------------------------------------------------------------------------------------
// Definitions

#define Kp 2.0f                        // proportional gain governs rate of convergence to accelerometer/magnetometer
#define Ki 0.005f                // integral gain governs rate of convergence of gyroscope biases
#define halfT 0.5f                // half the sample period

//---------------------------------------------------------------------------------------------------
// Variable definitions

float q0 = 1, q1 = 0, q2 = 0, q3 = 0;        // quaternion elements representing the estimated orientation
float exInt = 0, eyInt = 0, ezInt = 0;        // scaled integral error

//====================================================================================================
// Function
//====================================================================================================

void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az) {
        float norm;
        float vx, vy, vz;
        float ex, ey, ez;         

        // normalise the measurements
        norm = sqrt(ax*ax + ay*ay + az*az);      
        ax = ax / norm;
        ay = ay / norm;
        az = az / norm;      
把加计的三维向量转成单位向量。


        // estimated direction of gravity
        vx = 2*(q1*q3 - q0*q2);
        vy = 2*(q0*q1 + q2*q3);
        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;


        // error is sum of cross product between reference direction of field and direction measured by sensor
        ex = (ay*vz - az*vy);
        ey = (az*vx - ax*vz);
        ez = (ax*vy - ay*vx);





        // integral error scaled integral gain
        exInt = exInt + ex*Ki;
        eyInt = eyInt + ey*Ki;
        ezInt = ezInt + ez*Ki;

        // adjusted gyroscope measurements
        gx = gx + Kp*ex + exInt;
        gy = gy + Kp*ey + eyInt;
        gz = gz + Kp*ez + ezInt;





        // integrate quaternion rate and normalise
        q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
        q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
        q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
        q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;  


        // normalise quaternion
        norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
        q0 = q0 / norm;
        q1 = q1 / norm;
        q2 = q2 / norm;
        q3 = q3 / norm;
}

//====================================================================================================
// END OF CODE
//====================================================================================================

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
26
威望
24
贡献
2
兑换币
3
注册时间
2015-9-13
在线时间
0 小时
毕业学校
火星
28#
发表于 2015-9-13 13:57:15 | 只看该作者
wen123 发表于 2013-12-1 16:45
其实你这个是带有滤波功能的四元素算法!!!!!!!

请问这段代码中“imu.h”这个头文件哪里有
回复 支持 反对

使用道具 举报

10

主题

273

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5739
威望
4871
贡献
348
兑换币
802
注册时间
2013-11-17
在线时间
260 小时
27#
发表于 2014-8-2 18:15:03 | 只看该作者
MARK,学习了!
回复 支持 反对

使用道具 举报

34

主题

820

帖子

0

精华

跨届大侠

酷比的日子又要来了‘

Rank: 10Rank: 10Rank: 10

积分
8546

论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章资源大师奖章

QQ
威望
4018
贡献
3210
兑换币
2965
注册时间
2014-5-21
在线时间
659 小时
26#
发表于 2014-8-2 03:28:33 | 只看该作者
表示看不懂
回复 支持 反对

使用道具 举报

1

主题

142

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2057
威望
1042
贡献
497
兑换币
693
注册时间
2013-2-26
在线时间
259 小时
25#
发表于 2014-8-2 00:44:43 | 只看该作者

RE: 这段互补滤波的代码你们能看懂么?

wen123 发表于 2013-12-1 16:44
互补滤波是这样的:陀螺积分角度+=角速度*dt;融合角度=陀螺权值*陀螺积分角度+(1-陀螺权值)*加速度角度;还 ...

多谢楼主呀!
回复 支持 反对

使用道具 举报

1

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
威望
214
贡献
126
兑换币
144
注册时间
2014-5-3
在线时间
36 小时
毕业学校
重庆三峡学院
24#
发表于 2014-7-30 22:52:01 | 只看该作者
大哥耶,你这个四元数是不是直接传从mpu6050读出来的数据就行了啊,不用对数据再做什么变换了吗?
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
威望
161
贡献
93
兑换币
93
注册时间
2013-5-21
在线时间
31 小时
毕业学校
北华
23#
发表于 2014-4-3 19:51:00 | 只看该作者
#include "IMU.h"   X128没有这个头文件怎么办啊?
回复 支持 反对

使用道具 举报

8

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1813
威望
1289
贡献
344
兑换币
146
注册时间
2013-9-7
在线时间
90 小时
22#
 楼主| 发表于 2013-12-3 17:05:15 | 只看该作者
wen123 发表于 2013-12-2 18:32
你也经常逛么?

还行,现在四轴做的也差不多了
回复 支持 反对

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
21#
发表于 2013-12-2 18:32:59 | 只看该作者
skldjfkjf 发表于 2013-12-2 14:59
对了,你是哪个大学的,膜拜下

膜拜就算了吧!!共同进步!!
回复 支持 反对

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
20#
发表于 2013-12-2 18:32:14 | 只看该作者
skldjfkjf 发表于 2013-12-2 14:58
最大梯度法是那些人自创的概念,我就知道你是在那里混的

你也经常逛么?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-26 00:24 , Processed in 0.063532 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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