无人机项目跟踪记录四十三---读取陀螺仪函数(ReadIMUSensorHandle)

数据读取函数,此函数的功能是读取陀螺仪中的角度与加速度的值并做滤波处理,函数名称:void ReadIMUSensorHandle(void),代码注释如下所示:

//读取陀螺仪角度计与加速计中的值
void ReadIMUSensorHandle(void)
{
    uint8_t i;

    //read raw
    MPU6050AccRead(imu.accADC);                                  //读取陀螺仪的加速计寄存器中的值
    MPU6050GyroRead(imu.gyroADC);                                //读取三轴角度值
    //tutn to physical
    for(i=0; i<3; i++)
    {
        imu.accRaw[i]= (float)imu.accADC[i] *ACC_SCALE * CONSTANTS_ONE_G ;  //计算公式:AD值*选择的满量程/2的15次幂*物理量单位值
        imu.gyroRaw[i]=(float)imu.gyroADC[i] * GYRO_SCALE * M_PI_F /180.f;		//deg/s  获取三轴角度值
    }

    imu.accb[0]=LPF2pApply_1(imu.accRaw[0]-imu.accOffset[0]);   //将加速计取的数据进行低通滤波操作 X方向  陀螺仪值为当前读取的数值减去飞机静止时校准读取的值
    imu.accb[1]=LPF2pApply_2(imu.accRaw[1]-imu.accOffset[1]);   //将加速计取的数据进行低通滤波操作 y方向
    imu.accb[2]=LPF2pApply_3(imu.accRaw[2]-imu.accOffset[2]);   //将加速计取的数据进行低通滤波操作 z方向
#ifdef IMU_SW                                                   //定义了软件解算
    imu.gyro[0]=LPF2pApply_4(imu.gyroRaw[0]);                   //将陀螺仪的三轴角度进行低通滤波操作 x
    imu.gyro[1]=LPF2pApply_5(imu.gyroRaw[1]);                   //
    imu.gyro[2]=LPF2pApply_6(imu.gyroRaw[2]);
#else
    imu.gyro[0]=LPF2pApply_4(imu.gyroRaw[0]-imu.gyroOffset[0]);
    imu.gyro[1]=LPF2pApply_5(imu.gyroRaw[1]-imu.gyroOffset[1]);
    imu.gyro[2]=LPF2pApply_6(imu.gyroRaw[2]-imu.gyroOffset[2]);
#endif

}

陀螺仪数据的计算公式参见:https://www.it610.com/article/1288446503991451648.htm

其中:imu.accRaw[0]-imu.accOffset[0]的意思是:当无人机静止时进行校准,读取均值为imu.accOffset[0],飞行时用当前读取的值减去静止时读取的值,就为实际值。陀螺仪就是通过这样来测量角度与加速度的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyssailing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值