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

    你真的了解IMU的参数吗?结合FishBot的MPU6050看一下

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

      大家好,我是爱学习的小鱼,最近打算设计IMU模块,看了挺多,但是刚开始的时候不了解参数及含义,就学习了下。今天就结合我们 FishBot 运动控制板的IMU模块——MPU6050详细介绍下IMU的参数,比如量程,噪声,下次挑选IMU的时候就知道怎么选择了。

      7e7b3f6c-6edb-4080-a494-985755d1bba1-image.png

      1. MPU6050的测量原理及数据类型

      MPU6050是一款集成了3轴陀螺仪和3轴加速度计的传感器,能够提供关于设备运动状态的详尽数据。它通过测量设备在三个空间轴(X、Y和Z轴)上的角速度和加速度,帮助用户了解设备的运动情况。陀螺仪部分通过检测因旋转而引起的科里奥利力来测量角速度。加速度计部分则测量设备加速过程中各轴向的加速度。

      科里奥力(Coriolis Force)是一种因旋转参考系中物体运动而产生的惯性力。它是由法国科学家古斯塔夫·科里奥利在1835年首次描述的,主要出现在旋转系统中,如地球自转等。科里奥利力的大小和方向取决于物体的速度和旋转轴的角速度。

      在陀螺仪传感器中,如MPU6050,科里奥利力的原理被用来测量角速度。当传感器(或载体)绕某轴旋转时,陀螺仪内的振动结构(通常是微型振子)也会因旋转而受到偏移,这种偏移通过电容式传感器检测到。检测到的信号随后被放大和转换为电信号,最终输出为旋转速度的测量值。科里奥利力的应用使得MPU6050能精确追踪设备的方向变化,这在手机、无人机、运动追踪设备等多种应用中非常关键。
      4079165d-4367-476c-98d7-59ad6f3ba275-image.png

      2. 测量数据的单位

      • 角速度(陀螺仪): 度/秒(°/s)
      • 加速度(加速度计): g(重力加速度,1g 约等于 9.81 m/s²)

      3. IMU参数:量程、灵敏度和噪声

      量程和灵敏度选择

      • 量程:MPU6050的陀螺仪部分支持±250, ±500, ±1000, ±2000°/秒的量程,加速度计部分支持±2, ±4, ±8, ±16g的量程。选择量程时需考虑应用场景的需求:例如,如果设备用于高速运动的跟踪,应选择较高的量程以避免数据溢出。
      • 灵敏度:陀螺仪的灵敏度根据量程不同而不同,例如,在±250°/秒的量程下,灵敏度为131 LSB/°/s。加速度计的灵敏度也随量程变化,如在±2g的量程下,灵敏度为16384 LSB/g。选择灵敏度高的设定可以提高测量的精确度,但可能会降低动态范围。

      噪声

      • 噪声类型:MPU6050的噪声主要包括零偏噪声和随机游走噪声。
      • 噪声单位:通常以°/s/√Hz和mg/√Hz来表示。
      • 噪声产生原因:主要是由电子电路的内在物理特性引起的,如器件内部的电阻和电容。

      4. MPU6050的参数设置代码解析

      下面这段代码是从FishBot主控板使用的IMU模块驱动中摘抄的,代码中包含了设置陀螺仪和加速度计量程的功能。通过写入不同的配置值到MPU6050的寄存器,可以调整量程和灵敏度。

      // 设置陀螺仪量程
      byte MPU6050::setGyroConfig(int config_num){
          byte status;
          switch(config_num){
              case 0: // ±250 deg/s
                  gyro_lsb_to_degsec = 131.0;
                  status = writeData(MPU6050_GYRO_CONFIG_REGISTER, 0x00);
                  break;
              case 1: // ±500 deg/s
                  gyro_lsb_to_degsec = 65.5;
                  status = writeData(MPU6050_GYRO_CONFIG_REGISTER, 0x08);
                  break;
              case 2: // ±1000 deg/s
                  gyro_lsb_to_degsec = 32.8;
                  status = writeData(MPU6050_GYRO_CONFIG_REGISTER, 0x10);
                  break;
              case 3: // ±2000 deg/s
                  gyro_lsb_to_degsec = 16.4;
                  status = writeData(MPU6050_GYRO_CONFIG_REGISTER, 0x18);
                  break;
              default:
      
      
                  status = 1; // 错误处理
                  break;
          }
          return status;
      }
      
      // 设置加速度计量程
      byte MPU6050::setAccConfig(int config_num){
          byte status;
          switch(config_num){
              case 0: // ±2 g
                  acc_lsb_to_g = 16384.0;
                  status = writeData(MPU6050_ACCEL_CONFIG_REGISTER, 0x00);
                  break;
              case 1: // ±4 g
                  acc_lsb_to_g = 8192.0;
                  status = writeData(MPU6050_ACCEL_CONFIG_REGISTER, 0x08);
                  break;
              case 2: // ±8 g
                  acc_lsb_to_g = 4096.0;
                  status = writeData(MPU6050_ACCEL_CONFIG_REGISTER, 0x10);
                  break;
              case 3: // ±16 g
                  acc_lsb_to_g = 2048.0;
                  status = writeData(MPU6050_ACCEL_CONFIG_REGISTER, 0x18);
                  break;
              default:
                  status = 1; // 错误处理
                  break;
          }
          return status;
      }
      

      此代码段显示了如何根据需要配置MPU6050的量程,以适应不同的应用场景。

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

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