Rudder Mix per Flight Mode?

Is it really not configurable to set what rudder mixing I want per flight mode without modifying the code and recompiling/building (forgive ignorance… not a SW Dev here).

I just want to change it so that there is no rudder getting mixed into Aileron (parameter: kff_rddrmix) while in FBWA mode only. I want Auto/Guided/FBWB/Loiter/RTL/etc all mix rudder into the turns so that the aircraft flies coordinated.

However I have ArduPlane running on a large and very heavy taildragger that operates from windy environments. As such I CONSTANTLY need to bank into the wind and and land/depart upwind wheel first and this mix is causing some nasty groundhandling tendencies on a taildragger very prone to ground loops (this UAS flies much like a full-scale manned taildragger, in which I have hundreds of hours as a Private Pilot). I want it to quit adding rudder when I’m putting ailerons into the wind, or when the airplane bounces on a pot-hole on unimproved runways and the aircraft banks I’m sick of it adding rudder (and thus tailwheel steering) when it’s not needed. I want FBWA, however, because the stabilization it provides is quite nice for departure/landing… I just want independent control of my aileron and rudder (unmixed) during the takeofflanding phases of flight when I’m in FBWA (before switching to GPS-based modes for missions).

I was hoping similar to OpenTX I could set the parameter on a per-flight-mode basis, but that doesn’t seem to be the case. Did I get that right? Am I stuck editing some .cpp file for the FBWA mode to remove the multiplicative of rudder mixing and rebuild/deploy the SW?

Thanks!

If there’s not a way to configure mixing per mode in ArduPilot, is there a straightforward way to do this in the code?

I found the following in ardupilot/ArduPlane/Attitude.cpp. It’s not clear to me how I could modify something like this for ONLY FBWA or Stabilize mode (I want coordinated turns in Auto/Guided/FBWB/etc but I just don’t want the tailwheel steering me off to the right when I’m applying aileron into a heavy-gust right crosswind on takeoff/landing). Is there somewhere I could just delete the “g.kff_rudder_mix” similar to below?

commanded_rudder += SRV_Channels::get_output_scaled(SRV_Channel::k_aileron) * g.kff_rudder_mix;

Still just blown away that there may not be a way to differentiate between how much mixing I want in FBWA vs GPS-guided modes.

The modes are written this way to make it easy to test and tune each one. Each step in the mode list adds on a control loop. I think one thing that you are running into is in FBWA, the roll stick commands bank angle rather than roll angle.

You could change the parameter using scripting based on the mode. That wouldn’t be too difficult, but your autopilot hardware needs to be able to support scripting.
https://ardupilot.org/plane/docs/common-lua-scripts.html

I think what you want is to set GROUND_STEER_ALT so that your rudder output changes to ground steering below that altitude threshold.

@TunaLobster, thanks I’ll check out LUA scripts. Yes in FBWA the roll stick commands roll/bank up to a bank angle limit, and stabilizes. That’s no problem for me. LUA scripts are a good idea; I’ll start learning those, thank you. I’m running a PixHawk 2.1 so I would assume it could handle.

@tridge, thanks, however GROUND_STEER_ALT appears to only support the STEER2SRV controller. So it would allow STEER2SRV to do things like adjust rudder/tailwheel to attempt to track the nose on a heading in an automated fashion, but to my knowledge it would still allow the rudder to be turned if I apply Aileron in either direction due to the mixing (please advise if I’ve missed that).

Like I said I’ve never had this need in all of my sUAS flying… but as heavily as this plane is loaded and as windy of environments as we fly in, it’s extremely long roll out really does remind me of the full-scale taildraggers I fly, and ailerons are used to keep the upwind wing from coming up.