Twin motor/differential thrust with Ardupilot?

I have a twin motor plane I haven’t flown yet.
I understand I can connect both motors to the same channel, and pretend it’s a single motor plane, but that’s kind of boring :slight_smile:

@tridge talked about dual motor tailsitter support here
Dual-motor tailsitters
so while my aircraft is not the same kind, maybe there is some twin motor support already in ardupilot?

I wouldt try wether
( )
in combination with
SERVOn_FUNCTION 73/74 for the motor-escs works.

1 Like

Sorry, I forgot to reply to this one. Thanks for the tip, I’ll make sure to try it out after I fit that pixhawk in this new twin plane I got.

I submitted a github request years ago for twin motor code that allows for true redundancy. It requires that the autopilot use rudder to handle uncommanded asymmetrical thrust, and when the rudder is fully deflected the autopilot must reduce thrust on the operating motor and lower the nose to increase airspeed.
Tridge liked the idea but never got around to it. If you feel so inspired, give a +1 on the issue to give it a little nudge, as it may be long forgotten.

1 Like

Just tested on the bench:
Works with 2 weeks old master 3,8 (perhaps with 3.8b5 also ?);
SERVOn_FUNCTION 73/74 for the motor-escs and RUDD_DT_GAIN > 0.

Regards Rolf

1 Like

i would like to see this also

When I set YAW2SRV_DAMP to >0, then there is active yaw dampening via the dual motors in stabilization and FBWA etc. modes. But there is no such stabilization in Acro mode… Why? I need this stabilization, as I built a dual motor that is intentionally not self-stabilizing on the yaw axis (see video, using MultiWii/iNAV firmware). Can anyone help…? Thanks!!

I’ve been using differential thrust coupled from the rudder channel for a year or two. It works well for my purposes.

The original goal was to use it for ground steering where it did help, but I moved from using landing gear to throwing the plane at takeoff and no longer have any need for ground steering. But, it’s very handy in the air for tightening up turns…almost comically so if I use full rudder.

I will give a warning…versions up to and including 3.9.5 do not properly handle throttle slew rate for twins. They match the output throttle to the input just about instantly. In versions 3.9.6 and later, Tridge was kind enough to implement slew for twins and the motors ramp in accordance with the parameters settings.

The above information doesn’t help with your problem. There’s a hint in the documentation for Acro mode that implies full stabilization is not support on the yaw axis.

In the current implementation the controller won’t use rudder while the plane is on it’s side to hold pitch, which means horizontal rolls won’t be as smooth as a good manual pilot, but that should be fixed in a future release. This also means that it won’t hold knife-edge flight.

Your option at this point may be limited to modes other than Acro.


HI Roger, thanks for your reply. I really love the higher level navigation and automatic flight of arduplane. But I am totally disappointed by the very basic acro mode. It is a simple P controller (when we assume that angular rate is the setpoint) on roll and pitch and nothing more. There is no integral, which makes it pretty useless. What a pity… For my purpose, Ardupilot is therefore not suitable, I will need to switch to INav (although INav also doesn’t have derivative in Acro mode which I still consider as very useful for a proper and fast stabilization).

It is full PID + feed-forward for roll and pitch

Admittedly the yaw controller is not as clever.

This is not true from my point of view. I must admit, I am new to arduplane, so I might misunderstand or overlook something:

In Acro mode, my sticks control the angular velocity of all three axes. A PID therefore consists of P = error in angular velocity, D = error in angular acceleration, and I = error in angle.

The PTCH2SRV parameters are focused on angle control modes.
PTCH2SRV_P says: “Proportional gain from pitch angle demands”

PTCH2SRV_D says: “Damping gain from pitch acceleration”

PTCH2SRV_I says: “Integrator gain from long-term pitch angle offsets”

In my tests, I found that in Acro mode only PTCH2SRV_D is active (which is the P-Term when controlling angular velocity). PTCH2SRV_P would be the I term in Acro mode, but it seems to be inactive / disabled in Acro mode. PTCH2SRV_I is the double integral of the error in angular velocity, which is useless in Acro mode.

The parameter ACRO_LOCKING is not helping either, because it is only working when sticks are released. That is not a proper Acro mode = angular velocity mode…

maybe it is just a bad description,

The pid’s are applied at a rate level, this is the code used in acro for roll for example

It is just roll and pitch, yaw is pass through.

I am currently on holidays, so I can’t check my hardware. However, I really have the impression that the description in the wiki (and in the code) matches my observations (pids work on angle level and not on angular velocity level).
Furthermore, when I set PTCH2SRV_FF to anything different from zero, then the servos freak out in Acro mode on the ground with motors enabled and not idle. Have you tried that too?
I would like to continue this discussion when I have access to my hardware again. I think I should start another topic, and I will link your name, hoping that you will jump in.

I think this thread was somewhat split up:

  1. Use differential motor thrust for yaw steering
  2. Handle twin engine failure

Differential thrust now seems to be possible with Arduplane, however I did not see a solution to twin engine motor failure. Tinkering with this problem already for some time (I at least lost one model to one-sided motor failure :-() I really would like to see iskess solution come to Arduplane :slight_smile:

I will give it a +1 on GitHub (hope this helps a bit :-))