Adding a unit test for quad X motor mixers.
This commit is contained in:
parent
730d0fe45c
commit
4154afcb63
|
@ -203,7 +203,7 @@ static const motorMixer_t mixerDualcopter[] = {
|
|||
|
||||
// Keep synced with mixerMode_e
|
||||
const mixer_t mixers[] = {
|
||||
// Mo Se Mixtable
|
||||
// motors, servos, motor mixer
|
||||
{ 0, 0, NULL }, // entry 0
|
||||
{ 3, 1, mixerTri }, // MIXER_TRI
|
||||
{ 4, 0, mixerQuadP }, // MIXER_QUADP
|
||||
|
@ -224,7 +224,7 @@ const mixer_t mixers[] = {
|
|||
{ 4, 0, mixerVtail4 }, // MIXER_VTAIL4
|
||||
{ 6, 0, mixerHex6H }, // MIXER_HEX6H
|
||||
{ 0, 1, NULL }, // * MIXER_PPM_TO_SERVO
|
||||
{ 2, 1, mixerDualcopter }, // MIXER_DUALCOPTER
|
||||
{ 2, 1, mixerDualcopter }, // MIXER_DUALCOPTER
|
||||
{ 1, 1, NULL }, // MIXER_SINGLECOPTER
|
||||
{ 4, 0, mixerAtail4 }, // MIXER_ATAIL4
|
||||
{ 0, 0, NULL }, // MIXER_CUSTOM
|
||||
|
@ -665,9 +665,11 @@ void mixTable(void)
|
|||
}
|
||||
|
||||
// constrain servos
|
||||
for (i = 0; i < MAX_SUPPORTED_SERVOS; i++)
|
||||
servo[i] = constrain(servo[i], servoConf[i].min, servoConf[i].max); // limit the values
|
||||
|
||||
if (useServo) {
|
||||
for (i = 0; i < MAX_SUPPORTED_SERVOS; i++) {
|
||||
servo[i] = constrain(servo[i], servoConf[i].min, servoConf[i].max); // limit the values
|
||||
}
|
||||
}
|
||||
// forward AUX1-4 to servo outputs (not constrained)
|
||||
if (gimbalConfig->gimbal_flags & GIMBAL_FORWARDAUX) {
|
||||
forwardAuxChannelsToServos();
|
||||
|
|
|
@ -65,6 +65,13 @@ extern "C" {
|
|||
#include "unittest_macros.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// input
|
||||
#define TEST_RC_MID 1500
|
||||
|
||||
// output
|
||||
#define TEST_MIN_COMMAND 1000
|
||||
#define TEST_SERVO_MID 1500
|
||||
|
||||
typedef struct motor_s {
|
||||
uint16_t value;
|
||||
} motor_t;
|
||||
|
@ -87,17 +94,17 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithNoServos)
|
|||
memset(&servos, 0, sizeof(servos));
|
||||
servoCount = 0;
|
||||
|
||||
rcData[AUX1] = 1500;
|
||||
rcData[AUX2] = 1500;
|
||||
rcData[AUX3] = 1500;
|
||||
rcData[AUX4] = 1500;
|
||||
rcData[AUX1] = TEST_RC_MID;
|
||||
rcData[AUX2] = TEST_RC_MID;
|
||||
rcData[AUX3] = TEST_RC_MID;
|
||||
rcData[AUX4] = TEST_RC_MID;
|
||||
|
||||
// when
|
||||
forwardAuxChannelsToServos();
|
||||
|
||||
// then
|
||||
for (uint8_t i = 0; i < MAX_SUPPORTED_SERVOS; i++) {
|
||||
EXPECT_EQ(servos[i].value, 0);
|
||||
EXPECT_EQ(0, servos[i].value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -122,10 +129,10 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithMaxServos)
|
|||
}
|
||||
|
||||
// -1 for zero based offset
|
||||
EXPECT_EQ(servos[MAX_SUPPORTED_SERVOS - 3 - 1].value, 1000);
|
||||
EXPECT_EQ(servos[MAX_SUPPORTED_SERVOS - 2 - 1].value, 1250);
|
||||
EXPECT_EQ(servos[MAX_SUPPORTED_SERVOS - 1 - 1].value, 1750);
|
||||
EXPECT_EQ(servos[MAX_SUPPORTED_SERVOS - 0 - 1].value, 2000);
|
||||
EXPECT_EQ(1000, servos[MAX_SUPPORTED_SERVOS - 3 - 1].value);
|
||||
EXPECT_EQ(1250, servos[MAX_SUPPORTED_SERVOS - 2 - 1].value);
|
||||
EXPECT_EQ(1750, servos[MAX_SUPPORTED_SERVOS - 1 - 1].value);
|
||||
EXPECT_EQ(2000, servos[MAX_SUPPORTED_SERVOS - 0 - 1].value);
|
||||
}
|
||||
|
||||
TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithLessServosThanAuxChannelsToForward)
|
||||
|
@ -149,8 +156,8 @@ TEST(FlightMixerTest, TestForwardAuxChannelsToServosWithLessServosThanAuxChannel
|
|||
}
|
||||
|
||||
// -1 for zero based offset
|
||||
EXPECT_EQ(servos[0].value, 1000);
|
||||
EXPECT_EQ(servos[1].value, 1250);
|
||||
EXPECT_EQ(1000, servos[0].value);
|
||||
EXPECT_EQ(1250, servos[1].value);
|
||||
}
|
||||
|
||||
TEST(FlightMixerTest, TestTricopterServo)
|
||||
|
@ -163,7 +170,7 @@ TEST(FlightMixerTest, TestTricopterServo)
|
|||
|
||||
escAndServoConfig_t escAndServoConfig;
|
||||
memset(&escAndServoConfig, 0, sizeof(escAndServoConfig));
|
||||
escAndServoConfig.mincommand = 1000;
|
||||
escAndServoConfig.mincommand = TEST_MIN_COMMAND;
|
||||
|
||||
servoParam_t servoConf[MAX_SUPPORTED_SERVOS];
|
||||
memset(&servoConf, 0, sizeof(servoConf));
|
||||
|
@ -213,9 +220,67 @@ TEST(FlightMixerTest, TestTricopterServo)
|
|||
writeServos();
|
||||
|
||||
// then
|
||||
EXPECT_EQ(servos[0].value, 1500);
|
||||
EXPECT_EQ(TEST_SERVO_MID, servos[0].value);
|
||||
}
|
||||
|
||||
TEST(FlightMixerTest, TestQuadMotors)
|
||||
{
|
||||
// given
|
||||
mixerConfig_t mixerConfig;
|
||||
memset(&mixerConfig, 0, sizeof(mixerConfig));
|
||||
|
||||
//servoParam_t servoConf[MAX_SUPPORTED_SERVOS];
|
||||
//memset(&servoConf, 0, sizeof(servoConf));
|
||||
|
||||
escAndServoConfig_t escAndServoConfig;
|
||||
memset(&escAndServoConfig, 0, sizeof(escAndServoConfig));
|
||||
escAndServoConfig.mincommand = TEST_MIN_COMMAND;
|
||||
|
||||
gimbalConfig_t gimbalConfig = {
|
||||
.gimbal_flags = 0
|
||||
};
|
||||
|
||||
mixerUseConfigs(
|
||||
NULL,// servoConf,
|
||||
&gimbalConfig,
|
||||
NULL,
|
||||
&escAndServoConfig,
|
||||
&mixerConfig,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
motorMixer_t customMixer[MAX_SUPPORTED_MOTORS];
|
||||
memset(&customMixer, 0, sizeof(customMixer));
|
||||
|
||||
mixerInit(MIXER_QUADX, customMixer);
|
||||
|
||||
// and
|
||||
pwmOutputConfiguration_t pwmOutputConfiguration = {
|
||||
.servoCount = 0,
|
||||
.motorCount = 4
|
||||
};
|
||||
|
||||
mixerUsePWMOutputConfiguration(&pwmOutputConfiguration);
|
||||
|
||||
// and
|
||||
memset(rcCommand, 0, sizeof(rcCommand));
|
||||
|
||||
// and
|
||||
memset(axisPID, 0, sizeof(axisPID));
|
||||
axisPID[YAW] = 0;
|
||||
|
||||
|
||||
// when
|
||||
mixTable();
|
||||
writeMotors();
|
||||
|
||||
// then
|
||||
EXPECT_EQ(TEST_MIN_COMMAND, motors[0].value);
|
||||
EXPECT_EQ(TEST_MIN_COMMAND, motors[1].value);
|
||||
EXPECT_EQ(TEST_MIN_COMMAND, motors[2].value);
|
||||
EXPECT_EQ(TEST_MIN_COMMAND, motors[3].value);
|
||||
}
|
||||
|
||||
// STUBS
|
||||
|
||||
|
|
Loading…
Reference in New Issue