QuadPlane( 2 front motor tilt)transition yaw swing

hi all (and especially @ianfreemantle who I promised an update to a while ago).
I know it has been quite a while since this issue was raised, but we’re finally getting somewhere. Over the last week I’ve been working with @kris and Brandon MacDougall over in a new quadplane ardupilot discord channel (see https://ardupilot.org/discord ) and in the simulation channel.
There are several efforts happening in parallel:

  • we’re working to create two good quality tilt-rotor quadplane models to allow us to test solutions to this and other issues affecting tilt vectored quadplanes. The first model we’re building is a model of the Arace Griffin https://araceuas.com/ thanks to assistance from Alex and Adrian from Arace.
  • I’m working with @kris to incorporate a number of changes he has made for ArduPilot on tilt-vectored quadplanes. This includes changes to yaw handling in transitions using differential thrust to cope with yaw inbalances. We’re discussing a possible change here: https://github.com/ArduPilot/ardupilot/pull/15960 . That work is on hold until we get good simulation models for testing
  • I’m working with Alex from Arace and @iampete to work on a list of feature priorities for these types of vehicles.
  • I’ve started work with @Leonardthall on a new approach to tilt vectored quadplanes that will use a vectored AP_Motors backend, so knowledge of the vectoring of the motors is build right into the motor mixer, instead of being an add-on in the ArduPlane code. That should allow us to get much smoother transitions under a wider range of conditions. We’re hoping to prototype that code over the next month.

A number of people have offered to test some of the proposed changes. I’d like to hold off on that for a few days at least until we have the simulation models working and the changes tested in simulation. Once that has happened we’ll start looking for people to test the changes.
Sorry this work has taken so long to get started.
Cheers, Tridge

3 Likes

Awesome, thanks for the update and for all the work done on this.
I’d definitely be keen to test the changes once you have the sim models working.

We now have a nice model:


I can already offer some advice based on testing on this model.
If you are flying ArduPilot stable or master releases or then you should keep the Q_TILT_MAX angle small. One of the key differences between the ArduPilot releases and the firmware that @kris has developed is that his firmware can handle large values of Q_TILT_MAX. For example, ARACE normally set this to 73 degrees for the Griffin. If you try to fly ArduPilot 4.0 or current 4.1 with Q_TILT_MAX=73 then we get wild yaw problems and the aircraft crashes in the simulation. If I test the firmware from @kris with the same settings then it flies well.
This will be the focus of my work on tilt quadplanes in master, fixing the code so that yaw is handled well with large tilt angles.
Cheers, Tridge
2 Likes

I’ve now got yaw control during transitions working a lot better. Demo here:


The PR with the changes is here:

After some review and discussion I will be looking for some brave testers of the new code

Hi Tridge/All

Here is the log of my first and second transition. The first was accompanied by a significant left yaw so it could be worth a look…the second not so much, no parameter change. Q TILT Max = 50 QTILT RATE DOWN =80, QTILT RATE UP = 200, these are Parameters from foxtech 4.1.0dev currently running 4.0.7.

Greg Covey identified that my servo auto trim needed changing for safer flight…weird I have just connected my nimbus via mission planner and servo auto trim is set to 1 apparently this was off during flight > to a continued decent and Q Stabilise bail out. My parameter file also has my q-alt-assist as 30 yet my current parameters in MP indicates 0. Just a couple I’ll be sure to check during pre-flight.

Steve
https://1drv.ms/u/s!Auv-5QlGCPQokSjGOuIX2XzBSvNe?e=YnXDAw
Password= Password

If you are willing to be a guinea pig I can build you a test firmware with my new tilt handling code. Note that you would likely be the first person to fly it outside of simulation, so it is not a low risk flight.
Are you interested?
Cheers, Tridge

So likely the only thing that will change is transition? i.e be prepared to flick back to Q- Stabilize if it looks like its turning south… If that’s the case sure. I’m following Discord too when you are confident, I would like to send through my parameters and we could make sure my FS options and Q assist options will do just that. With the east coast low ATM it could be a few days days.
Steve

Kris has now indicated he will test my PR branch on one of his planes. So maybe wait a couple of days, then we can test on your plane.

Ok no worries…or should I say less worries Ha Ha.

is this problem unique to tilting quadplanes? I just flew my Y3 tiltrotor in FBWA today and the transition was very sketchy. As the motors go down, the plane developed violent roll and yaw oscillations for a few seconds until speed picks up and oscillations die down. After reading this post, I have the impression that i’m looking at the same issue here. I’m guessing that when tilting down to my Q_tilt_max of 45deg, there is some yaw error which led to differential tilt which introduced very strong rolling moments which cannot be eliminated just with motor thrust only. This cut out as the FBWA law replaced Qhover. I have the yaw and roll parameters plotted below. If someone has a suggestion I’d really appreciate it. reducing Q tilt max further seems to be stopgap because it is constrained by how fast I can accelerate to a safe speed.

note that in the plot above, yaw error is almost zero throughout the flight. maybe it’s the other way around, i.e., roll error causing thrust changes which led to yaw? I think an ideal control law would just try to minimize the side slip during transition so that the nose is kept pointing forward, but without a good set of sensors side slip is probably difficult to obtain reliably anyway.

hi tridge, is the fix added to 4.0.8beta? i wanna test it out but have no idea how to compile the master into hex etc.

https://1drv.ms/u/s!Auv-5QlGCPQop3HtYLJ_uIParQEW?e=aqwnvS

Password is Password. First flight since the rains began two logs 3 videos. Not sure if you still need 4.0.7 logs but the video shows a pretty ordinary transition that could be useful; Nimbus V2 TOW 5.4kg Cube Black

no the changes are not part of the 4.0.x stable series, they are in 4.1.x only

okay thanks i’ll wait. for now lowering Q Tilt Max has worked fine for me at least.

I’m replying here because I think I ran into essentially the same issue on a front-2-motor tilt QuadPlane in X configuration, and I’m hoping to get updated guidance on the best way to handle it in 2026.

I attached:

Airframe / setup

  • QuadPlane tiltrotor with front two motors tilting together

  • Not vectored yaw

  • Q_FRAME_CLASS = 1

  • Q_FRAME_TYPE = 1 (X frame)

  • Q_TILT_TYPE = 0 (continuous tilt)

  • Q_TILT_MASK = 5 (front motors 1 and 3 tilt)

Motors follow the standard Quad-X layout:

  • Motor 1 = front right = CCW

  • Motor 2 = rear left = CCW

  • Motor 3 = front left = CW

  • Motor 4 = rear right = CW

So yaw is being generated through differential motor RPM, not differential tilt angle.

Important background

What makes this especially confusing is that we had a smaller test plane with this same general front-2-tilt concept, and it transitioned smoothly. We did not see this yaw feedback issue there.

The logs I’m posting here is from a tilt rotor test for a ~40lb aircraft that failed to transition properly as seen in the attached video

What I’m seeing

I’ve now seen a very similar failure mode as to what other people described with yaw control issues on multiple transition attempts with tilt angles of 20, 45, and 60 degrees.

In the logs:

  • when C3 > C1, we see a CW / nose-right yaw

  • when C1 > C3, we see a CCW / nose-left yaw

On previous tilt rotor attempts on a 35lb aircraft (not in the video or logs) one flight at around 45 degrees, we attempted transition twice and got a very strong CW/right yaw.
On another flight at 60 degrees, the aircraft first had a smaller yaw transient and then later developed a much more violent yaw event.

The pattern that stands out is that the problem appears when the front motor outputs stop matching and begin separating.

Why I think this is happening

My current theory is that this is exactly the issue described earlier in this thread for front-2-tilt aircraft in X frame.

In pure Quad-X multicopter logic, if the controller wants a yaw correction, it changes the RPM of the CW pair vs CCW pair. That makes sense in vertical flight.

But once the front two motors are partially tilted forward, the same RPM difference is no longer acting only through normal multicopter yaw torque. It also creates a horizontal thrust asymmetry between the front-left and front-right motors.

For example:

  • if Motor 3 (front left) is increased

  • and Motor 1 (front right) is decreased

  • while both front motors are partially tilted forward

then the front-left motor is producing more forward thrust than the front-right motor, which creates a nose-right / CW yaw moment.

So it looks like the controller may be trying to correct yaw in the normal VTOL sense, but in the intermediate tilt region the actual aircraft response may become the opposite sign, or at least a much stronger yaw moment than intended.

This would also explain why the problem seems worse at 60 degrees than at 45 degrees.

What I still do not understand

What I’m trying to pin down is:

  • Is the front motor differential mainly an attempted yaw correction from the VTOL controller?

    • I really think it’s just yaw, but roll can technically also cause differential thrust
  • Or is some of that split actually being driven by roll/pitch corrections in Quad-X mixing, which then turns into yaw because the front motors are tilted?

  • Has anyone gotten a front-two-tilt QuadPlane in X frame to transition reliably without this issue, and if so, what was the real fix? For now assume I cannot use vectored yaw in this arrangement. We’re right now looking into running a lua script that sets motor based yaw PID values to 0 in FBWA and re enabling them to the previous default values in any other flight mode.

What I’m asking

Has there been any real solution for this in the last few years?

What is the best path forward here?

  1. Switch to H frame instead of X?

  2. Keep X, but significantly reduce yaw P / yaw aggressiveness?

  3. Reduce Q_TILT_MAX and keep the intermediate tilt region shorter?

  4. Increase Q_TILT_RATE_DN so the aircraft spends less time in the dangerous partially tilted regime?

  5. Is this still fundamentally a limitation of using normal Quad-X control logic on a front-2-tilt aircraft in the intermediate transition region?

I’d especially appreciate input from anyone who has actually solved this on a larger front-2-tilt aircraft, since our smaller test platform worked fine but the larger ~40 lb class aircraft is where this became a serious issue.

If useful, I can also post:

  • the additional BINs from the earlier 45-degree attempts

  • motor output plots

  • yaw plots

  • exact parameters from all transition tests