赞
踩
在学习姿态解算的时候,DMP的库对我这种小白就像文盲看文言文版的西游记一样,以至于学了几个星期一点进展都没有,甚至连用什么库函数都不知道,而且对IIC函数的适配程度要求很高,以至于要为DMP定制IIC函数。对我来说无疑是的痛苦和折磨,在查阅大量例程时,我发现一种简单无脑的直接从原始数据得到倾角的方法,以防忘记我就马上写了出来,供大家参考,也是为自己日后复习的时候图个方便。
原来我一直不能理解加速度计到底是什么,不是做变速运动的物理才有加速度吗,为什么静止不动也有加速度显示。后来通过这个公式画图,我发现在X轴和Y轴的加速度原来是从Z轴的加速度也就是从重力加速度分解来的,并不是本身运动产生的加速度。
假设将MPU6050放置在一个斜面上,读数显示的Accel.Z就是垂直于斜面向下的力,则Accel.X(或Y)就是平行于斜面向下的力。则tan(A) = Accel.X(或Y) / Accel.Z。
Accel.X,Accel.Y,Accel.Z 均为读取寄存器读出来的原始数据。
因为 tan(A) = Accel.X(或Y) / Accel.Z,
所以 A=atan( Accel.X(或Y) / Accel.Z )
X轴的倾角为:atan2(ACC.Y, ACC.Z) * 180 / 3.1415926
Y轴的倾角为:atan2(ACC.X, ACC.Z) * 180 / 3.1415926
注意对应的Accel.X和Accel.Y不要用反了。
记得#include <math.h>
- Accel_Angle_x = atan2(ACC.Y, ACC.Z) * 180 / PI; // 计算倾角,转换单位为度
- Accel_Angle_y = atan2(ACC.X, ACC.Z) * 180 / PI; // 计算倾角,转换单位为度
显示出来的数据与实际方向相反,如果有需要的话可以取反或者将芯片旋转180°。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。