查看: 7683|回复: 3

MWC飞控中MPU6050传感器的方向定义是如何确定的?

[复制链接]
  • TA的每日心情
    开心
    2016-11-24 20:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2016-6-19 19:05 | 显示全部楼层 |阅读模式
    在MWC飞控中,对于MPU6050传感器的方向定义如下:

    #if defined(GY_521)
      #define MPU6050
      #define ACC_ORIENTATION(X, Y, Z)  {accADC[ROLL]  = -X; accADC[PITCH]  = -Y; accADC[YAW]  =  Z;}
      #define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] =  Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;}
      #undef INTERNAL_I2C_PULLUPS
    #endif

    而MPU6050传感器手册上给出的方向定义如下:
    6050.jpg
    请问这两者之间的关系如何理解?请高手给予明示,谢谢!
  • TA的每日心情
    开心
    2016-11-24 20:06
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2016-6-19 20:52 | 显示全部楼层
    无标题.jpg
  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 2016-6-20 11:02 | 显示全部楼层
    本帖最后由 skypup 于 2016-6-20 11:07 编辑

    个人观点,纯属猜想,仅供参考:

    1 ACC Z 轴,这个最容易理解,由于一直会有重力加速度,芯片平放时是 +Z,翻过来焊在PCB背面时是 -Z(自身重力方向与 Z 轴方向相反)。
    2 ACC X 轴,与 Roll 在一条线上。与摇杆方向(飞控定义的正向)一致,数据与 X 轴相反,所以是 -X。
    3 ACC Y 轴,与 Pitch 在一条线上。与摇杆方向(飞控定义的正向)一致,数据与 Y 轴相反,所以是 -Y。
    4 GYRO Y 轴,这个是 Roll 轴,与摇杆方向(飞控定义的正向)一致,所以是 +Y。
    5 GYRO X 轴,这个是 Pitch 轴,与摇杆方向(飞控定义的正向)相反,所以是 -X。
    6 GYRO Z 轴,这个是 Yaw 轴,与摇杆方向(飞控定义的正向)相反,所以是 -Z。

    综上:
    ACC_ORIENTATION(X, Y, Z)  {accADC[ROLL]  = -X; accADC[PITCH]  = -Y; accADC[YAW]  =  Z;}
    GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] =  Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;}


    可以留意一下,对于 GY-86 模块的 5883 地磁传感器,定义的数据正、负值,与加速度计是相反的。这样与我们正常的理解方式是一致的。
    #if defined(GY_86)
      #define MPU6050
      #define HMC5883
      #define MS561101BA
      #define ACC_ORIENTATION(X, Y, Z)  {imu.accADC[ROLL]  = -X; imu.accADC[PITCH]  = -Y; imu.accADC[YAW]  =  Z;}
      #define GYRO_ORIENTATION(X, Y, Z) {imu.gyroADC[ROLL] =  Y; imu.gyroADC[PITCH] = -X; imu.gyroADC[YAW] = -Z;}
      #define MAG_ORIENTATION(X, Y, Z)  {imu.magADC[ROLL]  =  X; imu.magADC[PITCH]  =  Y; imu.magADC[YAW]  = -Z;}
      #define MPU6050_I2C_AUX_MASTER // MAG connected to the AUX I2C bus of MPU6050
      #undef INTERNAL_I2C_PULLUPS
    #endif



  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 2016-6-20 12:05 | 显示全部楼层

    做个测试,从上向下看,把传感器按顺时针方向旋转90度。
    首先,Z 轴是不受影响的。
    Roll 的加速度,是Y的正轴,-Y; 角速度与 X 相反, -X.
    Pitch 的加速度,是X的负轴,+X; 角速度与 Y 相反, -Y.
    综上:
    #define FORCE_ACC_ORIENTATION(X, Y, Z)  {imu.accADC[ROLL]  = -Y; imu.accADC[PITCH]  =  X; imu.accADC[YAW]  = Z;}
    #define FORCE_GYRO_ORIENTATION(X, Y, Z) {imu.gyroADC[ROLL] = -X; imu.gyroADC[PITCH] = -Y; imu.gyroADC[YAW] = -Z;}
    #define FORCE_MAG_ORIENTATION(X, Y, Z)  {imu.magADC[ROLL]  =  Y; imu.magADC[PITCH]  = -X; imu.magADC[YAW]  = -Z;}
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    晶振有正负极吗?
    晶振有正负极吗?
    最近要改装一个pcb,需要把12M晶振改为16M晶振。问一下各位,晶振有正负极吗?那一边
    arduino之LCD1602液晶显示屏
    arduino之LCD1602液晶显示
    参考文献 :https://www.cnblogs.com/liujw2114/p/6011214.html 总操流程: 1、各器
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表