diff --git a/ArduPlane/quadplane.cpp b/ArduPlane/quadplane.cpp index b50150890f..6251422841 100644 --- a/ArduPlane/quadplane.cpp +++ b/ArduPlane/quadplane.cpp @@ -1043,7 +1043,7 @@ void QuadPlane::update_transition(void) if (is_tailsitter()) { if (transition_state == TRANSITION_ANGLE_WAIT && - (ahrs_view->pitch_sensor < -tailsitter.transition_angle*100 || plane.fly_inverted())) { + tailsitter_transition_complete()) { GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_INFO, "Transition done"); transition_state = TRANSITION_DONE; } diff --git a/ArduPlane/quadplane.h b/ArduPlane/quadplane.h index bc86160746..7599853209 100644 --- a/ArduPlane/quadplane.h +++ b/ArduPlane/quadplane.h @@ -83,6 +83,9 @@ public: // create outputs for tailsitters void tailsitter_output(void); + + // check if we have completed transition + bool tailsitter_transition_complete(void); struct PACKED log_QControl_Tuning { LOG_PACKET_HEADER; diff --git a/ArduPlane/tailsitter.cpp b/ArduPlane/tailsitter.cpp index 0dc030930b..55e113f891 100644 --- a/ArduPlane/tailsitter.cpp +++ b/ArduPlane/tailsitter.cpp @@ -44,3 +44,20 @@ void QuadPlane::tailsitter_output(void) } } + +/* + return true when we have completed enough of a transition to switch to fixed wing control + */ +bool QuadPlane::tailsitter_transition_complete(void) +{ + if (plane.fly_inverted()) { + // transition immediately + return true; + } + if (ahrs_view->pitch_sensor < -tailsitter.transition_angle*100 || + ahrs_view->roll_sensor < -tailsitter.transition_angle*100) { + return true; + } + // still waiting + return false; +}