结合加速度计和陀螺仪的平衡解决方案
首先通过ADC采样,读出陀螺仪和编码器的电压值,并将其转化为可用单位:
1.偏移(offset):让陀螺仪静止,加速度计保持水平并静止,这时候读到电压值,就是偏移值。如果读数不稳定,取平均值即可。
2.转换系数(scale):传感器输出电压值乘以系数,得到我们想要的单位,这个系数可以在传感器的数据手册(datasheet)中找到。
关于加速度计
根据加速度计Y轴和X轴的值,我们可以用反正切函数求出角度值,没有Y轴,我们可以通过sin或者cos以及X轴值,求得角度值(重力加速度是已知的)。

数字滤波器
实际单片机用的积分,其实就是个累加;
设采样间隔为dt,每次采到的角速度值是gyro,那么,
角度可以这样得到: angle += gyro * dt;
低通滤波器
低通滤波的目的,保留长期变化,滤掉短暂变化。让信号一点一点的起作用而不是一下子猛烈作用,即在时间范围上取平均。
angle = 0.98 * angle + 0.02 * x_acc;//x_acc是加速度计的实时角度值。

高通滤波器
数字高通滤波器,不那么容易解释,它跟低通滤波器是刚好相反的:除去长期变化,保留短暂变化。高通滤波器加于陀螺仪,可以滤掉温漂;
采样周期
程序每次大循环用的时间,下面标记为dt;
时间常数
时间常数用来定义滤波器对信号的作用;对于低通滤波器,信号长度比时间常数持久的,可以通过滤波器;对于高通滤波器,信号长度比时间常数短的,可以通过滤波器;对于一个数字滤波器:
y = a * y + (1-a) * x ;

时间常数tau可以这样计算:
tau = (a*dt) / (1-a) <—> a = tau/(tau + dt);

所以,当你知道了要用的时间常数,就可以通过上述公式得到滤波器的系数a;
互补
互补意味着滤波器的两个部分的和总为1,以确保得到的结果是准确的,也使得线性估算变得可行;这里用到的角度互补滤波,并不是完全“互补”,不过得到的结果还能满足我们需求。

angle = (0.98) * (angle + gyro*dt) + (0.02) * (x_acc);
如果这里滤波器的循环频率时每秒100次(亦即循环周期 = 0.01s),那么上述公式的时间常数就是:
tau = (a * dt)/(1-a) = ( 0.98*0.01s )/0.02s = 0.49s

这个时间常数确定了陀螺仪和加速度计的信任边界。信号时间周期低于半秒时,陀螺仪占主导地位,加速度计的噪声除掉;信号时间周期大于半秒时,加速度计的角度平均值就占据主导地位,有温漂的陀螺仪可以站一边去。

实验,是检验时间常数的标准之一。首先你要挑一个时间常数,然后算出滤波器的系数a,弄到代码中去。检查角度拟合曲线,如果拟合角度与实际角度总相差那么2°,就说明陀螺仪的温漂影响较大,你可能需要把时间常数设置到1s以下,来保证加速度计能尽快校正陀螺仪的温漂值。不过,时间常数越短,就意味着加速度计的噪声更容易通过。

  1. MPU6050陀螺仪

// 陀螺仪
float angleAx,gyroGy;
MPU6050 accelgyro;
int16_t ax, ay, az, gx, gy, gz;

accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);//原始数据采集
angleAx=atan2(ax,az)*180/PI;//加速度计算角度
gyroGy=-gy/131.00;//陀螺仪角速度,注意正负号与放置有关

2.滤波参数及函数
//一阶互补滤波
float K1 =0.05; // 对加速度计取值的权重
float dt=20*0.001;//注意:dt的取值为滤波器采样时间
float angle1;

void Yijielvbo(float angle_m, float gyro_m)//采集后计算的角度和角加速度
{
angle1 = K1 * angle_m+ (1-K1) * (angle1 + gyro_m * dt);
}

//二阶互补滤波
float K2 =0.2; // 对加速度计取值的权重
float x1,x2,y1;
float dt=20*0.001;//注意:dt的取值为滤波器采样时间
float angle2;

void Erjielvbo(float angle_m,float gyro_m)//采集后计算的角度和角加速度
{
x1=(angle_m-angle2)(1-K2)(1-K2);
y1=y1+x1*dt;
x2=y1+2*(1-K2)*(angle_m-angle2)+gyro_m;
angle2=angle2+ x2*dt;
}

转载链接:http://www.geek-workshop.com/thread-10172-1-1.html

浅谈陀螺仪和加速度计的互补滤波相关推荐

  1. 一文读懂卡尔曼滤波——卡尔曼滤波融合IMU的陀螺仪和加速度计实践(一)

    卡尔曼的基本原理以及公式网上有很多,可以参照大神博客: https://blog.csdn.net/m0_38089090/article/details/79523784?ops_request_m ...

  2. 什么是陀螺仪的dr算法_陀螺仪和加速度计融合论文范文 有关车载GPS/DR组合导航系统的DR算法毕业论文写作资料...

    简介:关于本文可作为加速度计陀螺仪方面的大学硕士与本科毕业论文加速度计陀螺仪论文开题报告范文和职称论文论文写作参考文献下载. 赵艳飞 张树君 (北京交通大学计算机与信息技术学院 北京 100044) ...

  3. [异常解决] MPU6050启动异常读出陀螺仪和加速度计的值全为0的解决办法

    在调试一个自己做的手环,每次用keil烧写好程序运行的蓝牙.陀螺仪都是正常的.但是掉电再上电之后蓝牙是好的.陀螺仪可以读出ID但是读出的加速度和角速度数据全为0. 下面是发生问题时main函数的前面部 ...

  4. android陀螺仪测试工具,修改安卓陀螺仪和加速度计的sensor抽象层HAL

    项目具体需求 硬件平台:全志A31 SOC,512RAM,2G ROM: 软件平台:android 4.4xx 内核版本:linux3.4.xx 1.打开内核选项: Devices Drivers H ...

  5. 能否利用陀螺仪和加速度计,计算位移?

    需求:能否利用陀螺仪和加速度计,计算位移? 先看传感器的用途: 陀螺仪:强项在于测量设备自身的旋转情况,但不能确定设备的方位(对角度旋转,瞬时检测,非常精确) 加速计:测量设备的受力情况(相对外部参考 ...

  6. 陀螺仪和加速度计MPU6050的单位换算方法

    对于四轴的初学者,可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法.下面我们来具体描述下这些转换方法. 我们首先来看陀螺仪数据.在MPU6050的手册里面,提供了一个陀螺仪数据表如下: ...

  7. 非卡尔曼滤波融合陀螺仪和加速度计数据,kalman gyroscope accelerometer

    [转帖请注明出处:blog.csdn.net/lanmanck] 看到一篇说其实简单化卡尔曼滤波器也可以用的文章,特记录下来: 问题提出: http://stackoverflow.com/quest ...

  8. iphone 陀螺仪 测试软件,iPhone-如何查找陀螺仪和加速度计的行进距离?

    我对此表示怀疑并放弃了(晚上晚了,似乎什么都没得到). 这用于Unity3d项目. 如果有人想在我离开的地方接机,我将很乐于详细介绍所有这些东西. 基本上在发现某些误报之后,我想我会尝试使用低通滤波器 ...

  9. 对比直立车模控制中的互补滤波、Karlman滤波和参考滤波方案

    前几天,有参加智能车竞赛的同学在公众号上询问一个关于直立车模控制中角度融合算法的问题.感觉这是所有初次准备智能车模竞赛的同学都会碰到的问题. 卓大大,请问您可以针对卡尔曼滤波.互补滤波.清华滤波的原理 ...

最新文章

  1. dubbo官方文档中文_Pandas中文官方文档:基础用法5
  2. 计算机图形学真实绘图实验报告,计算机图形学实验报告.doc
  3. Java定时任务调度工具
  4. 矩阵分析与多元统计1 线性空间与线性变换3 特征值
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170407
  6. King of the Ether
  7. 结构化程序设计03 - 零基础入门学习Delphi12
  8. [转载]Mac使用vim命令修改配置文件内容
  9. LeetCode 1021. 删除最外层的括号(栈)
  10. Js拼接嵌套php代码,分享一个js文件中嵌套php会出错的问题
  11. 在linux中编写shell脚本文件,如何编写简单的Shell脚本(Script)文件之Linux的基本操作...
  12. 测试手机游戏平均帧率软件,想测试手机游戏帧率吗?最Skr帧率测试步骤都在这里!...
  13. python内置高级数据结构
  14. 打破多项存储世界记录,宏杉科技表示很淡定
  15. 说一说我电脑上的那些必备软件
  16. 织梦dedecms蓝色大学院校学校网站模板(自适应手机移动端)
  17. 【清除office待激活密钥】
  18. win10系统幻灯片播放卡顿
  19. 抖音直播可以看全场回放了?怎么进行有效复盘?
  20. 指纹识别综述(5): 分类与检索

热门文章

  1. TypeError: ‘BaseQuery‘ object is not callable问题解决
  2. SQL Server 聚合函数
  3. text rank java 实现_使用TextRank实现的关键字提取
  4. 制作ppt中几个比较实用好玩的技巧
  5. 【Redis实现系列】RedisServer实现
  6. Odoo启动过程详解
  7. 计算机仿真与MATLAB-32学时 考试复习
  8. 云计算技术与应用课后答案第六章
  9. 如何快速有效的提高新站权重
  10. 【基础理论】专题二:一个合格的实验设计是怎样的?