In ArduPilot tailsitters are any VTOL aircraft type that rotates the fuselage (and autopilot) when moving between forward flight and hover.
Despite the name, not all tailsitters land on their tails. Some are “belly landers”, where they lie down flat for landing to improve takeoff and landing stability in wind. Some may have an undercarriage for wheeled takeoff and others may have a stand or other landing aid.
All tailsitters are considered types of QuadPlanes in ArduPilot. You should start off by reading the QuadPlane documentation before moving onto this tailsitter specific documentation.
Vectored and non-Vectored¶
ArduPilot sub-divides tailsitters into two broad categories:
- vectored tailsitters can tilt their rotors independently of the movement of the fuselage, giving them vectored thrust
- non-vectored tailsitters have fixed rotor orientation relative to
the fuselage, and rely on large control surfaces for hover authority
- Within non-vectored are two sub-categories: Single/Dual Motor and CopterMotor. The first uses one or two motors and can employ only differential thrust , while the second uses three, four, or more motors and operates in a more copter-like fashion.
Currently all CopterMotor style Quadplanes do not use any yaw torque control. Roll (with respect to plane body) is only controlled by the flying surface (ailerons or elevons)
The key parameter to make a single or dual motor QuadPlane a tailsitter is to set Q_FRAME_CLASS =10. That tells the QuadPlane code to use the tailsitter VTOL backend.
The tailsitter backend is a bit unusual, as it is the only Q_FRAME_CLASS setting that may not have any multicopter-style motors associated with it. If Q_TAILSIT_MOTMX is zero (the default), meaning no multicopter-like motors, it provides roll, pitch, yaw and thrust (Throttle, Throttle Left, Throttle Right) values to the fixed wing control code. These values then control your ailerons, elevons, elevators, rudder and forward motors.
This has a nice benefit when setting up the tailsitter that you can follow the normal fixed wing setup guide in MANUAL and FBWA modes, and then when you switch to hover all of your control directions will be correct.
It also means that you can fly any fixed wing aircraft that is capable of 3D flight as a single or dual motor tailsitter, and fly it in modes like QSTABILIZE, QHOVER and QLOITER.
However, it can also have copter-like motors, like a conventional QuadPlane if Q_TAILSIT_MOTMX is non-zero. Then this parameter determines which motors remain active in normal forward flight (plane modes). If non-zero, then use the Q_FRAME_CLASS and Q_FRAME_TYPE parameter to configure the multicopter motor style, and the appropriate MOTORx outputs will be activated.
Currently, only the following combinations are supported for CopterMotor tailsitters:
Motor Rotation and Layout¶
(looking down on nose from above)
Single/Dual Motor Tailsitter¶
Motors are controlled by the Throttle, Throttle Left, Throttle Right outputs:
QUAD PLUS Motor Tailsitter¶
Motors are controlled by the M1-M4 outputs:
QUAD X Motor Tailsitter¶
Motors are controlled by the M1-M4 outputs:
Motors are controller by the M1/M2/M4 outputs:
The key differences between fixed wing flight and hovering for a tailsitter are:
- when hovering the copter PID gains will be used (the ones starting with Q_A_RAT_*)
- when in fixed wing flight the fixed wing PID gains will be used (the PTCH2SRV_* and RLL2SRV_* gains)
- when hovering the nose of the aircraft will try to point up for “level” flight
- when in fixed wing flight the nose of the aircraft will try to point forward for “level” flight
Q_TAILSIT_RLL_MX allows the roll limit angle limit to be set differently from Q_ANGLE_MAX. If left at zero both pitch and roll are limited by Q_ANGLE_MAX. If Q_TAILSIT_RLL_MX is nonzero roll angle will be limited and pitch max angle will still be Q_ANGLE_MAX. This should be set if your tailsitter can achieve much larger pitch angle than would be safe for roll (some airframes can’t recover from high-speed knife-edge flight).
Q_TAILSIT_ANGLE specifies how far the nose must pitch up or down before a transition is complete: down for transition from VTOL mode to FW mode, and up for transition from FW to VTOL. So a value of e.g. 60 degrees results in switching from copter to plane controller (forward transition) when the nose reaches 30 degrees above the horizon (60 degrees down from vertical). For the back transition, the plane controller would be used until the nose reaches 60 degrees above the horizon. So the larger the value of Q_TAILSIT_ANGLE, the later the switch from one controller to the other.
Q_TRANSITION_MS specifies a timeout for transition from VTOL to FW flight. Even if the angle specified by Q_TAILSIT_ANGLE has not been reached before this interval has elapsed, the transition will be considered complete. The timeout for back transitions (from FW to VTOL flight) is hardcoded to 2 seconds.
PID gain scheduling¶
- If greater than 1: defines the maximum boost that will be applied to the control surfaces when throttle is below hover, this should be reduced if oscillations are seen at low throttle.
- If less than 1: then instead of boosting control surface deflection below hover throttle, deflection is reduced at high airspeeds (if an airspeed sensor is available and enabled) or at high tilt angles and high throttle levels. The maximum attenuation is currently hardwired to 0.2, so control surface deflection is reduced by a factor of 0.2 when airspeed exceeds ARSPD_FBW_MAX, or if airspeed is not available, when tilt reaches 90 degrees from vertical or at max throttle.
The AHRS_ORIENTATION, the accelerometer calibration and AHRS trim should all be done for fixed wing flight. Fixed wing flight is considered “normal” orientation for a tailsitter.
If your tailsitter has vectored thrust then you should set the SERVOn_FUNCTION values for your two tilt servos for the left and right motors and for the left and right motor throttles.
For example, if your left tilt servo is channel 5 and your right tilt servo is channel 6, then set:
and you need to assign left throttle to the left motor and right throttle to the right motor, for example using the SERVO 7 and SERVO 8 outputs, for left and right motor escs, respectively:
you also need to set the right SERVOn_REVERSED values, and the right SERVOn_TRIM, SERVOn_MIN and SERVOn_MAX values, as appropriate.
Q_A_ANGLE_BOOST should be disabled for vectored thrust tailsitters. Failure to disable this will cause the throttle to decrease as the nose dips, making the nose dip even further and resulting in a crash.
There are two vectoring gains available. One controls the amount of vectored thrust movement in hover, and the other controls the amount of vectored thrust movement in forward flight.
The Q_TAILSIT_VHGAIN parameter controls vectored thrust in hover. A typical value is around 0.8, which gives a lot of control to vectored thrust in hover. This control is combined with control from your elevon mixing gain (controlled by MIXING_GAIN ).
The Q_TAILSIT_VFGAIN parameter controls vectored thrust in forward flight. A typical value is around 0.2, which gives a small amount of control to vectored thrust in forward flight. This control is combined with control from your elevon mixing gain (controlled by MIXING_GAIN).
You can change how control inputs while hovering a tailsitter will be interpreted using the Q_TAILSIT_INPUT parameter. The choices are:
- Q_TAILSIT_INPUT =0 means that in hover the aircraft responds like a multi-rotor, with the yaw stick controlling earth-frame yaw, and roll stick controlling earth-frame roll. This is a good choice for pilots who are used to flying multi-rotor aircraft.
- Q_TAILSIT_INPUT =1 means that in hover the aircraft responds like a 3D aircaft, with the yaw stick controlling earth-frame roll, and roll stick controlling earth-frame yaw. This is a good choice for pilots who are used to flying 3D aircraft in prop-hang, but is not very useful when flying around, due to the earth-frame multicopter control inputs.
- Q_TAILSIT_INPUT =2 and 3 mean that the aircraft responds like a 3D aircraft with the yaw stick controlling earth-frame yaw and the roll stick controlling body-frame roll when flying level. When hovering, these options behave the same as types 0 and 1, respectively. This is accomplished by splitting the roll and yaw command inputs into bodyframe roll and yaw components as a function of Euler pitch.
Note: Due to the rotation of the tailsitter body frame with respect to the multicopter body frame, the roll limits are set by parameter Q_YAW_RATE_MAX (in degrees), and the yaw rate limits are set by parameter Q_TAILSIT_RLL_MX (in deg/sec). The pitch limit is set by parameter Q_ANGLE_MAX (in centidegrees), and this also serves as the yaw rate limit if Q_TAILSIT_RLL_MX is zero. If any rate limit is too high for the airframe, you may experience glitches in attitude control at high rates.
Tailsitter Input Mask¶
To support people flying 3D aircraft and wanting to learn how to prop-hang manually, you can set the Q_TAILSIT_MASK to a mask of channels that will have full manual input control while hovering.
The mask of manual channels is enabled using a transmitter input channel, specified with the Q_TAILSIT_MASKCH parameter.
For example, if you are learning how to fly 3D aircraft, and you want some assistance learning how to best control the rudder, then you can set:
then when channel 7 goes above 1700 the pilot will be given full manual control of rudder when hovering. This provides good 3D piloting practice on one or more axes at a time.
Center of Gravity¶
The center of gravity for a tailsitter is important in an extra dimension. When hovering it is important that there is not too much weight in the belly of the plane or on its back, so that it leans forward or back. This is particularly important for non-vectored tailsitters.