ControlAllocation: introduce convention for control surface deflection sign

- horizontal control surfaces: up=positive deflection
- vertical control surfaces (rudder): right=positive deflection
- mixed (V-Tail): up=positive deflection

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
This commit is contained in:
Silvan Fuhrer 2021-12-14 15:48:58 +01:00 committed by Daniel Agar
parent 5259877b1b
commit 1ad66e606b
7 changed files with 109 additions and 78 deletions

View File

@ -50,26 +50,24 @@ param set-default CA_ROTOR_COUNT 1
param set-default CA_ROTOR0_PX 0.3 param set-default CA_ROTOR0_PX 0.3
param set-default CA_SV_CS_COUNT 6 param set-default CA_SV_CS_COUNT 6
param set-default CA_SV_CS0_TRQ_Y 1.0000 param set-default CA_SV_CS0_TRQ_R -0.5
param set-default CA_SV_CS0_TYPE 2 param set-default CA_SV_CS0_TYPE 1
param set-default CA_SV_CS1_TYPE 7 param set-default CA_SV_CS1_TRQ_R 0.5
param set-default CA_SV_CS2_TRQ_P -1.0000 param set-default CA_SV_CS1_TYPE 2
param set-default CA_SV_CS2_TRQ_R 1.0000 param set-default CA_SV_CS2_TRQ_P 1.0
param set-default CA_SV_CS2_TYPE 9 param set-default CA_SV_CS2_TYPE 3
param set-default CA_SV_CS3_TRQ_P 1.0000 param set-default CA_SV_CS3_TRQ_Y 1.0
param set-default CA_SV_CS3_TRQ_R 1.0000 param set-default CA_SV_CS3_TYPE 4
param set-default CA_SV_CS3_TYPE 10 param set-default CA_SV_CS4_TYPE 9
param set-default CA_SV_CS4_TRQ_P 1.0000 param set-default CA_SV_CS5_TYPE 10
param set-default CA_SV_CS5_TYPE 8 param set-default PWM_MAIN_FUNC3 204
param set-default PWM_MAIN_FUNC4 205
param set-default PWM_MAIN_FUNC3 201
param set-default PWM_MAIN_FUNC4 202
param set-default PWM_MAIN_FUNC5 101 param set-default PWM_MAIN_FUNC5 101
param set-default PWM_MAIN_FUNC6 203 param set-default PWM_MAIN_FUNC6 201
param set-default PWM_MAIN_FUNC7 204 param set-default PWM_MAIN_FUNC7 202
param set-default PWM_MAIN_FUNC8 205 param set-default PWM_MAIN_FUNC8 203
param set-default PWM_MAIN_FUNC9 206 param set-default PWM_MAIN_FUNC9 206
param set-default PWM_MAIN_REV 288 param set-default PWM_MAIN_REV 256
set MIXER_FILE etc/mixers-sitl/plane_sitl.main.mix set MIXER_FILE etc/mixers-sitl/plane_sitl.main.mix

View File

@ -7,7 +7,7 @@
. ${R}etc/init.d/rc.vtol_defaults . ${R}etc/init.d/rc.vtol_defaults
#param set-default SYS_CTRL_ALLOC 1 # param set-default SYS_CTRL_ALLOC 1
param set-default CA_AIRFRAME 2 param set-default CA_AIRFRAME 2
param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR_COUNT 4
@ -25,11 +25,12 @@ param set-default CA_ROTOR3_PY 0.1875
param set-default CA_ROTOR3_KM -0.05 param set-default CA_ROTOR3_KM -0.05
param set-default CA_SV_CS_COUNT 3 param set-default CA_SV_CS_COUNT 3
param set-default CA_SV_CS0_TRQ_R 1.0000 param set-default CA_SV_CS0_TYPE 1
param set-default CA_SV_CS0_TYPE 9 param set-default CA_SV_CS0_TRQ_R -0.5
param set-default CA_SV_CS1_TRQ_R 1.0000 param set-default CA_SV_CS1_TYPE 2
param set-default CA_SV_CS1_TYPE 10 param set-default CA_SV_CS1_TRQ_R 0.5
param set-default CA_SV_CS2_TRQ_P 1.0000 param set-default CA_SV_CS2_TYPE 3
param set-default CA_SV_CS2_TRQ_P 1.0
param set-default PWM_MAIN_FUNC1 101 param set-default PWM_MAIN_FUNC1 101
param set-default PWM_MAIN_FUNC2 102 param set-default PWM_MAIN_FUNC2 102
param set-default PWM_MAIN_FUNC3 103 param set-default PWM_MAIN_FUNC3 103
@ -38,8 +39,6 @@ param set-default PWM_MAIN_FUNC5 105
param set-default PWM_MAIN_FUNC6 201 param set-default PWM_MAIN_FUNC6 201
param set-default PWM_MAIN_FUNC7 202 param set-default PWM_MAIN_FUNC7 202
param set-default PWM_MAIN_FUNC8 203 param set-default PWM_MAIN_FUNC8 203
param set-default PWM_MAIN_REV 32
param set-default FW_L1_PERIOD 12 param set-default FW_L1_PERIOD 12
param set-default FW_MAN_P_MAX 30 param set-default FW_MAN_P_MAX 30

View File

@ -25,12 +25,12 @@ param set-default CA_ROTOR3_PY 1
param set-default CA_ROTOR3_KM -0.05 param set-default CA_ROTOR3_KM -0.05
param set-default CA_SV_CS_COUNT 2 param set-default CA_SV_CS_COUNT 2
param set-default CA_SV_CS0_TYPE 9 param set-default CA_SV_CS0_TYPE 5
param set-default CA_SV_CS0_TRQ_P -1 param set-default CA_SV_CS0_TRQ_P 0.5
param set-default CA_SV_CS0_TRQ_Y -1 param set-default CA_SV_CS0_TRQ_Y -0.5
param set-default CA_SV_CS1_TYPE 10 param set-default CA_SV_CS1_TYPE 6
param set-default CA_SV_CS1_TRQ_P -1 param set-default CA_SV_CS1_TRQ_P 0.5
param set-default CA_SV_CS1_TRQ_Y 1 param set-default CA_SV_CS1_TRQ_Y 0.5
param set-default PWM_MAIN_FUNC1 101 param set-default PWM_MAIN_FUNC1 101
param set-default PWM_MAIN_FUNC2 102 param set-default PWM_MAIN_FUNC2 102
@ -39,6 +39,7 @@ param set-default PWM_MAIN_FUNC4 104
param set-default PWM_MAIN_FUNC5 0 param set-default PWM_MAIN_FUNC5 0
param set-default PWM_MAIN_FUNC6 201 param set-default PWM_MAIN_FUNC6 201
param set-default PWM_MAIN_FUNC7 202 param set-default PWM_MAIN_FUNC7 202
param set-default PWM_MAIN_REV 96 # invert both elevons
param set-default FW_L1_PERIOD 12 param set-default FW_L1_PERIOD 12
param set-default FW_MAN_P_MAX 30 param set-default FW_MAN_P_MAX 30

View File

@ -28,11 +28,12 @@ param set-default CA_ROTOR0_TILT 1
param set-default CA_ROTOR1_TILT 2 param set-default CA_ROTOR1_TILT 2
param set-default CA_ROTOR2_TILT 3 param set-default CA_ROTOR2_TILT 3
param set-default CA_ROTOR3_TILT 4 param set-default CA_ROTOR3_TILT 4
param set-default CA_SV_CS0_TRQ_R 1.0000 param set-default CA_SV_CS0_TRQ_R -0.5
param set-default CA_SV_CS0_TYPE 9 param set-default CA_SV_CS0_TYPE 1
param set-default CA_SV_CS1_TRQ_R 1.0000 param set-default CA_SV_CS1_TRQ_R 0.5
param set-default CA_SV_CS1_TYPE 10 param set-default CA_SV_CS1_TYPE 2
param set-default CA_SV_CS2_TRQ_P 1.0000 param set-default CA_SV_CS2_TRQ_P 1.0
param set-default CA_SV_CS2_TYPE 3
param set-default CA_SV_CS_COUNT 3 param set-default CA_SV_CS_COUNT 3
param set-default CA_SV_TL0_CT 0 param set-default CA_SV_TL0_CT 0
param set-default CA_SV_TL1_CT 0 param set-default CA_SV_TL1_CT 0
@ -51,7 +52,6 @@ param set-default PWM_MAIN_FUNC8 207
param set-default PWM_MAIN_FUNC9 201 param set-default PWM_MAIN_FUNC9 201
param set-default PWM_MAIN_FUNC10 202 param set-default PWM_MAIN_FUNC10 202
param set-default PWM_MAIN_FUNC11 203 param set-default PWM_MAIN_FUNC11 203
param set-default PWM_MAIN_REV 256
param set-default FW_L1_PERIOD 12 param set-default FW_L1_PERIOD 12
param set-default FW_MAN_P_MAX 30 param set-default FW_MAN_P_MAX 30

View File

@ -82,8 +82,15 @@ void ActuatorEffectivenessControlSurfaces::updateParams()
param_get(_param_handles[i].trim, &_params[i].trim); param_get(_param_handles[i].trim, &_params[i].trim);
// TODO: enforce limits? // TODO: enforce limits (note that tailsitter uses different limits)?
switch (_params[i].type) { switch (_params[i].type) {
case Type::LeftAileron:
break;
case Type::RightAileron:
break;
case Type::Elevator: case Type::Elevator:
break; break;
@ -107,12 +114,6 @@ void ActuatorEffectivenessControlSurfaces::updateParams()
torque.setZero(); torque.setZero();
break; break;
case Type::LeftAileron:
break;
case Type::RightAileron:
break;
case Type::Airbrakes: case Type::Airbrakes:
torque.setZero(); torque.setZero();
break; break;

View File

@ -45,16 +45,16 @@ public:
enum class Type : int32_t { enum class Type : int32_t {
// This matches with the parameter // This matches with the parameter
Elevator = 1, LeftAileron = 1,
Rudder = 2, RightAileron = 2,
LeftElevon = 3, Elevator = 3,
RightElevon = 4, Rudder = 4,
LeftVTail = 5, LeftElevon = 5,
RightVTail = 6, RightElevon = 6,
LeftFlaps = 7, LeftVTail = 7,
RightFlaps = 8, RightVTail = 8,
LeftAileron = 9, LeftFlaps = 9,
RightAileron = 10, RightFlaps = 10,
Airbrakes = 11, Airbrakes = 11,
Custom = 12, Custom = 12,
}; };

View File

@ -246,16 +246,16 @@ parameters:
short: Control Surface ${i} type short: Control Surface ${i} type
type: enum type: enum
values: values:
1: Elevator 1: Left Aileron
2: Rudder 2: Right Aileron
3: Left Elevon 3: Elevator
4: Right Elevon 4: Rudder
5: Left V-Tail 5: Left Elevon
6: Right V-Tail 6: Right Elevon
7: Left Flaps 7: Left V-Tail
8: Right Flaps 8: Right V-Tail
9: Left Aileron 9: Left Flap
10: Right Aileron 10: Right Flap
11: Airbrakes 11: Airbrakes
12: Custom 12: Custom
num_instances: *max_num_servos num_instances: *max_num_servos
@ -423,23 +423,55 @@ mixer:
- select_identifier: 'servo-type' # restrict torque based on servo type - select_identifier: 'servo-type' # restrict torque based on servo type
apply_identifiers: ['servo-torque-roll', 'servo-torque-pitch', 'servo-torque-yaw'] apply_identifiers: ['servo-torque-roll', 'servo-torque-pitch', 'servo-torque-yaw']
items: items:
# TODO # Convention: horizontal surfaces: up=positive, vertical: right=positive, mixed: up=positive.
1: # Elevator # By default the scale is set to 1/N, where N is the amount of actuators with an effect on
# the corresponding axis. With that we are using all the available servo moving range.
1: # Left Aileron
- { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # roll
- { 'hidden': True, 'default': 0.0 } # pitch
- { 'hidden': True, 'default': 0.0 } # yaw
2: # Right Aileron
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # roll
- { 'hidden': True, 'default': 0.0 } # pitch
- { 'hidden': True, 'default': 0.0 } # yaw
3: # Elevator
- { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # pitch
- { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'default': 0.0 } # yaw
2: # Rudder 4: # Rudder
- { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # roll
- { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # pitch
- { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # yaw - { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # yaw
3: # Left elevon 5: # Left Elevon
- { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # roll - { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # roll
- { 'min': -1.0, 'max': 0.0, 'default': -1.0 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'default': 0.0 } # yaw
4: # Right elevon 6: # Right Elevon
- { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'default': 0.0 } # yaw
7: # Left V Tail
- { 'hidden': True, 'default': 0.0 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # yaw
8: # Right V Tail
- { 'hidden': True, 'default': 0.0 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # yaw
- select_identifier: 'servo-type-tailsitter' # restrict torque based on servo type for tailsitters
apply_identifiers: ['servo-torque-roll-tailsitter', 'servo-torque-pitch-tailsitter', 'servo-torque-yaw-tailsitter']
items:
# Convention: horizontal surfaces: up=positive, vertical: right=positive, mixed: up=positive.
# No rules for control surfaces on tailsitter beside elevons.
5: # Left Elevon (Tailsitter --> wing vertical, so affects pitch and yaw)
- { 'hidden': True, 'default': 0.0 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # yaw
6: # Right Elevon (Tailsitter -->wing vertical, so affects pitch and yaw)
- { 'hidden': True, 'default': 0.0 } # roll
- { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch
- { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # yaw
config: config:
param: CA_AIRFRAME param: CA_AIRFRAME
@ -604,16 +636,16 @@ mixer:
- name: 'CA_SV_CS${i}_TYPE' - name: 'CA_SV_CS${i}_TYPE'
label: 'Type' label: 'Type'
function: 'type' function: 'type'
identifier: 'servo-type' identifier: 'servo-type-tailsitter'
- name: 'CA_SV_CS${i}_TRQ_R' - name: 'CA_SV_CS${i}_TRQ_R'
label: 'Roll Scale' label: 'Roll Scale'
identifier: 'servo-torque-roll' identifier: 'servo-torque-roll-tailsitter'
- name: 'CA_SV_CS${i}_TRQ_P' - name: 'CA_SV_CS${i}_TRQ_P'
label: 'Pitch Scale' label: 'Pitch Scale'
identifier: 'servo-torque-pitch' identifier: 'servo-torque-pitch-tailsitter'
- name: 'CA_SV_CS${i}_TRQ_Y' - name: 'CA_SV_CS${i}_TRQ_Y'
label: 'Yaw Scale' label: 'Yaw Scale'
identifier: 'servo-torque-yaw' identifier: 'servo-torque-yaw-tailsitter'
- name: 'CA_SV_CS${i}_TRIM' - name: 'CA_SV_CS${i}_TRIM'
label: 'Trim' label: 'Trim'
parameters: parameters: