|
|
|
@ -281,6 +281,7 @@ private:
@@ -281,6 +281,7 @@ private:
|
|
|
|
|
float airspeed_trim; |
|
|
|
|
float airspeed_max; |
|
|
|
|
float airspeed_trans; |
|
|
|
|
int airspeed_mode; |
|
|
|
|
|
|
|
|
|
float pitch_limit_min; |
|
|
|
|
float pitch_limit_max; |
|
|
|
@ -338,6 +339,7 @@ private:
@@ -338,6 +339,7 @@ private:
|
|
|
|
|
param_t airspeed_trim; |
|
|
|
|
param_t airspeed_max; |
|
|
|
|
param_t airspeed_trans; |
|
|
|
|
param_t airspeed_mode; |
|
|
|
|
|
|
|
|
|
param_t pitch_limit_min; |
|
|
|
|
param_t pitch_limit_max; |
|
|
|
@ -618,6 +620,7 @@ FixedwingPositionControl::FixedwingPositionControl() :
@@ -618,6 +620,7 @@ FixedwingPositionControl::FixedwingPositionControl() :
|
|
|
|
|
_parameter_handles.airspeed_trim = param_find("FW_AIRSPD_TRIM"); |
|
|
|
|
_parameter_handles.airspeed_max = param_find("FW_AIRSPD_MAX"); |
|
|
|
|
_parameter_handles.airspeed_trans = param_find("VT_ARSP_TRANS"); |
|
|
|
|
_parameter_handles.airspeed_mode = param_find("FW_ARSP_MODE"); |
|
|
|
|
|
|
|
|
|
_parameter_handles.pitch_limit_min = param_find("FW_P_LIM_MIN"); |
|
|
|
|
_parameter_handles.pitch_limit_max = param_find("FW_P_LIM_MAX"); |
|
|
|
@ -703,6 +706,7 @@ FixedwingPositionControl::parameters_update()
@@ -703,6 +706,7 @@ FixedwingPositionControl::parameters_update()
|
|
|
|
|
param_get(_parameter_handles.airspeed_trim, &(_parameters.airspeed_trim)); |
|
|
|
|
param_get(_parameter_handles.airspeed_max, &(_parameters.airspeed_max)); |
|
|
|
|
param_get(_parameter_handles.airspeed_trans, &(_parameters.airspeed_trans)); |
|
|
|
|
param_get(_parameter_handles.airspeed_mode, &(_parameters.airspeed_mode)); |
|
|
|
|
|
|
|
|
|
param_get(_parameter_handles.pitch_limit_min, &(_parameters.pitch_limit_min)); |
|
|
|
|
param_get(_parameter_handles.pitch_limit_max, &(_parameters.pitch_limit_max)); |
|
|
|
@ -2339,8 +2343,13 @@ void FixedwingPositionControl::tecs_update_pitch_throttle(float alt_sp, float v_
@@ -2339,8 +2343,13 @@ void FixedwingPositionControl::tecs_update_pitch_throttle(float alt_sp, float v_
|
|
|
|
|
if (_vehicle_status.is_vtol && _vehicle_status.in_transition_mode) { |
|
|
|
|
_was_in_transition = true; |
|
|
|
|
// set this to transition airspeed to init tecs correctly
|
|
|
|
|
// some vtols fly without airspeed sensor
|
|
|
|
|
_asp_after_transition = _parameters.airspeed_trans; |
|
|
|
|
if(_parameters.airspeed_mode == control_state_s::AIRSPD_MODE_DISABLED){ |
|
|
|
|
// some vtols fly without airspeed sensor
|
|
|
|
|
_asp_after_transition = _parameters.airspeed_trans; |
|
|
|
|
} else { |
|
|
|
|
_asp_after_transition = _ctrl_state.airspeed; |
|
|
|
|
} |
|
|
|
|
_asp_after_transition = math::constrain(_asp_after_transition, _parameters.airspeed_min, _parameters.airspeed_max); |
|
|
|
|
|
|
|
|
|
} else if (_was_in_transition) { |
|
|
|
|
// after transition we ramp up desired airspeed from the speed we had coming out of the transition
|
|
|
|
|