|
|
|
@ -370,6 +370,10 @@ void Tiltrotor::update_transition_state()
@@ -370,6 +370,10 @@ void Tiltrotor::update_transition_state()
|
|
|
|
|
// add minimum throttle for front transition
|
|
|
|
|
_thrust_transition = math::max(_thrust_transition, FRONTTRANS_THR_MIN); |
|
|
|
|
|
|
|
|
|
// set spoiler and flaps to 0
|
|
|
|
|
_flaps_setpoint_with_slewrate.update(0.f, _dt); |
|
|
|
|
_spoiler_setpoint_with_slewrate.update(0.f, _dt); |
|
|
|
|
|
|
|
|
|
} else if (_vtol_schedule.flight_mode == vtol_mode::TRANSITION_FRONT_P2) { |
|
|
|
|
// the plane is ready to go into fixed wing mode, tilt the rotors forward completely
|
|
|
|
|
_tilt_control = math::constrain(_params_tiltrotor.tilt_transition + |
|
|
|
@ -392,6 +396,10 @@ void Tiltrotor::update_transition_state()
@@ -392,6 +396,10 @@ void Tiltrotor::update_transition_state()
|
|
|
|
|
// if this is not then then there is race condition where the fw rate controller still publishes a zero sample throttle after transition
|
|
|
|
|
_v_att_sp->thrust_body[0] = _thrust_transition; |
|
|
|
|
|
|
|
|
|
// set spoiler and flaps to 0
|
|
|
|
|
_flaps_setpoint_with_slewrate.update(0.f, _dt); |
|
|
|
|
_spoiler_setpoint_with_slewrate.update(0.f, _dt); |
|
|
|
|
|
|
|
|
|
} else if (_vtol_schedule.flight_mode == vtol_mode::TRANSITION_BACK) { |
|
|
|
|
|
|
|
|
|
// set idle speed for rotary wing mode
|
|
|
|
@ -534,9 +542,9 @@ void Tiltrotor::fill_actuator_outputs()
@@ -534,9 +542,9 @@ void Tiltrotor::fill_actuator_outputs()
|
|
|
|
|
fw_out[actuator_controls_s::INDEX_COLLECTIVE_TILT] = _tilt_control; |
|
|
|
|
|
|
|
|
|
if (_params->elevons_mc_lock && _vtol_schedule.flight_mode == vtol_mode::MC_MODE) { |
|
|
|
|
fw_out[actuator_controls_s::INDEX_ROLL] = 0; |
|
|
|
|
fw_out[actuator_controls_s::INDEX_PITCH] = 0; |
|
|
|
|
fw_out[actuator_controls_s::INDEX_YAW] = 0; |
|
|
|
|
fw_out[actuator_controls_s::INDEX_ROLL] = 0; |
|
|
|
|
fw_out[actuator_controls_s::INDEX_PITCH] = 0; |
|
|
|
|
fw_out[actuator_controls_s::INDEX_YAW] = 0; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
fw_out[actuator_controls_s::INDEX_ROLL] = fw_in[actuator_controls_s::INDEX_ROLL]; |
|
|
|
@ -547,6 +555,10 @@ void Tiltrotor::fill_actuator_outputs()
@@ -547,6 +555,10 @@ void Tiltrotor::fill_actuator_outputs()
|
|
|
|
|
_torque_setpoint_1->xyz[2] = fw_in[actuator_controls_s::INDEX_YAW]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fw_out[actuator_controls_s::INDEX_FLAPS] = _flaps_setpoint_with_slewrate.getState(); |
|
|
|
|
fw_out[actuator_controls_s::INDEX_SPOILERS] = _spoiler_setpoint_with_slewrate.getState(); |
|
|
|
|
fw_out[actuator_controls_s::INDEX_AIRBRAKES] = 0; |
|
|
|
|
|
|
|
|
|
_actuators_out_0->timestamp_sample = _actuators_mc_in->timestamp_sample; |
|
|
|
|
_actuators_out_1->timestamp_sample = _actuators_fw_in->timestamp_sample; |
|
|
|
|
|
|
|
|
|