1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 05:15:25 +03:00

Improved detection of upright / 'SMALL_ANGLE' state.

This commit is contained in:
mikeller 2019-11-17 13:40:30 +13:00 committed by Michael Keller
parent 6694d4ebc8
commit cc8b8d3bf6
11 changed files with 108 additions and 95 deletions

View file

@ -73,6 +73,7 @@ extern "C" {
uint16_t GPS_distanceToHome = 0;
int16_t GPS_directionToHome = 0;
acc_t acc = {};
bool mockIsUpright = false;
}
uint32_t simulationFeatureFlags = 0;
@ -129,7 +130,7 @@ TEST(ArmingPreventionTest, CalibrationPowerOnGraceAngleThrottleArmSwitch)
// given
// quad is level
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateArmingStatus();
@ -190,7 +191,7 @@ TEST(ArmingPreventionTest, ArmingGuardRadioLeftOnAndArmed)
// and
rcData[THROTTLE] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -268,7 +269,7 @@ TEST(ArmingPreventionTest, Prearm)
// given
rcData[THROTTLE] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -311,7 +312,7 @@ TEST(ArmingPreventionTest, RadioTurnedOnAtAnyTimeArmed)
// and
rcData[THROTTLE] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// and
// RX has no link to radio
@ -378,7 +379,7 @@ TEST(ArmingPreventionTest, In3DModeAllowArmingWhenEnteringThrottleDeadband)
// and
rcData[THROTTLE] = 1400;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
simulationHaveRx = true;
// and
@ -447,7 +448,7 @@ TEST(ArmingPreventionTest, When3DModeDisabledThenNormalThrottleArmingConditionAp
// and
// safe throttle value for 3D mode
rcData[THROTTLE] = 1500;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
simulationHaveRx = true;
// and
@ -545,7 +546,7 @@ TEST(ArmingPreventionTest, WhenUsingSwitched3DModeThenNormalThrottleArmingCondit
// and
rcData[THROTTLE] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
simulationHaveRx = true;
// and
@ -641,7 +642,7 @@ TEST(ArmingPreventionTest, GPSRescueWithoutFixPreventsArm)
rcData[THROTTLE] = 1000;
rcData[AUX1] = 1000;
rcData[AUX2] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -755,7 +756,7 @@ TEST(ArmingPreventionTest, GPSRescueSwitchPreventsArm)
rcData[THROTTLE] = 1000;
rcData[AUX1] = 1000;
rcData[AUX2] = 1800; // Start out with rescue enabled
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -867,7 +868,7 @@ TEST(ArmingPreventionTest, ParalyzeOnAtBoot)
rcData[THROTTLE] = 1000;
rcData[AUX1] = 1000;
rcData[AUX2] = 1800; // Paralyze on at boot
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -918,7 +919,7 @@ TEST(ArmingPreventionTest, Paralyze)
rcData[AUX1] = 1000;
rcData[AUX2] = 1800; // Start out with paralyze enabled
rcData[AUX3] = 1000;
ENABLE_STATE(SMALL_ANGLE);
mockIsUpright = true;
// when
updateActivatedModes();
@ -1091,4 +1092,5 @@ extern "C" {
void pidSetItermReset(bool) {}
void applyAccelerometerTrimsDelta(rollAndPitchTrims_t*) {}
bool isFixedWing(void) { return false; }
bool isUpright(void) { return mockIsUpright; }
}

View file

@ -59,6 +59,7 @@ extern "C" {
extern quaternion q;
extern float rMat[3][3];
extern bool attitudeIsEstablished;
PG_REGISTER(rcControlsConfig_t, rcControlsConfig, PG_RC_CONTROLS_CONFIG, 0);
PG_REGISTER(barometerConfig_t, barometerConfig, PG_BAROMETER_CONFIG, 0);
@ -164,15 +165,17 @@ TEST(FlightImuTest, TestSmallAngle)
// given
imuConfigMutable()->small_angle = 25;
imuConfigure(0, 0);
attitudeIsEstablished = true;
// and
memset(rMat, 0.0, sizeof(float) * 9);
// when
imuUpdateEulerAngles();
imuComputeRotationMatrix();
// expect
EXPECT_EQ(0, STATE(SMALL_ANGLE));
EXPECT_EQ(true, isUpright());
// given
rMat[0][0] = r1;
@ -181,19 +184,19 @@ TEST(FlightImuTest, TestSmallAngle)
rMat[2][2] = r1;
// when
imuUpdateEulerAngles();
imuComputeRotationMatrix();
// expect
EXPECT_EQ(SMALL_ANGLE, STATE(SMALL_ANGLE));
EXPECT_EQ(true, isUpright());
// given
memset(rMat, 0.0, sizeof(float) * 9);
// when
imuUpdateEulerAngles();
imuComputeRotationMatrix();
// expect
EXPECT_EQ(0, STATE(SMALL_ANGLE));
EXPECT_EQ(true, isUpright());
}
// STUBS

View file

@ -543,4 +543,5 @@ extern "C" {
return 0.0;
}
bool isUpright(void) { return true; }
}

View file

@ -1173,4 +1173,5 @@ extern "C" {
int8_t calculateThrottlePercent(void) { return 0; }
uint32_t persistentObjectRead(persistentObjectId_e) { return 0; }
void persistentObjectWrite(persistentObjectId_e, uint32_t) {}
bool isUpright(void) { return true; }
}

View file

@ -179,4 +179,5 @@ extern "C" {
void pidSetItermReset(bool) {}
void applyAccelerometerTrimsDelta(rollAndPitchTrims_t*) {}
bool isFixedWing(void) { return false; }
bool isUpright(void) { return true; }
}