ACRO with Rudder Only - No roll/yaw response

Hi all,

I am flying with a self-built airplane that flies using a V-tail setup. I’m currently using Plane 3.7.1 and have set it up following http://ardupilot.org/plane/docs/parameters.html#rudder-only-rudder-only-aircraft. RUDDER_ONLY is set to 1, VTAIL_OUTPUT to 2 and the transmitter is set up so that everything works really good in Manual mode, and FBWA mode works really good as well. Even AUTO mode performs really good. I’m very satisfied!

However, when I wanted to try ACRO mode I’m noting something peculiar. When I’m in ACRO mode and moving my pitch stick on the transmitter (CH2_IN) I’m getting a normal response from the servos (RC2_OUT and RC4_OUT). When moving the roll/yaw stick however, the servos don’t move. I’ve attached a screenshot from a ground check where the first part is MANUAL mode and the second part is ACRO mode. Is there another setting I should change to get this working, or is there a logical explanation as to why this is not working? Hoping you guys can help!

I’ve looked into the code, and think the following happens:

  • The ROLL and RUDDER channel are identical for V-tail planes (radio.cpp -> channel_roll = [channel_rudder])
  • FBWA and ACRO roll PID set the roll channel in stabilize_roll()
  • After this, in FBWA stabilize_yaw is called, which sets channel_rudder to (yaw controller output) + KFF_RDDRMIX * channel_roll (overwriting whatever the roll PID did). You have KFF_RDDRMIX set to 1, so all that happens is that the yaw controller output is mixed into the “aileron” output of the roll PID.
  • However, in ACRO, rudder is not stabilized but passed through from RC (Attitude.cpp, “manual rudder for now”), thereby overwriting the output of the roll PID (remember, channel_roll === channel_rudder)

This raises a question: it is entirely possible to fly a V-tail plane without ailerons, as rudder-only and with KFF_RDDRMIX set to 1. However, as @ws7_nl observed, in some modes it does work and it others it doesn’t. Isn’t this a bug? Shouldn’t the stabilize_acro function also do stabilize_yaw(), or at least leave the PID roll output mixed into the V-tail?

PS/FYI I have opened a bug report at https://github.com/ArduPilot/ardupilot/issues/9008