From 9df753551e0ed2fbf50af2151f81fd991d669f94 Mon Sep 17 00:00:00 2001 From: Peter Hall Date: Wed, 10 Nov 2021 02:16:51 +0000 Subject: [PATCH] Plane: quadplane: tailsitter: always relax pitch after transtion --- ArduPlane/quadplane.cpp | 2 +- ArduPlane/tailsitter.cpp | 8 ++++++++ ArduPlane/tailsitter.h | 8 +++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ArduPlane/quadplane.cpp b/ArduPlane/quadplane.cpp index 7b5152e16d..749f58e491 100644 --- a/ArduPlane/quadplane.cpp +++ b/ArduPlane/quadplane.cpp @@ -906,7 +906,7 @@ void QuadPlane::relax_attitude_control() { // disable roll and yaw control for vectored tailsitters // if not a vectored tailsitter completely disable attitude control - attitude_control->relax_attitude_controllers(tailsitter._is_vectored); + attitude_control->relax_attitude_controllers(!tailsitter.relax_pitch()); } /* diff --git a/ArduPlane/tailsitter.cpp b/ArduPlane/tailsitter.cpp index f2bde63eec..fbe195e490 100644 --- a/ArduPlane/tailsitter.cpp +++ b/ArduPlane/tailsitter.cpp @@ -685,6 +685,14 @@ void Tailsitter::speed_scaling(void) } } +// return true if pitch control should be relaxed +// on vectored belly sitters the pitch control is not relaxed in order to keep motors pointing and avoid risk of props hitting the ground +// always relax after a transition +bool Tailsitter::relax_pitch() +{ + return !enabled() || !_is_vectored || (transition->vtol_limit_start_ms != 0); +} + /* update for transition from quadplane to fixed wing mode */ diff --git a/ArduPlane/tailsitter.h b/ArduPlane/tailsitter.h index 2b24744206..ef7579728b 100644 --- a/ArduPlane/tailsitter.h +++ b/ArduPlane/tailsitter.h @@ -62,9 +62,8 @@ public: // return the transition_angle_vtol value int8_t get_transition_angle_vtol() const; - - // true when flying a tilt-vectored tailsitter - bool _is_vectored; + // return true if pitch control should be relaxed + bool relax_pitch(); // tailsitter speed scaler float last_spd_scaler = 1.0f; // used to slew rate limiting with TAILSITTER_GSCL_ATT_THR option @@ -111,6 +110,9 @@ private: bool setup_complete; + // true when flying a tilt-vectored tailsitter + bool _is_vectored; + // refences for convenience QuadPlane& quadplane; AP_MotorsMulticopter*& motors;