鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

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

    已定时 已固定 已锁定 已移动
    文档资料
    fishbot imu 校准
    2
    2
    893
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

      大家好,我是继续学习的小鱼,今天再继续结合FIshBot的代码,介绍下IMU的标定,当然FishBot使用的代码很简单,只进行了静态校准,不过也有那么一些参考意义。

      73f28881-c1ca-4f53-a6c9-ddaed7eddd48-image.png

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

      惯性测量单元(IMU)广泛应用于机器人、无人机和其他运动控制系统中,用于测量和报告设备的加速度和角速度。标定和校准IMU对于确保这些测量准确至关重要。本文将围绕MPU6050传感器的噪声源、常用校准方法和结合FishBot的校准程序进行详细介绍。

      1. MPU6050的噪声源

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

      噪声类型与描述参数

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

      2. 常用的校准方法

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

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

      3. 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能够自动调整传感器的偏移值,从而提高测量的精度和稳定性。这种校准对于机器人和自动化系统中的精确运动控制至关重要。

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      1 条回复 最后回复 回复 引用 1
      • Y
        yuan-jun
        最后由 编辑

        此回复已被删除!
        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS