@@ -760,8 +760,7 @@ static void stabilizationTask(void* parameters)
760760 rateDesiredAxis [i ] = bound_sym (raw_input [i ], settings .ManualRate [i ]);
761761
762762 // Compute the inner loop
763- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
764- actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
763+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
765764
766765 break ;
767766
@@ -805,8 +804,7 @@ static void stabilizationTask(void* parameters)
805804 rateDesiredAxis [i ] = bound_sym (curve_cmd * max_rate_filtered [i ], max_rate_filtered [i ]);
806805
807806 // Compute the inner loop
808- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
809- actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ], 1.0f );
807+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
810808
811809 break ;
812810
@@ -830,7 +828,7 @@ static void stabilizationTask(void* parameters)
830828 }
831829
832830 // Compute the inner loop
833- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
831+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
834832 actuatorDesiredAxis [i ] = factor * raw_input [i ] + (1.0f - factor ) * actuatorDesiredAxis [i ];
835833 actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ], 1.0f );
836834
@@ -847,7 +845,7 @@ static void stabilizationTask(void* parameters)
847845 rateDesiredAxis [i ] = bound_sym (rateDesiredAxis [i ], settings .MaximumRate [i ]);
848846
849847 // Compute the inner loop
850- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
848+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
851849 actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
852850
853851 break ;
@@ -872,8 +870,7 @@ static void stabilizationTask(void* parameters)
872870
873871 // Compute desired rate as input biased towards leveling
874872 rateDesiredAxis [i ] = raw_input [i ] + weak_leveling ;
875- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
876- actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
873+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
877874
878875 break ;
879876 }
@@ -898,8 +895,7 @@ static void stabilizationTask(void* parameters)
898895 rateDesiredAxis [i ] = bound_sym (tmpRateDesired , settings .MaximumRate [i ]);
899896 }
900897
901- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
902- actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
898+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
903899
904900 break ;
905901
@@ -924,7 +920,7 @@ static void stabilizationTask(void* parameters)
924920 rateDesiredAxis [i ] = bound_sym (rateDesiredAxis [i ], settings .ManualRate [i ]);
925921
926922 // Compute the inner loop
927- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
923+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
928924 actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
929925
930926 break ;
@@ -974,13 +970,13 @@ static void stabilizationTask(void* parameters)
974970 rateDesiredAxis [i ] = bound_sym (rateDesiredAxis [i ], settings .MaximumRate [i ]);
975971
976972 // Compute the inner loop
977- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
973+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
978974 } else {
979975 // Get the desired rate. yaw is always in rate mode in system ident.
980976 rateDesiredAxis [i ] = bound_sym (raw_input [i ], settings .ManualRate [i ]);
981977
982978 // Compute the inner loop only for yaw
983- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
979+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
984980 }
985981
986982 const float scale = settings .AutotuneActuationEffort [i ];
@@ -1156,8 +1152,7 @@ static void stabilizationTask(void* parameters)
11561152 rateDesiredAxis [i ] = bound_sym (rateDesiredAxis [i ], settings .PoiMaximumRate [i ]);
11571153
11581154 // Compute the inner loop
1159- actuatorDesiredAxis [i ] = pid_apply_setpoint (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ]);
1160- actuatorDesiredAxis [i ] = bound_sym (actuatorDesiredAxis [i ],1.0f );
1155+ actuatorDesiredAxis [i ] = pid_apply_setpoint_antiwindup (& pids [PID_GROUP_RATE + i ], get_deadband (i ), rateDesiredAxis [i ], gyro_filtered [i ], -1.0f , 1.0f );
11611156
11621157 break ;
11631158 case STABILIZATIONDESIRED_STABILIZATIONMODE_DISABLED :
0 commit comments