Skip to content
Snippets Groups Projects
Commit 5f06c6a1 authored by Julien Lecoeur's avatar Julien Lecoeur Committed by Daniel Agar
Browse files

VTOL: add parameter to prevent flight if roll direction was not checked

Mark V19_VT_ROLLDIR @category system

Throttle down mavlink critical msg

Send 0 actuator_output for safety

VTOL: unset v1.9 roll direction safety check param for builtin airframes
parent e28f8a7f
No related branches found
No related tags found
No related merge requests found
Showing
with 112 additions and 1 deletion
......@@ -38,6 +38,9 @@ then
param set VT_TYPE 2
param set WEST_EN 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -39,6 +39,9 @@ then
param set VT_TYPE 0
param set WEST_EN 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 20
......
......@@ -42,6 +42,9 @@ then
param set VT_TYPE 1
param set WEST_EN 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 21
......
......@@ -62,6 +62,9 @@ then
param set VT_F_TRANS_THR 0.75
param set VT_MOT_COUNT 4
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
param set SYS_HITL 1
......
......@@ -27,6 +27,9 @@ then
param set VT_TYPE 2
param set VT_MOT_COUNT 4
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -37,6 +37,9 @@ then
param set VT_ELEV_MC_LOCK 0
param set VT_MOT_COUNT 2
param set VT_TYPE 0
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 19
......
......@@ -48,6 +48,9 @@ then
param set VT_TILT_FW 0.9
param set VT_ELEV_MC_LOCK 0
param set VT_TYPE 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 21
......
......@@ -19,6 +19,9 @@ then
param set VT_IDLE_PWM_MC 1080
param set VT_TYPE 0
param set VT_ELEV_MC_LOCK 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 20
......
......@@ -30,6 +30,9 @@ then
param set VT_IDLE_PWM_MC 1080
param set VT_TYPE 0
param set VT_ELEV_MC_LOCK 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 20
......
......@@ -60,6 +60,9 @@ then
param set VT_MOT_COUNT 4
param set VT_IDLE_PWM_MC 1080
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -49,6 +49,9 @@ then
param set VT_F_TRANS_THR 0.75
param set VT_IDLE_PWM_MC 1080
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -37,6 +37,9 @@ then
param set VT_MOT_COUNT 4
param set VT_IDLE_PWM_MC 1080
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -55,6 +55,9 @@ then
param set VT_IDLE_PWM_MC 1080
param set VT_MOT_COUNT 4
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -77,6 +77,8 @@ then
param set VT_TRANS_TIMEOUT 30
param set VT_TYPE 2
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -30,6 +30,9 @@ then
param set VT_TILT_TRANS 0.5
param set VT_ELEV_MC_LOCK 0
param set VT_TYPE 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 21
......
......@@ -77,6 +77,9 @@ then
param set VT_TRANS_P2_DUR 1.3
param set VT_ELEV_MC_LOCK 0
param set VT_TYPE 1
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 21
......
......@@ -151,6 +151,8 @@ then
param set VT_TRANS_TIMEOUT 22
param set VT_F_TRANS_RAMP 4
# Indicate that FW roll direction was fixed in mixer, to be removed in v1.10
param set V19_VT_ROLLDIR 0
fi
set MAV_TYPE 22
......
......@@ -89,6 +89,8 @@ VtolAttitudeControl::VtolAttitudeControl()
_params_handles.diff_thrust = param_find("VT_FW_DIFTHR_EN");
_params_handles.diff_thrust_scale = param_find("VT_FW_DIFTHR_SC");
_params_handles.v19_vt_rolldir = param_find("V19_VT_ROLLDIR");
/* fetch initial parameter values */
parameters_update();
......@@ -504,6 +506,9 @@ VtolAttitudeControl::parameters_update()
// make sure parameters are feasible, require at least 1 m/s difference between transition and blend airspeed
_params.airspeed_blend = math::min(_params.airspeed_blend, _params.transition_airspeed - 1.0f);
// Bugfix for v1.9, should be removed in 1.10
param_get(_params_handles.v19_vt_rolldir, &_params.v19_vt_rolldir);
// update the parameters of the instances of base VtolType
if (_vtol_type != nullptr) {
_vtol_type->parameters_update();
......@@ -663,7 +668,39 @@ void VtolAttitudeControl::task_main()
_vtol_type->update_transition_state();
}
_vtol_type->fill_actuator_outputs();
// Fill actuator output
if (_params.v19_vt_rolldir) {
// The mixer may not have been adapted to the roll inversion in v1.9
// Display error message and do not fill actuator outputs
// TODO: remove the parameter and this error message in v1.10
const int v19_rolldir_warning_throttling = 5000;
static int v19_rolldir_warning_counter = 0;
v19_rolldir_warning_counter += 1;
if ((v19_rolldir_warning_counter % v19_rolldir_warning_throttling) == 0) {
mavlink_log_critical(&_mavlink_log_pub,
"The VTOL roll commands were inverted in v1.9!");
mavlink_log_critical(&_mavlink_log_pub,
"Check roll mixing, then set V19_VT_ROLLDIR to 0");
}
// Do not fill actuator output
_actuators_out_0.timestamp = hrt_absolute_time();
_actuators_out_0.timestamp_sample = _actuators_mc_in.timestamp_sample;
_actuators_out_1.timestamp = hrt_absolute_time();
_actuators_out_1.timestamp_sample = _actuators_fw_in.timestamp_sample;
for (size_t i = 0; i < actuator_controls_s::NUM_ACTUATOR_CONTROLS; i++) {
_actuators_out_0.control[i] = 0.0f;
_actuators_out_1.control[i] = 0.0f;
}
} else {
// normal operation
_vtol_type->fill_actuator_outputs();
}
/* Only publish if the proper mode(s) are enabled */
if (_v_control_mode.flag_control_attitude_enabled ||
......
......@@ -197,6 +197,7 @@ private:
param_t fw_motors_off;
param_t diff_thrust;
param_t diff_thrust_scale;
param_t v19_vt_rolldir;
} _params_handles{};
/* for multicopters it is usual to have a non-zero idle speed of the engines
......
......@@ -314,3 +314,27 @@ PARAM_DEFINE_INT32(VT_FW_DIFTHR_EN, 0);
* @group VTOL Attitude Control
*/
PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_SC, 0.1f);
/**
* Temporary parameter for the upgrade to v1.9, this is reminder to check the direction of
* fixed-wing roll control surfaces on custom VTOLs platforms.
*
* This parameter is present in v1.9 to enable smooth transition, it will be removed in v1.10.
*
* In firmware versions before v1.9, the VTOL attitude controller generated reversed fixed
* wing roll commands. As a consequence, all VTOL mixers had to reverse roll mixing. The
* VTOL roll commands in fixed wing mode were fixed in v1.9!
* - Standard VTOL platforms should be unaffected and this parameter can be ignored.
* - Custom VTOL platforms may crash if no action is taken, please check the direction of
* deflection of roll control surfaces before flight. Fix the roll mixer if necessary.
*
* Set to 1 to disable VTOL actuator outputs and display an info message (default).
* Set to 0 AFTER CAREFULLY CHECKING the direction of deflection of roll control surfaces.
*
* @min 0
* @max 1
* @decimal 0
* @category system
* @group VTOL Attitude Control
*/
PARAM_DEFINE_INT32(V19_VT_ROLLDIR, 1);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment