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

    深入解析FishBot中的MPU6050数据采集方法

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

      大家好,我是爱吃猪角饭的小鱼,今天接着上一节标定完数据,怎么来用标定好的数据在读取的时候去掉校准误差。

      深入解析FishBot中的MPU6050数据采集方法

      在机器人和自动化系统中,精确的传感器数据是实现有效控制的关键。本文将详细解释FishBot项目中用于从MPU6050惯性测量单元(IMU)获取数据的方法,该方法涵盖了数据读取、处理以及应用校准值以确保数据的准确性。

      数据获取方法解析

      FishBot中的MPU6050::fetchData()函数是一个核心功能,它直接从MPU6050读取原始数据,并将这些数据转换成实用的加速度、温度和角速度测量值。以下是该函数的具体实现和各部分的详细说明:

      1. 初始化通信并设置数据寄存器

      wire->beginTransmission(address);
      wire->write(MPU6050_ACCEL_OUT_REGISTER);
      wire->endTransmission(false);
      wire->requestFrom(address, (uint8_t) 14);
      
      • beginTransmission(address): 启动与MPU6050的I2C通信,address是传感器的I2C地址。
      • write(MPU6050_ACCEL_OUT_REGISTER): 设置要从哪个寄存器开始读取数据。此处指定从加速度输出寄存器开始读取。
      • endTransmission(false): 结束传输,false参数表示主设备(MCU)将继续保持总线控制权,为读取操作做准备。
      • requestFrom(address, 14): 请求从传感器读取14个字节的数据,这覆盖了加速度、温度和角速度的所有轴。

      2. 读取和转换数据

      int16_t rawData[7]; // [ax,ay,az,temp,gx,gy,gz]
      
      for(int i = 0; i < 7; i++) {
        rawData[i]  = wire->read() << 8;
        rawData[i] |= wire->read();
      }
      
      • 数组rawData存储从传感器读取的原始二进制数据。
      • 通过两次调用read()方法并结合位移操作,将两个8位字节合并为一个16位的整数,这样可以正确地形成每个传感器输出的完整值。

      3. 应用校准和转换公式

      accX = ((float)rawData[0]) / acc_lsb_to_g - accXoffset;
      accY = ((float)rawData[1]) / acc_lsb_to_g - accYoffset;
      accZ = (!upsideDownMounting - upsideDownMounting) * ((float)rawData[2]) / acc_lsb_to_g - accZoffset;
      temp = (rawData[3] + TEMP_LSB_OFFSET) / TEMP_LSB_2_DEGREE;
      gyroX = ((float)rawData[4]) / gyro_lsb_to_degsec - gyroXoffset;
      gyroY = ((float)rawData[5]) / gyro_lsb_to_degsec - gyroYoffset;
      gyroZ = ((float)rawData[6]) / gyro_lsb_to_degsec - gyroZoffset;
      
      • 加速度值通过除以acc_lsb_to_g(每位的重力加速度值)转换成g单位,并减去校准偏移。
      • 温度值通过应用固定的偏移和转换因子转换为摄氏度。
      • 角速度同样通过除以gyro_lsb_to_degsec(每位的度/秒值)进行单位转换,并减去校准偏移。
      • 对于加速度Z轴,通过考虑装置的安装方向(正向或倒置),采用特殊的处理方式来调整符号。

      通过这种方法,FishBot能够准确地读取并处理从MPU6050传感器接收的数据,为机器人的导航和运动控制提供精确的输入。这种细致的处理确保了数据的可靠性,是实现

      复杂运动控制算法的基础。

      8d661113-b05a-4194-9f9e-93b24b8e6283-image.png

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

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