MWC飞控中MPU6050传感器的方向定义是如何确定的?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15885|回复: 4

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

[复制链接]
发表于 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
请问这两者之间的关系如何理解?请高手给予明示,谢谢!
 楼主| 发表于 2016-6-19 20:52 | 显示全部楼层
无标题.jpg
发表于 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



发表于 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;}
发表于 2021-1-5 16:36 | 显示全部楼层
skypup 发表于 2016-6-20 11:02
个人观点,纯属猜想,仅供参考:

1 ACC Z 轴,这个最容易理解,由于一直会有重力加速度,芯片平放时是 +Z ...

请教下,飞控的正向你是如何知道的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 04:40 , Processed in 0.188644 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表