Narrow THROTTLE_MIN/MAX range makes tilt-rotor transition impossible due to down scaling of Q_TILT_MAX

Hello,

I have a large (15kg) fixed wing tilt-motor VTOL aircraft in a wing/canard configuration where all 4 motors tilt. I have done initial flight testing transitioning to FBWA to characterize performance for TECS tuning. I have established a good profile and these transitions have gone fairly well. However, I am running into a major problem with the setting of the tilt angle logic during transition to FBWA/B after configuring THROTTLE_MIN/MAX.

After performing some initial maneuvers in FBWA for TECS tuning with a wide THROTTLE_MIN/MAX range, I have determined that the aircraft requires the following values for safe flight:

THROTTLE_MIN = 37
THROTTLE_MAX = 70

My understanding of the transition logic suggests the following should happen:

Switch to FBWA/B:

  • If THROTTLE > 50%, tilt all motors to Q_TILT_MAX
  • If THROTTLE < 50%, scale tilt linearly to an intermediate angle

However, this is what appears to be actually happening

Switch to FBWA/B:

  • If THROTTLE > 50 percentage points above THROTTLE_MIN, tilt all motors to Q_TILT_MAX
  • If THROTTLE < 50 percentage points above THROTTLE_MIN, scale tilt linearly to an intermediate angle

My problem is that with a narrow THROTTLE_MIN/MAX range, it creates a situation where it is impossible to tilt the motors all the way to Q_TILT_MAX. As I only have 33 percentage points in my throttle range, it will only tilt the motors to 66% of the way to Q_TILT_MAX. In this situation, transition will fail or take an excessively long time to reach AIRSPEED_MIN (even with Q_TILT_MAX=80).

I don’t have many workarounds for this problem, besides increasing THROTTLE_MAX to at or above 87%, and evaluating climb rates, or setting Q_TILT_MAX above 80. However, with a high power to weight ratio VTOL aircraft, I am concerned about overspeed in high throttle situations.

The logic appears to be tied to the “set tilt” calculation in the tiltrotor code: ardupilot/ArduPlane/tiltrotor.cpp at ab68066e9c7a671b6a032289d5eda382b3d3245b · ArduPilot/ardupilot · GitHub

And also described in this forum post: FireFLY6 Failed Transitions

I can provide some log files and more information about the aircraft if that would be beneficial. Any help is appreciated.

Thank you,
Neil

This is on my list of things to fix. I have some other stuff in the queue first, so if someone else out there wants to take this please do.

I’ll let you know when I make a patch that you can test out.

Hi Robert, I have a tilt made in Realflight if you need one for testing.

I was gonna do it on the Convergence RF SITL model, but can’t hurt to test it out on two different models. Shoot me a link

Will do. I will get it linked asap and let you know.

Sent to your Discord PM if needed.

Hey Bob,

A teammate of mine has pushed a recent PR with a revised calculation where it scales the tilt angle based on the difference (thr_max - thr_min), rather than by simply 50 points. Seems to work in SITL: