FireFLY6 Failed Transitions

We have a handful of FireFLY6 kits that we’ve been using as training and testing aircraft, and lately I’ve been working on dialing them in a bit better and testing out 4.5 in the meantime.

Today, I had several failed attempts at transition, despite not having that issue previously. I recently performed a TECS tune, so I suspected this had something to do with my THR_MAX, which I had just recently reduced (without this, I’d need to crank the climb rate and pitch up to levels that I’d rather not). I also recently set bit-1 of FLIGHT_OPTIONS to make stick-center the cruise speed (so previously, when I would transition to forward-flight, I’d be commanding 17.5m/s, but now I’m commanding 15m/s).

Logs: FF6 Failed Transitions - Google Drive

When I reverted THR_MAX alone to 100%, I still couldn’t get to airspeed min. And when I tried commanding 22m/s during transition with THR_MAX set to 70% I couldn’t quite get there either (it actually finished the transition right before I gave up and switched to QHover, but it shouldn’t have taken that long). Only setting THR_MAX to 100% and putting the stick up to command a high airspeed on transition could I get above airspeed min and complete the transition.

When analyzing the logs, I’m noticing something strange. My transition axle isn’t going to the Q_TILT_MAX of 45 degrees, it’s going to 25 degrees. It’s also backing off even more as I get near min airspeed. Looking at the code, I think I see the culprit: https://github.com/ArduPilot/ardupilot/blob/ab68066e9c7a671b6a032289d5eda382b3d3245b/ArduPlane/tiltrotor.cpp#L328

When you are above 50% throttle, it’s supposed to go to Q_TILT_MAX, but really, it’s when you are 50 percentage-points above throttle min. So my real issue was that I also recently cranked THR_MIN all the way up to 43% (yes, the FF6 is very draggy; again, I could just turn the climb/sink and pitch limits larger, but I want to keep it to something in the reasonable 3m/s range up/down, which 40%-70% throttle covers nicely). So, in my case, it won’t go to Q_TILT_MAX until the throttle out reaches 93%.

Should this line be changed so that it checks if you are more than halfway between min and max, instead of 50 points above min? Or should it just be checking that you are more than 50 points above 0? Should it just be if you are above trim throttle (this actually seems reasonable to me)? Am I just being a weirdo for using a non-zero THR_MIN, and a less-than-100 THR_MAX?

Hello, I just found this thread and it describes exactly what I have been experiencing with a large tilt-motor VTOL.

I was performing some transition buildup testing in order to characterize airspeed as a function of tilt angle. Here, I would initiate a transition to FBWA, however AIRSPEED_MIN was set to an unachievable velocity. This allows me to study airspeed and handling at Q_TILT_MAX, and make a final decision about the angle. In these tests, THR_MIN = 0 and THR_MAX = 100, and Q_TILT_MAX=67 to give me 2/3 of the tilt range. Here, it behaves as expected, and the motors titled down 2/3 of the servo range (with a few extra degrees for vectored yaw).

A few days later, I configure for a full transition and to do some TECS data collection. I set THR_MIN = 30 and THR_MAX = 70. I first repeat the buildup test point I mentioned above. Upon switching to FBWA, the motors only tilt forward a small fraction of Q_TILT_MAX despite the throttle being above 50%. I landed, confused why it was not behaving as expected. I repeated again with a higher throttle setting, and they titled down only ~80% of the way to what I expected for Q_TILT_MAX.

This does not seem like the way Q_TILT_MAX and associated transition logic is designed to function. Or at least the documentation needs to be updated to reflect this behavior