mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-29 19:57:12 +08:00
VTOL Tailsitter: don't use the fw attitude sp for determing the initial pitch if not recent
Use a pitch of 0 to initialize the ramp otherwise. Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
This commit is contained in:
@@ -191,8 +191,8 @@ void Tailsitter::update_transition_state()
|
|||||||
const hrt_abstime now = hrt_absolute_time();
|
const hrt_abstime now = hrt_absolute_time();
|
||||||
const float time_since_trans_start = (float)(now - _vtol_schedule.transition_start) * 1e-6f;
|
const float time_since_trans_start = (float)(now - _vtol_schedule.transition_start) * 1e-6f;
|
||||||
|
|
||||||
// we need the incoming (virtual) attitude setpoints (both mc and fw) to be recent, otherwise return (means the previous setpoint stays active)
|
// we need the incoming (virtual) mc attitude setpoints to be recent, otherwise return (means the previous setpoint stays active)
|
||||||
if (_mc_virtual_att_sp->timestamp < (now - 1_s) && _fw_virtual_att_sp->timestamp < (now - 1_s)) {
|
if (_mc_virtual_att_sp->timestamp < (now - 1_s)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,8 +209,15 @@ void Tailsitter::update_transition_state()
|
|||||||
float yaw_sp = atan2f(z(1), z(0));
|
float yaw_sp = atan2f(z(1), z(0));
|
||||||
|
|
||||||
// the intial attitude setpoint for a backtransition is a combination of the current fw pitch setpoint,
|
// the intial attitude setpoint for a backtransition is a combination of the current fw pitch setpoint,
|
||||||
// the yaw setpoint and zero roll since we want wings level transition
|
// the yaw setpoint and zero roll since we want wings level transition.
|
||||||
_q_trans_start = Eulerf(0.0f, _fw_virtual_att_sp->pitch_body, yaw_sp);
|
// If for some reason the fw attitude setpoint is not recent then don't sue it and assume 0 pitch
|
||||||
|
if (_fw_virtual_att_sp->timestamp > (now - 1_s)) {
|
||||||
|
_q_trans_start = Eulerf(0.0f, _fw_virtual_att_sp->pitch_body, yaw_sp);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
_q_trans_start = Eulerf(0.0f, 0.f, yaw_sp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// attitude during transitions are controlled by mc attitude control so rotate the desired attitude to the
|
// attitude during transitions are controlled by mc attitude control so rotate the desired attitude to the
|
||||||
// multirotor frame
|
// multirotor frame
|
||||||
|
|||||||
Reference in New Issue
Block a user