mc_pos_control: migrate MPC_*_VEL_* parameter to acceleration scaling

Before #14212 the velocity control gains used in the multicopter
position controller were defined as a scale between velocity error in
one axis (or it's integral and derivative respectively) and the unit
thrust vector. The problem with this is that the normalization of the
unit thrust vector changes per vehicle or even vehicle configuration
as 0 and 100% thrust get a different physical response. That's why
the gains are now defined as scale between velocity error
(integral/derivative) and the output acceleration in m/s².
This commit is contained in:
Matthias Grob
2020-04-27 15:44:40 +02:00
parent e482081f91
commit d92e66863a
25 changed files with 123 additions and 96 deletions
@@ -25,9 +25,9 @@ then
param set MPC_THR_MIN 0.1
param set MPC_TKO_SPEED 1
param set MPC_XY_P 0.8
param set MPC_XY_VEL_D 0.005
param set MPC_XY_VEL_I 0.2
param set MPC_XY_VEL_P 0.15
param set MPC_XY_VEL_P_ACC 3
param set MPC_XY_VEL_I_ACC 4
param set MPC_XY_VEL_D_ACC 0.1
param set MPC_Z_VEL_MAX_DN 1.5
param set NAV_ACC_RAD 5
@@ -25,11 +25,11 @@ then
param set MPC_THR_MIN 0.1
param set MPC_TKO_SPEED 1
param set MPC_XY_P 0.15
param set MPC_XY_VEL_D 0.005
param set MPC_XY_VEL_I 0.2
param set MPC_XY_VEL_P 0.05
param set MPC_XY_VEL_D_ACC 0.1
param set MPC_XY_VEL_I_ACC 4
param set MPC_XY_VEL_P_ACC 1
param set MPC_Z_VEL_MAX_DN 1.5
param set MPC_Z_VEL_P 0.8
param set MPC_Z_VEL_P_ACC 16
param set NAV_ACC_RAD 5
param set NAV_LOITER_RAD 80
@@ -25,11 +25,11 @@ then
param set MPC_THR_MIN 0.1
param set MPC_TKO_SPEED 1
param set MPC_XY_P 0.15
param set MPC_XY_VEL_D 0.005
param set MPC_XY_VEL_I 0.2
param set MPC_XY_VEL_P 0.05
param set MPC_XY_VEL_D_ACC 0.1
param set MPC_XY_VEL_I_ACC 4
param set MPC_XY_VEL_P_ACC 1
param set MPC_Z_VEL_MAX_DN 1.5
param set MPC_Z_VEL_P 0.8
param set MPC_Z_VEL_P_ACC 16
param set NAV_ACC_RAD 5
param set NAV_LOITER_RAD 80
@@ -15,8 +15,8 @@ then
param set MC_ROLLRATE_P 0.15
param set MC_ROLLRATE_I 0.1
param set MC_ROLL_P 6.0
param set MPC_XY_VEL_I 0.2
param set MPC_XY_VEL_P 0.15
param set MPC_XY_VEL_I_ACC 4
param set MPC_XY_VEL_P_ACC 3
param set RTL_DESCEND_ALT 10
param set RTL_LAND_DELAY 0
+5 -5
View File
@@ -161,12 +161,12 @@ then
param set MPC_ALT_MODE 0
param set MPC_HOLD_MAX_Z 2
param set MPC_Z_VEL_I 0.15
param set MPC_Z_VEL_P 0.6
param set MPC_Z_VEL_P_ACC 12.0
param set MPC_Z_VEL_I_ACC 3.0
param set MPC_XY_P 0.8
param set MPC_XY_VEL_P 0.2
param set MPC_XY_VEL_I 0.02
param set MPC_XY_VEL_D 0.016
param set MPC_XY_VEL_P_ACC 4.0
param set MPC_XY_VEL_I_ACC 0.4
param set MPC_XY_VEL_D_ACC 0.32
param set MPC_SPOOLUP_TIME 0.5
param set MPC_TKO_RAMP_T 1
@@ -39,12 +39,12 @@ then
param set MPC_THR_MIN 0.1
param set MPC_TKO_SPEED 1
param set MPC_XY_P 0.8
param set MPC_XY_VEL_D 0.005
param set MPC_XY_VEL_I 0.2
param set MPC_XY_VEL_P 0.15
param set MPC_Z_VEL_I 0.15
param set MPC_XY_VEL_D_ACC 0.1
param set MPC_XY_VEL_I_ACC 4
param set MPC_XY_VEL_P_ACC 3
param set MPC_Z_VEL_P_ACC 12
param set MPC_Z_VEL_I_ACC 3
param set MPC_Z_VEL_MAX_DN 1.5
param set MPC_Z_VEL_P 0.6
param set NAV_ACC_RAD 5
param set NAV_DLL_ACT 2
@@ -41,7 +41,7 @@ then
param set MC_YAWRATE_MAX 50
param set MPC_XY_P 0.8
param set MPC_XY_VEL_P 0.1
param set MPC_XY_VEL_P_ACC 2
param set MPC_ACC_HOR_MAX 2
param set MPC_YAWRAUTO_MAX 20
@@ -55,9 +55,9 @@ then
param set MPC_TKO_SPEED 1
param set MPC_XY_P 0.3
param set MPC_XY_VEL_MAX 3
param set MPC_XY_VEL_P 0.05
param set MPC_XY_VEL_P_ACC 1
param set MPC_Z_P 0.5
param set MPC_Z_VEL_P 0.1
param set MPC_Z_VEL_P_ACC 2
param set MPC_YAWRAUTO_MAX 40
param set NAV_ACC_RAD 3
@@ -93,7 +93,7 @@ then
param set MIS_TAKEOFF_ALT 15
param set MPC_XY_P 0.8
param set MPC_XY_VEL_P 0.1
param set MPC_XY_VEL_P_ACC 2
param set MPC_XY_VEL_MAX 5
param set MPC_ACC_HOR_MAX 2
param set MPC_LAND_SPEED 1.2
@@ -92,11 +92,11 @@ then
param set MPC_VEL_MANUAL 5
param set MPC_XY_CRUISE 5
param set MPC_XY_VEL_MAX 5
param set MPC_XY_VEL_P 0.079
param set MPC_XY_VEL_P_ACC 1.58
param set MPC_XY_TRAJ_P 0.3
param set MPC_Z_TRAJ_P 0.3
param set MPC_Z_VEL_I 0.15
param set MPC_Z_VEL_P 0.25
param set MPC_Z_VEL_P_ACC 5
param set MPC_Z_VEL_I_ACC 3
param set MPC_LAND_ALT1 3
param set MPC_LAND_ALT2 1
@@ -48,7 +48,7 @@ then
param set MPC_THR_CURVE 1
param set MPC_THR_HOVER 0.25
param set MPC_THR_MIN 0.05
param set MPC_Z_VEL_I 0.085
param set MPC_Z_VEL_I_ACC 1.7
param set PWM_MAX 1950
param set PWM_MIN 1050
@@ -56,12 +56,12 @@ then
param set MPC_THR_MIN 0.1000
param set MPC_XY_CRUISE 8.0000
param set MPC_XY_P 1.5000
param set MPC_XY_VEL_P 0.1500
param set MPC_XY_VEL_P_ACC 3
param set MPC_Z_P 1.5000
param set MPC_Z_VEL_I 0.1500
param set MPC_Z_VEL_P_ACC 16
param set MPC_Z_VEL_I_ACC 3
param set MPC_Z_VEL_MAX_DN 4.0000
param set MPC_Z_VEL_MAX_UP 5.0000
param set MPC_Z_VEL_P 0.8000
# TELEM2 config
param set MAV_1_CONFIG 102
@@ -81,18 +81,17 @@ then
# Position control
param set MPC_Z_P 1.00000
param set MPC_Z_VEL_P 0.20000
param set MPC_Z_VEL_I 0.02000
param set MPC_Z_VEL_D 0.00000
param set MPC_Z_VEL_P_ACC 4
param set MPC_Z_VEL_I_ACC 0.4
param set MPC_THR_MIN 0.06000
param set MPC_THR_HOVER 0.3000
param set MIS_TAKEOFF_ALT 1.1000
param set MPC_XY_P 1.7000
param set MPC_XY_VEL_P 0.1300
param set MPC_XY_VEL_I 0.0600
param set MPC_XY_VEL_D 0.0100
param set MPC_XY_VEL_P_ACC 2.6
param set MPC_XY_VEL_I_ACC 1.2
param set MPC_XY_VEL_D_ACC 0.2
param set MPC_TKO_RAMP_T 1.0000
param set MPC_TKO_SPEED 1.1000
param set MPC_VEL_MANUAL 3.0000
@@ -90,18 +90,17 @@ then
# Position control
param set MPC_Z_P 1.10000
param set MPC_Z_VEL_P 0.30000
param set MPC_Z_VEL_I 0.05000
param set MPC_Z_VEL_D 0.00000
param set MPC_Z_VEL_P_ACC 6
param set MPC_Z_VEL_I_ACC 1
param set MPC_THR_MIN 0.06000
param set MPC_THR_HOVER 0.4400
param set MIS_TAKEOFF_ALT 1.1000
param set MPC_XY_P 1.7000
param set MPC_XY_VEL_P 0.1300
param set MPC_XY_VEL_I 0.0600
param set MPC_XY_VEL_D 0.0100
param set MPC_XY_VEL_P_ACC 2.6
param set MPC_XY_VEL_I_ACC 1.2
param set MPC_XY_VEL_D_ACC 0.2
param set MPC_TKO_RAMP_T 1.0000
param set MPC_TKO_SPEED 1.1000
param set MPC_VEL_MANUAL 3.0000
@@ -153,15 +153,15 @@ then
param set MPC_ACC_HOR_MAX 15
param set MPC_XY_P 1.15
param set MPC_XY_VEL_P 0.14
param set MPC_XY_VEL_I 0.014
param set MPC_XY_VEL_D 0.014
param set MPC_XY_VEL_P_ACC 2.8
param set MPC_XY_VEL_I_ACC 0.28
param set MPC_XY_VEL_D_ACC 0.28
param set MPC_XY_VEL_MAX 26.5
param set MPC_Z_P 0.85
param set MPC_Z_VEL_P 0.25
param set MPC_Z_VEL_I 0.085
param set MPC_Z_VEL_D 0.02
param set MPC_Z_VEL_P_ACC 5
param set MPC_Z_VEL_I_ACC 1.7
param set MPC_Z_VEL_D_ACC 0.4
# Documentation says limit is 8.0, but does not seem to be enforced in code.
param set MPC_Z_VEL_MAX_UP 20
param set MPC_Z_VEL_MAX_DN 2.5
@@ -27,9 +27,9 @@ then
param set MC_ROLLRATE_I 0.037
param set MC_ROLLRATE_D 0.0044
param set MC_ROLL_P 8.5
param set MPC_XY_VEL_P 0.11
param set MPC_XY_VEL_D 0.013
param set MPC_XY_VEL_P_ACC 2.2
param set MPC_XY_VEL_D_ACC 0.26
param set MPC_XY_P 1.1
param set MPC_Z_VEL_P 0.24
param set MPC_Z_VEL_P_ACC 4.8
param set MPC_Z_P 1.2
fi
@@ -53,8 +53,8 @@ then
param set MPC_THR_HOVER 0.7
param set MPC_THR_MAX 1
param set MPC_Z_P 1.5
param set MPC_Z_VEL_I 0.3
param set MPC_Z_VEL_P 0.4
param set MPC_Z_VEL_P_ACC 8
param set MPC_Z_VEL_I_ACC 6
param set MPC_HOLD_MAX_XY 0.1
param set MPC_MAX_FLOW_HGT 3
@@ -63,14 +63,13 @@ then
param set MPC_THR_HOVER 0.3000
# altitude control gains
param set MPC_Z_P 1.00000
param set MPC_Z_VEL_P 0.20000
param set MPC_Z_VEL_I 0.02000
param set MPC_Z_VEL_D 0.00000
param set MPC_Z_VEL_P_ACC 4
param set MPC_Z_VEL_I_ACC 0.4
# position control gains
param set MPC_XY_P 0.9500
param set MPC_XY_VEL_P 0.0900
param set MPC_XY_VEL_I 0.0200
param set MPC_XY_VEL_D 0.0100
param set MPC_XY_VEL_P_ACC 1.8
param set MPC_XY_VEL_I_ACC 0.4
param set MPC_XY_VEL_D_ACC 0.2
# etc gains
param set MPC_TKO_RAMP_T 0.4000
param set MPC_TKO_SPEED 1.5000