diff --git a/flight/modules/Stabilization/inc/stabilization.h b/flight/modules/Stabilization/inc/stabilization.h
index 44ab8917c..8fc084da2 100644
--- a/flight/modules/Stabilization/inc/stabilization.h
+++ b/flight/modules/Stabilization/inc/stabilization.h
@@ -59,6 +59,8 @@ typedef struct {
} monitor;
float rattitude_mode_transition_stick_position;
struct pid innerPids[3], outerPids[3];
+ // TPS [Roll,Pitch,Yaw][P,I,D]
+ bool thrust_pid_scaling_enabled[3][3];
} StabilizationData;
diff --git a/flight/modules/Stabilization/innerloop.c b/flight/modules/Stabilization/innerloop.c
index 90a1b8b52..1f152c382 100644
--- a/flight/modules/Stabilization/innerloop.c
+++ b/flight/modules/Stabilization/innerloop.c
@@ -123,43 +123,6 @@ static float get_pid_scale_source_value()
return value;
}
-static int is_pid_thrust_scaled_for_axis(int axis)
-{
- return stabSettings.stabBank.EnableThrustPIDScaling
- && (axis == 0 // Roll
- || axis == 1); // Pitch
-}
-
-static bool is_p_scaling_enabled()
-{
- uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
-
- return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PI ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PD ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_P;
-}
-
-static bool is_i_scaling_enabled()
-{
- uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
-
- return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PI ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_ID ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_I;
-}
-
-static bool is_d_scaling_enabled()
-{
- uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
-
- return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PD ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_ID ||
- target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_D;
-}
-
typedef struct pid_curve_scaler {
float x;
pointf points[5];
@@ -179,7 +142,9 @@ static pid_scaler create_pid_scaler(int axis)
// Always scaled with the this.
scaler.p = scaler.i = scaler.d = speedScaleFactor;
- if (is_pid_thrust_scaled_for_axis(axis)) {
+ if (stabSettings.thrust_pid_scaling_enabled[axis][0]
+ || stabSettings.thrust_pid_scaling_enabled[axis][1]
+ || stabSettings.thrust_pid_scaling_enabled[axis][2]) {
const pid_curve_scaler curve_scaler = {
.x = get_pid_scale_source_value(),
.points = {
@@ -193,13 +158,13 @@ static pid_scaler create_pid_scaler(int axis)
float curve_value = pid_curve_value(&curve_scaler);
- if (is_p_scaling_enabled()) {
+ if (stabSettings.thrust_pid_scaling_enabled[axis][0]) {
scaler.p *= curve_value;
}
- if (is_i_scaling_enabled()) {
+ if (stabSettings.thrust_pid_scaling_enabled[axis][1]) {
scaler.i *= curve_value;
}
- if (is_d_scaling_enabled()) {
+ if (stabSettings.thrust_pid_scaling_enabled[axis][2]) {
scaler.d *= curve_value;
}
}
diff --git a/flight/modules/Stabilization/stabilization.c b/flight/modules/Stabilization/stabilization.c
index 202a5c89f..074496983 100644
--- a/flight/modules/Stabilization/stabilization.c
+++ b/flight/modules/Stabilization/stabilization.c
@@ -229,6 +229,66 @@ static void SettingsBankUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
StabilizationBankSet(&stabSettings.stabBank);
}
+static bool use_tps_for_roll()
+{
+ uint8_t axes = stabSettings.stabBank.ThrustPIDScaleAxes;
+
+ return axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLPITCHYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLPITCH ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLL;
+}
+
+static bool use_tps_for_pitch()
+{
+ uint8_t axes = stabSettings.stabBank.ThrustPIDScaleAxes;
+
+ return axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLPITCHYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLPITCH ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_PITCHYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_PITCH;
+}
+
+static bool use_tps_for_yaw()
+{
+ uint8_t axes = stabSettings.stabBank.ThrustPIDScaleAxes;
+
+ return axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLPITCHYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_ROLLYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_PITCHYAW ||
+ axes == STABILIZATIONBANK_THRUSTPIDSCALEAXES_YAW;
+}
+
+static bool use_tps_for_p()
+{
+ uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
+
+ return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PI ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PD ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_P;
+}
+
+static bool use_tps_for_i()
+{
+ uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
+
+ return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PI ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_ID ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_I;
+}
+
+static bool use_tps_for_d()
+{
+ uint8_t target = stabSettings.stabBank.ThrustPIDScaleTarget;
+
+ return target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PID ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_PD ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_ID ||
+ target == STABILIZATIONBANK_THRUSTPIDSCALETARGET_D;
+}
+
static void BankUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
StabilizationBankGet(&stabSettings.stabBank);
@@ -268,6 +328,24 @@ static void BankUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
stabSettings.stabBank.YawPI.Ki,
0,
stabSettings.stabBank.YawPI.ILimit);
+
+ bool tps_for_axis[3] = {
+ use_tps_for_roll(),
+ use_tps_for_pitch(),
+ use_tps_for_yaw()
+ };
+ bool tps_for_pid[3] = {
+ use_tps_for_p(),
+ use_tps_for_i(),
+ use_tps_for_d()
+ };
+ for (int axis = 0; axis < 3; axis++) {
+ for (int pid = 0; pid < 3; pid++) {
+ stabSettings.thrust_pid_scaling_enabled[axis][pid] = stabSettings.stabBank.EnableThrustPIDScaling
+ && tps_for_axis[axis]
+ && tps_for_pid[pid];
+ }
+ }
}
diff --git a/shared/uavobjectdefinition/stabilizationbank.xml b/shared/uavobjectdefinition/stabilizationbank.xml
index 4689fa025..b1fbe5c13 100644
--- a/shared/uavobjectdefinition/stabilizationbank.xml
+++ b/shared/uavobjectdefinition/stabilizationbank.xml
@@ -19,6 +19,7 @@
+
diff --git a/shared/uavobjectdefinition/stabilizationsettingsbank1.xml b/shared/uavobjectdefinition/stabilizationsettingsbank1.xml
index c9fea0fb8..f3c1d654b 100644
--- a/shared/uavobjectdefinition/stabilizationsettingsbank1.xml
+++ b/shared/uavobjectdefinition/stabilizationsettingsbank1.xml
@@ -19,6 +19,7 @@
+
diff --git a/shared/uavobjectdefinition/stabilizationsettingsbank2.xml b/shared/uavobjectdefinition/stabilizationsettingsbank2.xml
index 1d39ba023..09d60c57c 100644
--- a/shared/uavobjectdefinition/stabilizationsettingsbank2.xml
+++ b/shared/uavobjectdefinition/stabilizationsettingsbank2.xml
@@ -19,6 +19,7 @@
+
diff --git a/shared/uavobjectdefinition/stabilizationsettingsbank3.xml b/shared/uavobjectdefinition/stabilizationsettingsbank3.xml
index 5b9216d03..787819fb2 100644
--- a/shared/uavobjectdefinition/stabilizationsettingsbank3.xml
+++ b/shared/uavobjectdefinition/stabilizationsettingsbank3.xml
@@ -19,6 +19,7 @@
+