问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

IMU的标定和校准:结合FishBot代码介绍

创作时间:
作者:
@小白创作中心

IMU的标定和校准:结合FishBot代码介绍

引用
CSDN
1.
https://blog.csdn.net/qq_27865227/article/details/139482711

惯性测量单元(IMU)在机器人、无人机等运动控制系统中扮演着重要角色,其准确的标定和校准对于确保测量精度至关重要。本文将围绕MPU6050传感器的噪声源、常用校准方法以及FishBot的具体校准程序进行详细介绍。

MPU6050的噪声源

MPU6050是一款广泛使用的六轴IMU,包括三轴加速度计和三轴陀螺仪。它的输出数据受到多种噪声源的影响,这些噪声源会降低测量的准确性和可靠性。

噪声类型与描述参数

  • 高斯噪声:最常见的噪声类型,表现为读数的随机波动,通常假定其遵循高斯分布。
  • 偏移误差:传感器输出与实际值之间的固定偏差,通常在长时间内稳定。
  • 温度变化:MPU6050对温度变化敏感,可能导致读数随温度波动。
  • 电源噪声:来自电源的不稳定性可能引入噪声,尤其是在低电压供电时。
  • 机械振动:机械环境中的振动可以通过结构传递到传感器,导致错误的加速度或角速度测量。

常用的校准方法

校准IMU通常包括以下几个步骤:

  • 静态校准:将设备放置在稳定的环境中,记录加速度计和陀螺仪的输出,以确定零偏和灵敏度误差。
  • 动态校准:通过移动设备以覆盖完整的运动范围,并使用已知的运动模式来校正传感器输出。
  • 温度补偿:记录不同温度下的传感器输出,建立温度对输出影响的模型,进行实时补偿。
  • 软件滤波:应用数字滤波器,如卡尔曼滤波器,减少输出数据中的随机噪声。

FishBot的校准方法

FishBot代码分析

FishBot的校准方法通过软件对MPU6050进行自动校准,校准方法是获取一组初始数据,然后求均值作为静态误差。以下是FishBot代码的关键部分解析:

void MPU6050::calcOffsets(bool is_calc_gyro, bool is_calc_acc){
  if(is_calc_gyro){ setGyroOffsets(0,0,0); }
  if(is_calc_acc){ setAccOffsets(0,0,0); }
  
  float ag[6] = {0,0,0,0,0,0}; // 3*acc, 3*gyro
  for(int i = 0; i < CALIB_OFFSET_NB_MES; i++){
    this->fetchData();
    ag[0] += accX;
    ag[1] += accY;
    ag[2] += (accZ-1.0);  // 假设设备静止且Z轴向下
    ag[3] += gyroX;
    ag[4] += gyroY;
    ag[5] += gyroZ;
    delay(1);
  }
  
  if(is_calc_acc){
    accXoffset = ag[0] / CALIB_OFFSET_NB_MES;
    accYoffset = ag[1] / CALIB_OFFSET_NB_MES;
    accZoffset = ag[2] / CALIB_OFFSET_NB_MES;
  }
  if(is_calc_gyro){
    gyroXoffset = ag[3] / CALIB_OFFSET_NB_MES;
    gyroYoffset = ag[4] / CALIB_OFFSET_NB_MES;
    gyroZoffset = ag[5] / CALIB_OFFSET_NB_MES;
  }
}

校准过程解析

  • 零偏校准:代码首先将陀螺仪和加速度计的偏移设置为零,随后在固定次数(CALIB_OFFSET_NB_MES)的测量中累计传感器读数。
  • 计算偏移:通过平均这些值,计算出每个轴的偏移量。对于加速度计Z轴,考虑到重力加速度(减去1.0)。
  • 延时:在连续测量之间进行短暂的延时,以避免采样率过高导致的数据相关性。

通过此方法,FishBot能够自动调整传感器的偏移值,从而提高测量的精度和稳定性。这种校准对于机器人和自动化系统中的精确运动控制至关重要。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号