陀螺仪探究(MPU6050)

文章详细介绍了陀螺仪的工作原理,包括定轴陀螺仪和偏轴陀螺仪,以及它们在惯性导航系统中的作用。重点讨论了MPU6050陀螺仪的数据输出、信号分析,包括角速率零点漂移和积分漂移问题,以及电机振动对姿态数据的影响。同时提到了加速度计信号分析,揭示了噪声对测量精度的影响。
摘要由CSDN通过智能技术生成

1.4陀螺仪简介

        这个东西是基于角动量守恒的理论 用来感测和维持方向的装置,主要的构成是位于轴心 且可以旋转的转子构成.由于转子的角动量守恒.所以陀螺仪一旦开始旋转.则有抗拒方向改变的趋向.

                                                                定轴陀螺仪

                                                       偏轴陀螺仪

陀螺仪多用于惯性导航系统,一般情况下陀螺仪可用于陀螺罗盘以辅助或取代磁罗盘,或作为惯性导航系统的一部分。

       探测位置偏差

        陀螺仪通过测量旋转的惯性元件产生的力矩来感知设备的旋转速率和方向。这个力矩与旋转速率成正比,并且垂直于旋转轴。通过测量这个力矩,陀螺仪可以确定设备的旋转速率。

陀螺仪的输出通常是一个连续变化的电压信号或者数字信号,表示设备的旋转速率。通过积分这个信号,可以得到设备相对于初始位置的角度变化。

      MEMS陀螺仪

        MEMS陀螺仪使用了不同的工作原理。传统的陀螺仪是一个不停转动的物体,其转轴的指向不随承载它的支架旋转而变化。MEMS陀螺仪在基于传统陀螺仪特性的基础上利用科里奥利力来实现了设备的小型化。MEMS陀螺仪利用科里奥利力(旋转物体在径向运动时所受到的切向力),旋转中的陀螺仪可对各种形式的直线运动产生反映,通过记录陀螺仪部件受到的科里奥利力可以进行运动的测量与控制.

      科里奥利力

        科里奥利力是对旋转体系中进行运动的质点由于惯性相对于旋转体系产生偏移的现象的表述(看不懂吧 ? 我也懵 )

                

                            

首先对于地(我们的视角而言)竖直抛出一个物体 物理会沿着直线前进.如上图的图一.但是如果以旋转的圆而言 物体的轨迹是第二个图 .类比于下图:

进行受力分析: 

此时这个F. 即是所说的科里奥利力(第一次 我自己认为是科里奥利给)但是只存在于非惯性系统之中.(惯性系可以简单说成是相对地面静止的或者做匀速直线运动的参考系,而非惯性系则是相对地面做加速或者减速运动的参考系)

计算公式为:

           

陀螺仪信号分析

        设置MPU6050的陀螺仪量程为2000dps,在四轴飞行器水平静止在地面上(电机不转)时,通过IIC总线读取出陀螺仪的三个姿态角速度,并通过串口发送到PC端.在主程序硬件初始化完成后调用:

void MPU6050_RawDataOutput(void)
{
    u8 i;
    s16 main_acc_adc[3];
    s16 main_gyr_adc[3];
    float main_acc_raw[3];
    float main_gyr_raw[3];

     while (1) // Software Calc
    {
        MPU6050_ReadAcc(main_acc_adc);
        MPU6050_ReadGyr(main_gyr_adc);
        for (i = 0; i < 3; i++)
        {
            main_acc_raw[i] = (float) main_acc_adc[i] * IMU_ACC_SCALE *
                IMU_CONSTANTS_ONE_G;
            main_gyr_raw[i] = (float) main_gyr_adc[i] * IMU_GYR_SCALE *
                M_PI / 180.0F;
//            printf("acc_adc: %.8f gyro_adc: %.8f\r\n",
//            main_acc_adc[i], main_gyro_adc[i]);
//            printf("acc_raw: %.8f gyro_raw: %.8f\r\n",
//            main_acc_raw[i], main_gyr_raw[i]);
        }

        printf("%.8f %.8f %.8f %.8f\r\n", Delay_GetRuntimeMs() / 1000.0F,
                      main_gyr_raw[0], main_gyr_raw[1], main_gyr_raw[2]);
    }
}

考虑到MPU6050的ADC建立稳定的采样需要时间,所以这里只截取使用3.86s~7.79s共616组数据,最后调用Matlab绘图得到原始姿态角数据随时间变化的曲线。以下是Matlab绘图程序:

clear all;
clc;

data2=load('./MPU6050_RawGyroData.txt'); 
x=data2(:,1);
y1=data2(:,2);
y2=data2(:,3);
y3=data2(:,4);

subplot(3, 1, 1);
plot(x,y1);
xlabel('t/s');
ylabel('Amplitude/LSB');
title('GYRO X Axis');

subplot(3, 1, 2);
plot(x,y2);

xlabel('t/s');
ylabel('Amplitude/LSB');
title('GYRO Y Axis');

subplot(3, 1, 3);
plot(x,y3);

xlabel('t/s');
ylabel('Amplitude/LSB');
title('GYRO Z Axis');

最后得到的姿态角曲线如下所示:

分析上述曲线可发现四轴飞行器水平静止在地面上(电机不转)时,各轴输出的波动较小,均小于正负0.03LSB(LSB(最低有效位)是指传感器输出的最小变化单位)。但是不难发现X、和Z轴数据均为正值,且分别在2*10-3LSB6.5*10-3LSB附近波动,而Y轴数据均为负值,且-0.0255LSB附近波动,然而正常状态下输出的数据应该在0附近波动。出现这个问题实际上是因为MPU6050在输出数据时没有经过初始偏差矫正,存在一个常值误差,发生了 “角速率零点漂移” 现象。此时只要每次在采样数据时减去这个常值误差即可。如果细心的话还会发现各个轴信号波峰和波谷在波形中所占比例是不同的,比如Y轴波峰所占比例就更大一些,这样对该角速率的积分会随着时间的增加而偏向于一个方向增加。这就是陀螺仪的 “积分漂移” 现象,而波形中的波峰和波谷所占比例不同是硬件存在的固有问题,没法通过软件消除。所以陀螺仪数据在未经过其他数据补偿校正的情况下只能在短时间内使用,否则最终计算出的误差会很大。

以上是在四轴飞行器没有电机振动干扰的情况下得到的结果,但在实际的飞行过程中,高速转动的电机所带来的机体振动会给陀螺仪带来严重的噪声干扰。为了分析电机振动对姿态数据的影响,在保持采样配置相同的情况下,使四轴飞行器静止在水平面,但电机处于怠速运转状态。使用void MPU6050_RawDataOutput(void)函数串口输出数据并调用Matlab程序绘图。这里截取3.87s~12.68s之间的1354组数据进行处理,为了分析信号的频域特性,对采样的信号进行FFT变换(快速傅里叶变换),绘制出频谱图。最后得到的波形如下:

分析上述时域波形确实可以看到电机的高速转动所产生的振动使得陀螺仪输出数据的波动幅度相比电机不转时的更大,大约有0.2LSB。由频域波形可以看到在500Hz~900Hz之间存在高频振动,而四轴飞行器是静止在水平面上的,不可能产生高频的信号,所以可知该信号只可能对应于电机和桨叶的高速旋转所带来的高频振动。

加速度计信号分析

设置MPU6050加速度的量程为8g(4096LSB/g),在四轴飞行器水平静止在地面上(电机不转)时,调用void MPU6050_RawDataOutput(void)串口输出加速度在三个轴上的分量值,这里截取3.87s~7.89s间的587组数据并调用Matlab绘图。最后得到的加速度分量波形如下所示:

分析上述波形后可发现,由于四轴飞行器没有完全水平放置在地面上,所以X和Y轴的输出没有在0附近波动,Z轴也没有在1g(9.8m/s^2)附近波动。而且加速度计对微小振动非常敏感,即使没有电机振动,输出也会有一定的波动,但是波动幅值小于0.05g,对姿态的解算影响不大。然而当四轴飞行器水平放置地面并同时开启电机怠速转动时,截取串口从3.86s~12.68s之间发来的共1310组数据并调用Matlab绘图处理.最后得到的波形如下:

由上述波形可见加速度输出信号中存在大量的干扰噪声,其幅值最高可达1.5g/(m/s^2),已经将真实信号完全掩盖了,这样的信号是没法直接使用的。(下一文章是滤波)

使用芯片:MPU-6050(MPU-6050数据手册) 供电电源:3-5v(内部低压差稳压) 通信方式:标准IIC通信协议 芯片内置16bit AD转换器,16位数据输出 陀螺仪范围:±250 500 1000 2000 °/s 加速度范围:±2±4±8±16g MPU-6000(MPU-6000数据手册)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术 InvenSense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。 MPU-6000的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。 MPU-6000可在不同电压下工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接口VVDIO供电为1.8V± 5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。 应用运动感测游戏 现实增强 电子稳像 (EIS: Electronic Image Stabilization) 光学稳像(OIS: Optical Image Stabilization) 行人导航器 “零触控”手势用户接口 姿势快捷方式 认证 市场智能型手机 平板装置设备 手持型游戏产品 3D遥控器 可携式导航设备 特征以数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据。 具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。 可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴加速器。 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。 数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。 运动处理数据库支持Android、Linux与Windows 内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。 以数位输出的温度传感器 以数位输入的同步引脚(Sync pin)支援视频电子影相稳定技术与GPS 可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能。 VDD供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO为1.8V± 5% 陀螺仪运作电流:5mA,陀螺仪待命电流:5A;加速器运作电流:350A,加速器省电模式电流: 20A@10Hz 高达400kHz快速模式的I2C,或最高至20MHz的SPI串行主机接口(serial host interface) 内建频率产生器在所有温度范围(full temperature range)仅有±1%频率变化。 使用者亲自测试 10,000 g 碰撞容忍度 为可携式产品量身订作的最小最薄包装 (4x4x0.9mm QFN)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值