关于MPU6050陀螺仪模块的测量误差分析

本项目中使用的是MPU6050模块,如图 1所示。该模块集成了一片MPU6050芯片和一片STM8S003F3P6单片机,具有串口和I2C接口。MPU6050中的DMP(数字运动处理器)对姿态进行融合,STM8单片机通过IIC读取DMP的处理结果,再添加上包头串行输出三轴加速度、三轴角速度、三轴角度和温度数据,输出频率为100Hz

                                                                                                关于MPU6050陀螺仪模块的测量误差分析_第1张图片

图 1

MPU6050芯片内部由四部分组成:加速度计、陀螺仪、DMP(Digital Motion Processing)、温度传感器。DMP部分的Datasheet原文介绍:The DMPacquires data from accelerometers, gyroscopes, and additional 3rdparty sensorssuch as magnetometers, and processes the data. The resulting data can be readfrom the DMP’s registers, or can be buffered in a FIFO. The DMP has access toone of the MPU’s external pins, which can be used for generating interrupts.

二、解决方案分析

MPU6050InvenSense公司推出的一款低成本的6轴传感器芯片,包括三轴加速度,三轴角速度。其体积小巧,用途非常广。做平衡小车,四轴飞行器,飞行鼠标等等,都是必不可少而且是最优的传感器解决方案。不论是做平衡还是四轴飞行器,关键的问题在于模块姿态的确定,通常需要用到积分运算与卡尔曼滤波算法,需要较强的数学功底与编程能力,因此以下主要分析姿态确定问题。

虽然6050芯片能够输出三轴加速度和三轴角速度的数据,但实际应用的时候,直接使用的确不是这些量,而是需要根据这些数据解算出三轴的角度数据。比如平衡小车,需要算出模块的俯仰角,然后控制算法根据角度大小控制小车轮子的移动。四轴飞行器需要根据俯仰角度、滚转角度,和飞行指令来调节四个电机的转速。

6轴的原始数据得到三轴的角度计算是一个比较复杂的运动学解算过程,有三点需要注意的问题:
1.
三轴姿态的解算不能直接积分。因为三轴是有耦合的,只有在三轴角度为小角度的时候可以这么算,角度大了以后,比如60度了,这么算的误差就很大。标准的做法是用四元数的方法做姿态解算,积分的方法可以用4阶龙格-库塔法,或者4Gill法。详情请参考:航空航天器运动的建模——飞行动力学的理论基础肖业伦著北京航空航天大学出版社。
2.
积分运算的累积误差。角速度积分运算是有累积误差的,累积误差在短时间内表现不明显,只要零点漂移处理得好了,1分钟以内的漂移都不大,但时间长了,就会有累积误差。稳像仪中使用的MPU6050模块零点漂移比较小,5分钟大概0.02度。
3.
角速率零点漂移。所谓零点漂移就是模块静止的时候,我们认为正常的输出应该是0,或者均值为0的数据,但是实际上6050的输出不是,经测量,小于0.15/

在纸上画出四个角度,分别为0度、26.6度、45度、90度,将纸固定在桌子上,每次将陀螺仪模块旋转到对应的位置,经过多次实验(实验结果如图2所示),证实所使用的MPU6050模块的角度输出确实存在很大的误差。但是从datasheet上看,MPU6050芯片和其他精度高且价格昂贵的芯片如ADIS16系列差别不是大,那么极有可能是姿态融合算法部分的问题MPU6050模块的姿态融合是在STM8单片机中实现的,而且没有源码,精度难以保证。

关于MPU6050陀螺仪模块的测量误差分析_第2张图片

图2

三、总结

综上所述,有两种解决方法:

一、使用MPU6050模块输出的角速度和加速度的原始数据,用算法对其进行姿态融合,得到角度。综合利用陀螺仪和加速度计的特点,优势互补获得准确的姿态角度,方法就是用卡尔曼滤波做数据融合。大致的思路是将模块的姿态用四元素表示,作为系统的状态量,模块的姿态运动学方程作为滤波的状态转移方程,加速度信息作为滤波的观察量信息,然后利用卡尔曼滤波的计算方法迭代计算更新,详细的过程可以参考惯性导航方面的书籍。不过卡尔曼滤波算法比较复杂,需要用到矩阵运算等等,而且MPU6050模块是IIC接口输出的。

二、采用更高精度的陀螺仪模块,直接得到角度。

你可能感兴趣的:(图像处理算法相关)