I've recently tried to setup APM for my new flying wing and discovered that it is not safe to fly in other than Manual modes =( The reason is servo throws for most flying wings must be limited, but APM limits them only in Manual, in all other modes servos goes to endpoints.

After some googling I've found 2 bugs submitted to issue logger on google code of arduplane:


Issue 647:

Elevon control throw for manual mode does not match control throw for other modes


Issue 686:Servo limits (maximum throw) is not working in stabilize, fbw and other modes.

Another helpful user - Vladimir Popov commented:

Comment by Vladimir Popov yesterday

I just investigated firmware sourses... Stick deflections are added to servo output a bit tricky - automatic output signal is scaled down to leave place for manual signal. It seems Ok, but the algorithm is internally limited - manual signal must not exceed +-400 ms from trimmed value. I do not know why. So, don't move sticks too much...

I think you can ask developers about this limitation. Function stabilize() in Attitude.pde.

In RTL mode sticks are not mixed at all.

So what should we change in order to make it work? Thanks for the help!

You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –


  • Developer

    Hi Yure,

    If you are using APM:Plane 2.74 then you should have a look at the docs on the ELEVON_OUTPUT and MIXING_GAIN parameters. These allow you to setup a virtual elevon mixer in the plane, and set your transmitter to normal aileron/elevator (ie. no elevon mixing). That allows you to get rid of the weird artifacts of the old elevon handling system.

    Cheers, Tridge

  • I upload the newest ArduplaneNG software (from here:http://megapirateng.googlecode.com/svn/branches/arduplane/ ), and I think problem is solved. But didn't fly too much, because I changed the board to HK Pilot 2.5, and working very well!!!

    Use http://downloadsvn.codeplex.com then. Just copy paste the above URL for the arduplane branch and you are good to go.

  • Investigated code myself. So if I change '500' to '225' in lines 369,370 (attitude.pde)

    g.channel_roll.radio_out = elevon1_trim + (BOOL_TO_SIGN(g.reverse_ch1_elevon) * (ch1 * 500.0/ SERVO_MAX));
    g.channel_pitch.radio_out = elevon2_trim + (BOOL_TO_SIGN(g.reverse_ch2_elevon) * (ch2 * 500.0/ SERVO_MAX));

    I got somewhat good servo throws. Don't know if it is the correct way of doing it. I'll fly it today.

    Warning! Do NOT try this yourself - this is not checked at all. Stay tuned for further notice.

This reply was deleted.


sam liked Jimmy Oliver's profile
Aug 25
Mike Whitney liked Mike Whitney's profile
Jul 19
Abdulatif Tlaib liked Ryan's profile
Jun 24