Awful glide path (bad sink rate control) during autolanding with seemingly good calibration

I’m doing some tests with a Bixler 3 foam model, a Cube Orange autopilot with the ADS-B carrier board, and good sensors including airspeed. My understanding is that the default Ardupilot params work really well with the Bixler but I went ahead and carefully did everything described in the documentation pages for configuration and tuning, including an automatic PID calibration followed up by the PID calibration tests described in the pages for manual PID calibration just to be sure, and adjusting the main TECS parameters.
I have adjusted every major parameter and double checked everything changed so far, and the plane flies amazing in autopilot even in really bad conditions that would normally be nearly impossible for an aircraft as light as the Bixler 3. That is, except for the automatic landing. When entering the glide slope the plane inmediately sinks at a very high rate (much higher than the one specified in TECS_SINK_MAX) and then does the flare normally. It usually does land decently well, but completely disregarding the glide slope angle specified in QGroundControl. Essentially it instantly sinks to the flare altitude, and then flares the rest of the way to the landing waypoint. This is pretty bad because the plane doesn’t have as much control during the flare so it usually goes a bit off course during this super long flare I’m describing. It also means you need a huge runway. Here’s the trajectory it ends up following:

Looking at the logs I can’t really find a reason for the huge sink. Even the sink rate requested by TECS looks really weird. It doesn’t go past TECS_SINK_MAX (the request, the actual plane does exceed it) but it doesn’t look smooth as you would expect either. Right before the glide slope there is a LOITER_TO_ALT to get to the correct altitude for landing, and the requested sink rate during that is perfectly smooth. It’s worth noting that the plane does overshoot the requested altitude during said loiter but only very slightly and it really looks like if it controlled the sink rate during landing half as well as it does during the LOITER_TO_ALT, the landing would work flawlessly. Here’s the demanded sink rate against the actual sink rate:

Somehow the requested sink rate during landing doesn’t look smooth at all, and you can see that the plane undershoots the request during the LOITER_TO_ALT but overshoots it during the glide path. How is this possible? Also, here’s how the attitude control looks like during the same portion of flight (LOITER_TO_ALT + glide path):

Anyone has any idea of why is this happening? Performing the checks for good PIDs and TECS in the documentation everything works like it should, and again, I have double checked every other parameter I’ve changed. Everything seems dialed in pretty good.

Here’s a log with quite a few nearly identical flights in AUTO.

One thing to note is that the glide slope angle in QGroundControl represents the average slope over the entire landing, not just the approach. ArduPilot estimates the flare distance and incorporates it into its approach slope calculation, so the actual approach glide slope will be steeper.

Also, you are not actually using the airspeed sensor for control (ARSPD_USE is set to zero). You should probably enable SERVO_AUTO_TRIM as well.

The bumps in the demanded sink rate are due to the aircraft repeatedly hitting the minimum pitch limit. The minimum pitch limit starts to approach the flare pitch as the aircraft approaches flare. It seems like this is happening earlier than it should, but I’m not too familiar with this part.

Don’t just look at dh and dhdem, but h and hdem as well. When the altitude is above the target (as in the beginning of the approach), the sink rate will increase to allow it to catch up.

No way I had ARSPD_USE set to 0. That’s probably it. Thank you! The auto trim is not necessary because of my setup I reckon.