16,7 → 16,7 |
* If you have no acc. sensor or do not want to use it, remove this define. This will cause the |
* acc. sensor to be ignored at attitude calibration. |
*/ |
#define ATTITUDE_USE_ACC_SENSORS yes |
//#define ATTITUDE_USE_ACC_SENSORS yes |
|
/* |
* The frequency at which numerical integration takes place. 488 in original code. |
24,16 → 24,6 |
#define INTEGRATION_FREQUENCY 488 |
|
/* |
* Gyro readings are divided by this before being used in attitude control. This will scale them |
* to match the scale of the stick control etc. variables. This is just a rough non-precision |
* scaling - the below definitions make precise conversion factors. |
* Will be about 4 for InvenSense, 8 for FC1.3 and 8 for ADXRS610. |
* The number 1250 is derived from the original code: It has about 225000 = 1250 * 180 for 180 degrees. |
*/ |
#define HIRES_GYRO_INTEGRATION_FACTOR 1 |
// (int)((GYRO_RATE_FACTOR_PITCHROLL * INTEGRATION_FREQUENCY * GYRO_PITCHROLL_CORRECTION) / 1250) |
|
/* |
* Constant for deriving an attitude angle from acceleration measurement. |
* |
* The value is derived from the datasheet of the ACC sensor where 5g are scaled to VRef. |
62,8 → 52,7 |
* HIRES_GYRO_INTEGRATION_FACTOR (why???) before integration. |
* The value of this expression should be about 1250 (by setting HIRES_GYRO_INTEGRATION_FACTOR to something suitable). |
*/ |
#define GYRO_DEG_FACTOR_PITCHROLL (GYRO_RATE_FACTOR_PITCHROLL * INTEGRATION_FREQUENCY * GYRO_PITCHROLL_CORRECTION / HIRES_GYRO_INTEGRATION_FACTOR) |
#define GYRO_DEG_FACTOR_YAW (GYRO_RATE_FACTOR_YAW * INTEGRATION_FREQUENCY * GYRO_YAW_CORRECTION) |
#define GYRO_DEG_FACTOR (GYRO_RATE_FACTOR * INTEGRATION_FREQUENCY * GYRO_CORRECTION) |
|
/* |
* This is ([gyro integral value] / degree) / (degree / acc. sensor value) = gyro integral value / acc.sensor value |
71,25 → 60,37 |
* value for the same (small) angle. |
* The value is about 200. |
*/ |
#define GYRO_ACC_FACTOR ((GYRO_DEG_FACTOR_PITCHROLL) / (DEG_ACC_FACTOR)) |
//#define GYRO_ACC_FACTOR ((GYRO_DEG_FACTOR_PITCHROLL) / (DEG_ACC_FACTOR)) |
|
#define PITCHROLLOVER180 ((int32_t)GYRO_DEG_FACTOR_PITCHROLL * 180) |
#define PITCHROLLOVER360 ((int32_t)GYRO_DEG_FACTOR_PITCHROLL * 360) |
#define YAWOVER360 ((int32_t)GYRO_DEG_FACTOR_YAW * 360) |
#define OVER180 ((int32_t)GYRO_DEG_FACTOR * 180) |
#define OVER360 ((int32_t)GYRO_DEG_FACTOR * 360) |
|
/* |
* Rotation rates |
*/ |
extern int16_t rate_PID[2], rate_ATT[2], yawRate; |
extern int16_t rate_PID[3], rate_ATT[3]; |
extern int16_t differential[3]; |
|
/* |
* Attitudes calculated by numerical integration of gyro rates |
*/ |
extern int32_t angle[3]; |
extern int32_t error[3]; |
extern int32_t attitude[3]; |
|
// extern volatile int32_t ReadingIntegralTop; // calculated in analog.c |
|
/* |
* Compass navigation |
*/ |
// extern int16_t compassHeading; |
// extern int16_t compassCourse; |
// extern int16_t compassOffCourse; |
// extern uint8_t compassCalState; |
// extern int32_t yawGyroHeading; |
// extern int16_t yawGyroHeadingInDeg; |
// extern uint8_t updateCompassCourse; |
// extern uint16_t ignoreCompassTimer; |
|
/* |
* Dynamic gyro offsets. These are signed values that are subtracted from the gyro measurements, |
* to help canceling out drift and vibration noise effects. The dynamic offsets themselves |
* can be updated in flight by different ways, for example: |
99,12 → 100,12 |
* - Detect which way the pilot pulls the stick to keep the copter steady, and correct by that |
* - Invent your own... |
*/ |
extern int16_t dynamicOffset[2], dynamicOffsetYaw; |
// extern int16_t dynamicOffset[2], dynamicOffsetYaw; |
|
/* |
* For NaviCtrl use. |
*/ |
extern int16_t averageAcc[2], averageAccCount; |
// extern int16_t averageAcc[2], averageAccCount; |
|
/* |
* Re-init flight attitude, setting all angles to 0 (or to whatever can be derived from acc. sensor). |