Dual-motor tailsitters

Good to hear you found solution. I have not changed much from default. My memo shows below
Q_TAILSIT_RAT_VT 50. I will revisit after QHover is tuned.
Enabled Disk theory Q_TAILSIT_GSCMSK=4, Q_TAILSIT_DSKLD according to my VTOL setup.
Added airspeed sensor so related params are changed.
I am still learning/searching on tailsitter so many will change…

Hi and Thanks,

I apreciete :slightly_smiling_face:

After ugrade to 4.2 and modifiy te parameters, the reaction of the model are good
I need to take a time and proced to test, tune ,
I don’t know if it’s a good idea but I plan to autotune each axis ( 1 session by axis ) with “Q_AUTOTUNE_AXES”


Hi, I am following this on autotune inability. Please check.

on a dual motor, the roll axis (controlled by motor differential thrust) can be QAUTOTUNED, the pitch and yaw should be done as I suggested above: determine the FF param, then TX tune the D then the P…on single motor the roll axis needs this same approach and no QAUTOTUNE cannot be used successfully on even it…its because those axes are controlled only via the control surfaces which are have deflection vs rate characteristics…the motor based dual motor roll axis is thrust vs angular acceleration based in the small perturbation cases and can follow the multicopter autotuning approach that QAUTOTUNE uses…

Hi, and thanks Satoru and Henry for all the precisions.

For the moment, in my case, before tune the axis, I think necesary to enlarge the elevons. The modification it’s in progresss.

Thanks again and have Great Week-End !

Hi @hwurzburg, thank you for support and patience. Question on QLOITER tuning. Should I follow the same step as QHover there? I see Mission Planner shows only P for Stabilize so want to make sure.
I was able to tune QHover, it gives more control authority for sure, no wing rock at forward velocity move, will try more by moving CG back together with plane side tomorrow. Servo elevons are hard to see it oscillates or not, needs to check log as well.

Hi @melc, good weekend to you, too. Check this other Eclipson VTOL thread . Locawing is giving great advice on elevon size and servo requirements.

if you have the basic rate pids working well for QHOVER moving around, QLOITER usually does not need tuning…but testing will verify

Thank you for advice. Feels ok in flight now. Now checking many logs after many successful flights.

Thrust Vectored Belly Sitter with extra, third pusher motor - Help Please
Hi everyone…
I’m building a Thrust Vectored Belly Sitter with a twist… I have a third, non-thrust-vectored motor pushing from the rear for unnecessary speed. The Left and Right wing mounted motors are thrust vectored and have enough clearance to avoid prop strike. The REAR motor, however, does not vector and I do NOT want it active for VTOL modes and only for forward flight. Right now, I cannot seem to find a way to NOT use it in VTOL Q modes but only in forward flight modes. A few reasons for having the third motor on this airframe (AR Wing Pro) is not just because I had the motor lying around but it was an easy way to get a good CG without having dead weight.

Everything else seems to be working in my config except the rear motor spins in Q flight modes.
(If this is unsolvable with existing codebase I will just add landing gear to get the clearance but I don’t want the added weight).

Thanks You for any guidance.

Not possible in code directly, you could do it with scripting if your flight controller is capable.

Thanks for the quick response @iampete. I will look into scripting. I am using a Matek F765 WSE… hopefully this will suffice. Worst case is added landing gear or give up on the Belly sitting and go to conventional Tail Sitter format.

Thanks again.

@iampete … Thanks again, your tip forced me to learn how the Lua scripting worked.,. Got it working perfectly. Here’s the script I made that works perfectly.

function update () -- periodic function that will be called

    local mode_number = vehicle:get_mode()                                                          --get flight mode number
    local K_THROTTLE = 70                                                                           --Throttle function (centre only)
    local PWM = 900                                                                                 --Servo function disabled
    local throttle_channel = SRV_Channels:find_channel(K_THROTTLE)                                  --Looks for the Servo channel controlling THROTTLE
    local TIMEOUT = 1000                                                                            --Delay of 1 second

    if mode_number > 16 then
        gcs:send_text(6, 'Pusher Throttle Disabled in QModes. ')                                     --modes 17 and higher are Qmodes for VTOL only
        SRV_Channels:set_output_pwm_chan_timeout(throttle_channel, PWM, TIMEOUT)                    --disable throttle by a timeout
                                                                                                    --Other flight modes are for Plane forward flight only
    return update, 1000  
return update, 1000   -- request "update" to be the first time 1000 milliseconds (1 second) after script is loaded


I recommend using this


note that is only in 4.2, It is more robust than:

vehicle:get_mode()  > 16

All your other locals should not be inside the loop. That would leave you with something like:

local K_THROTTLE = 70                                                                           --Throttle function (centre only)
local throttle_channel = SRV_Channels:find_channel(K_THROTTLE)                                  --Looks for the Servo channel controlling THROTTLE
local PWM = 900                                                                                 --Servo function disabled
local TIMEOUT = 100

function update () -- periodic function that will be called
    if quadplane:in_vtol_mode() then
        SRV_Channels:set_output_pwm_chan_timeout(throttle_channel, PWM, TIMEOUT)                    --disable throttle by a timeout
    return update, TIMEOUT * 0.5
return update, 1000 

I bumped up the loop rate, that will make more responsive. If your feeling fancy you could also read the min pwm out of the param for that servo output.

Thanks for that @iampete

That tightens it up nicely. This is the first code I’ve written since 2004 when I did coding for a living… definitely going to play more and exercise this old brain. I’m using v4.2.0 Dev so I will make changes suggested.

Thanks again…


1 Like

I just fixed a few bugs i spotted on the second look, still not tested of course…

Tested and works great. Thanks for your help.

Hi Evreybody,

I just proced to autotune the Roll Axis ( precisons by @hwurzburg & @Satoru_Sasaki some days ago) with the function Q_AUTOTUNE_AXIS = 1
In my case, the AUTOTUNE sequence was succesful, but the values founded by autopilot was not good . If somebody are interesting , this is the logs :
If somebody can help to understand why the news values are not good , I’ll take it :slight_smile:


Hello Evreybody !

After update to with V4.2.0dev (2251293e) version, made a manual tune, find and set Q_TAILSIT_DSKLD value, yesterday I made :
the first sucesfull sequence QSTABILIZE > FBWA > QHOVER > LANDING

About flight,this is the result of PIQP.P+PIQP.D+PIQP.FF PIQP.Act BARO.Alt ARSP.Airspeed

About transition, this is the result of PIQP.P+PIQP.D+PIQP.FF PIQP.Act

Need to set another value of Q_A_RAT_PIT_FF ?

About tune process, anybody can suggest me other graph template who need to generate to optimize the different process of the tune ?

I remark in the log the presence of the MSG : “Transition VTOL done, timeout”. How ca I remediate this process ?

logs & settings: https://drive.google.com/file/d/1Eu41Moi4UEBfFhR_sDHNrwBNs0HFHWm4/view?usp=sharing

Thanks Again !

your transition angle is 45deg, with a target rate of 50deg/s of up pitch for the transition which you are not getting ,so it times out after ~1.4sec when you have only reached <20 deg up pitch…it then goes into QHOVER and drops the throttle a bit since you are still coasting up in alt a bit…this compounds the problem of getting the nose up to 90deg…you start to drop in alt so QHOVER raises the throttle to stop the drop, while you raise the stick demanding even more climb rate…this creates enough airflow that the elevons now get effective and pull the nose to 90deg and you hover…my guess is that your elevons are too small…
issues: your control effectiveness is low raising the nose to 90deg for VTOL and can only command a low up pitch rate in the initial part of the transition, so it times out…
you can lower the backtransition angle to 20 degs, but you will still be in the same boat…I think you need to increase the area of the elevons…for a non vectored tailsitter they are usually 33-50% of the wing chord to obtain sufficient control effectiveness…you can also fly much faster in fixed wing before the transition, but that will also create zooming…and not having enough control authority will bite you when you try to move in VTOL modes…pitch is especially susceptible to getting the “leans” in hove where you pitch it forward or back to move and it gets “stuck” and cant be brought back to 90 deg unless you give it high throttle to increase the airflow over the control surfaces…this is why vectored thrust is popular since it gets a lot of direct control for pitch and yaw