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:
parent
6694d4ebc8
commit
cc8b8d3bf6
11 changed files with 108 additions and 95 deletions
|
@ -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; }
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -543,4 +543,5 @@ extern "C" {
|
|||
return 0.0;
|
||||
}
|
||||
|
||||
bool isUpright(void) { return true; }
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
}
|
||||
|
|
|
@ -179,4 +179,5 @@ extern "C" {
|
|||
void pidSetItermReset(bool) {}
|
||||
void applyAccelerometerTrimsDelta(rollAndPitchTrims_t*) {}
|
||||
bool isFixedWing(void) { return false; }
|
||||
bool isUpright(void) { return true; }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue