查看: 1448|回复: 0
打印 上一主题 下一主题

MPU6050原始数据分析

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-7 14:44:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有看过几次在论坛上面有人获取原始数据后不知道这些代表什么,甚至不知道为什么要获取这些数据。为什么要获取这些数据呢?看完下一个小节你就会明白。
下面我们来分析下这些数据代表什么。大家可以去看一个第七实验室的文档:
我们配置MPU6050的函数:
<font size="2">void MPU6050_Init(void)
{
        PMU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00);             //解除休眠状态
        PMU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07);            //陀螺仪采样率
        PMU6050_WriteReg(MPU6050_RA_CONFIG , 0x06);        
        PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00);          //配置加速度传感器工作在16G模式
        PMU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18);     //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
复制代码
主要是看下面这两行,如果你的配置不同的话,要根据寄存器数据手册和第七实验室的文档结合分析数据才行。下面我根据我的配置分析给大家看下。
PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00);          //配置加速度传感器工作在16G模式
        PMU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18);     //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
复制代码


查英文寄存器的手册可以知道我配置的陀螺仪的量程是±2000°/s,再查可知灵敏度是16.4LSB°/s。这里还要知道量程越大,测量精度越低。LSB的意思是最小有效位,为数字输出方式下使用;一般我们可以用mg/LSB来表示灵敏度,例如:mpu6050输出的位数为16位(2的16次方共65536个LSB)对应满量程,当量程为±8g时对应灵敏度就为16g/65536LSB=0.244140625mv/g,取倒数为4096LSB/g,因为mpu6050只能16位输出,所以测量范围越大,对应精度就越低。
根据第七实验室的描述一除可以知道我的陀螺仪绕3个轴的角速度最小是不够1°/s,最多是6°/s左右。当时我是保持静止测得的,不知道MPU6050这样子的结果大家是否满意,不知道大神们是否有办法让这几个值接近0呢??

接下来是加速度的分析,同样查英文寄存器手册可以知道我设置的加速度例程是±2g,灵敏度是16384LSB/g,这样子下来加速度在y轴上面是1g,这个是重力加速度,说明我放的时候是y轴在竖直方向上的,其他的两周加速度是接近于0,说明我放得很垂直啊,你也可以换其他的轴在竖直方向上,看那个轴显示出来的值是否是16384左右,我试了,结果是。更加说明我们的结果很对啦。
DMP移植
趁现在有空,先上传个视频让大家一睹为快。

你如果是初学者,只是获取了原始数据,那只能告诉你,其实原始数据没有处理没有多大的用处。我们还需要找将那些数据根据数学方面的东西转化为姿态有关的四元数和欧拉角,可以搜下融合算法。我顺便上传个文档,是关于这方面的,不过我还没有看。

接下来按照我的理解解释先怎么转化这个过程和转化后的四元数和欧拉角大概是什么,个人理解,不准确的话大神们帮忙指导下。
这个过程有两种办法,一种你可以去学下数学,然后编程把我们上面获取的原始数据转化为四元数和欧拉角;另一种是直接用MPU6050内部的DMP。前者我还没有学,到时可能要学下。DMP是什么呢?我学的时候也是一头雾水,老是看见别人在说DMP,好像很厉害的样子。看下面的解释,是我找的。
DMP的概念:
DMP是什么意思? DMP就是指 MPU6050内部集成的处理单元,可以直接运算出四元数和姿态,而不再需要另外进行数学运算。DMP的使用大大简化了四轴的代码设计。DMP是数字运动处理器的缩写,顾名思义mpu9150(mpu6050)并不单单是一款传感器,其内部还包含了可以独立完成姿态解算算法的处理单元。如在设计中使用DMP来实现传感器融合算法优势很明显。首先,invensense官方提供的姿态解算算法应该比像楼主这样的小白要可靠的多。其次,由DMP实现姿态解算算法将单片机从算法处理的压力中解放出来,单片机所要做的是等待DMP解算完成后产生的外部中断,在外部中断里去读取姿态解算的结果。这样单片机有大量的时间来处理诸如电机调速等其他任务,提高了系统的实时性。
直接上E文吧。标准一点。 DMP and DMP features: The DMP is aunique  hardware feature of InvenSenseMPU  devices  which  is  capable  of  computing  quaternion  data  from  sensor  readings,  performing  device  calibration,and also includes application specific features such as pedometerstep-counting. The DMP image (firmware) is held in volatile memory on the MPUand needs to be updated to the DMP every time the chip powers up to leveragethis functionality.
四元数和欧拉角是什么?我简单理解,简单解释。标准的自己去查下概念。四元数就是4个数,经过 DMP 或 数学+软件 你就可以得到四元数,四元数就是4个数,可以表征姿态,经过几个数学公式(下面编程会展示这几个公式)之后就可以的出姿态,姿态包括pitch,roll,yaw。这几个上传几张图片大家就知道是什么了。
摘自:http://blog.163.com/vipwdp@126/b ... 366201281935518196/
Z轴正方向为前进方向
pitch():俯仰,将物体绕X轴旋转(localRotationX)

yaw():航向,将物体绕Y轴旋转(localRotationY)

roll():横滚,将物体绕Z轴旋转(localRotationZ)

下面一段又是别人的解释。
“方向余弦,欧拉角,四元数东西太多,这里只简单说一下四元数,其他的自己找本惯性技术慢慢看吧。四元数是由一个实数单位和三个虚数单位i,j,k组成并具有实元的数,即q(p0,p1,p2,p3)=p0+p1i+p2j+p3k,其中三个虚实单位i,j,k可看做三维空间的单位向量在导航中,一般用的四元数均为特征四元数,形式如下,q=cosθ/2+nsinθ/2=cosθ/2+sin(θ/2)cosαi+sin(θ/2)cosβj+sin(θ/2)cosγk,n为转轴方向单位矢量,第二个等号后面的形式即为特征四元数,其中标量部分cosθ/2表示转角一半的余弦值,矢量部分表示了转角方向,即以原点为旋转中心,旋转的轴是(α, β, γ),( α^2 + β^2 + γ^2 = 1), 转θ角的旋转,用四元数表示就是,Q = (cos(θ/2); α sin(θ/2), β sin(θ/2), γ sin(θ/2)) 。”
MPU移植指的是要使用DMP功能官方已经给出移植的文档和移植的c文件、h文件等
下面先上资料:
。。。。。。。。。。。。。。。。。。
转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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