ArduCopter 2.9 / 2.9.1 released

ACRO bug (fixed in 2.9.1b): while doing flips in ACRO mode, if you switch to Stabilize while inverted your throttle will go to minimum.  To regain throttle control you need to switch back to ACRO then back to Stabilize again (i.e. switch to stabilize twice).  You never lose control of roll/pitch/yaw.

Loiter/AltHold/Auto/RTL bug: if you switch into these modes with throttle at zero motors will go to minimum until you raise the throttle.

Auto mode altitude bug (fixed in 2.9.1b): setting a waypoint altitude greater than 320m over home altitude may wrap around and instead be interpreted as a low altitude.

ArduCopter 2.9 is now in the mission planner and the downloads area!

The major improvement is we use inertial navigation to improve altitude hold.  This increased reliance on the accelerometers means you must do some additional set-up before flying:

1. Perform the new accelerometer calibration in the mission planner (video).  The auto-trim metho has also changed (video).


2. Add vibration dampening foam between your frame and the APM.  Some suggested materials: DuBrogelhk foam.


 3. If upgrading from 2.8.1, modify the throttle and altitude PID values:

  • Increase your Throttle Rate P, reduce I to zero, increase D
  • Increase Altitude Hold P, reduce I to zero
  • Tune Throttle Accel P and I terms but try to keep P about 1/2 the size of I



Here is the list of major changes (a more detailed list can be found in the release notes):  

  • Alt hold using inertial navigation (Leonard, Randy, Jonathan)
    • AUTO_VELZ_MIN, AUTO_VELZ_MAX parameters control the max climb/descent rate for the autopilot (cm/s)
    • PILOT_VELZ_MAX controls max climb/descent rate for the pilot (in cm/s)
  • Landing improvements (Leonard/Randy).  Copter will descend to 10m or until an object is sensed with the sonar.  Then slows to 50cm/s descent (speed can be adjusted with LAND_SPEED parameter). (video).
  • Surface tracking with sonar (Randy/Leonard).  Copter will attempt to maintain current distance from objects in front of sonar regardless of altitude.  Only used in alt-hold and loiter, not used for missions.  Sonar can be enabled/disabled with CH7 switch. (video)
  • Failsafe improvements (Randy/Craig/John Arne Birkeland) including bug fixes, additional check for PPM encoder failure and implementation of battery failsafe.  Set-up instructions are here.
  • Mediatek gps driver accuracy improvements and use of SBAS [Craig].  Instructions on upgrading your mediatek to firmware 1.9 are here.
  • Traditional Heli improvements (Rob) including (a) bringing heli code back into the fold, (b) enabled rate controller (previously only used angle controllers). (c) fix to rotor speed controllers - now operates by switching off channel 8.  (d) allow wider collective pitch range in acro and alt hold modes vs stabilize mode  (e) bug fix to allow collective pitch to use the entire range of servos
  • Acro trainer (Leonard). Copter will return to be generally upright if you release the sticks in acro mode.
    • ACRO_TRAINER : set to 1 to enable the auto-bring-upright feature
    • ACRO_BAL_ROLL, ACRO_BAL_PITCH : controls rate at which roll returns to level
  • Camera control improvements (Randy/Sandro Benigno):  (a) AP_Relay enabled for APM2  (b) Trigger camera with CH7 or DO_DIGICAM_CONTROL command  (c) Allow pilot override of yaw during missions and fixed CONDITIONAL_YAW command.
  • PPM sum support for transmitters with as few as 5 channels (Randy/Tridge/John Arne Birkeland).
  • Performance and memory useage improvements (Tridge).


As per usual PIDs are optimised for the 3DR/jDrones quad with 850 motors and 10" props. If you're using more powerful motors/props and are seeing bad flight behaviour in stabilize, start by turning down Rate Roll P in 25% steps.

Special thanks to our testing team lead Marco and the dedicated bunch on the 2.8.1 release thread who put their copters at risk while testing the pre-release version.  Some of their videos are here: 1 2 3 4 5 6 7 8

Please feel free to report issues you find in the discussion below and/or add them to the issues list.


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

Join diydrones

Email me when people reply –


  • Developer

    This is the video that was preparing for the exit of the 2.9.x release, has not been post produced in any way.
    Then we really enjoyed the Dave video and we used that.
    I have done everything possible to "scramble" my hexa in every way, demonstrating the strength of the new "INAV" (special thanks to Randy and Leonard) and the reliability of the Stabilized flight even at high speeds.
    I changed an option in the code to increase the angle of attack during certain maneuvers.
    Of course, this is possible only if your drone is perfectly balanced and free of unwanted vibration.
    Is nice the moment where I'm going over to a bird (in italian is called "gheppio") who was in "positio hold" (LOL).
    Hey guyz, all with only 16 Mhz and not over 220K of compiled code, can you imagine what you can do with the 168 Mhz of PX4/VR-Brain? :-)

    Happy watching!


  • Hi Guys,

    I just might have fried the MUX on my APM1. Radio input no longer works and the motors beep upon startup. Red PWR light is on, MUX light is off. Since I wanted to upgrade to an APM2, I ordered one of those.

    Since I know the developers and testers go thru lots of hardware: would you like to have this unit to possibly fix and/or to keep the shield as a spare? If you are in the USA, I'm willing to ship it to you. Please PM me.

    Thanks for all your hard work!


  • Hello all,

    I hope I have finally found the right place to get help....I am very frustrated and it is probably my own doing and not understanding how to find the info I am looking for.

    I am not new to multi-rotors, but new to ardupilot.

    I have not really figured out how to get info that I need and many times it seems like I go 5 places and still don't find the info I am looking for.

    I have the DJI F550 hex that I used with DJI Naza.  The hardware worked great with the naza.

    I purchased the  APM 2.5+ Assembled with uBlox GPS w/3dr power module    arducpter V2.9.1 Hexa    MP 1.2.35

    I am using the F550 Hexa as a test bed for the ardupilot and will eventually be installing it in a QAV500 Quad

    I managed to get it all installed and working enough to get it off the ground into a simi-stable hover.

    Pitch and roll are fine and stable.  Problem is the throttle is VERY touchy and it is hard to maintain a fixed altitude.

    When I engage alt hold it drops 6" - a foot or more and jumps back up to previous altitude or higher.   Over a period of time the altitude changes greatly with alt hold enabled....probably as much as 6-10 feet over a period of time with alt hold and loiter engaged.  GPS seems to be holding it OK in the Horz plane

    As I said above its no problem to hold it in one place in the horz.... but the altitude is a different story.

    Looking over some of the pids I found this that did not look right.

    Under Alt hold the thrust Rate P was totally blank...That does not look right.

    I guess I need to know where to look for the info to solve this problem.   It is probably going to be fairly simple to solve.

    I can tell by looking around you all are doing a great job with this product and I hope I will be able to contribute at some point.......Just need to find my way around.

    Appreciate all the hard work you all have put into this.


    R. Steve Haynes

  • Hey guys.

    Have some information and logs to share with you.  You guys are up to your ears in this great work you're doing, so don't take this as anything other than a random report from one of your red headed step children.

    First off - yes - I'm running a port of 2.9 (don't throw those tomatoes just yet), and I've been chasing an issue that just crept up on a recent build of mine.

    All of the information and my logs are HERE:

    I'm not smart enough to know if any of this correlates to what you guys are seeing, but with that particular setup I was seeing issues on the PPM input side (not the PPM encoding output side).  Something was causing the PPM update loop to read random high and low pulses as the CLI logs show.

    I loaded v2.8 of this board's port and the issues went away.  On 2.9 I switched over to a PWM setup and the issues also went away.

    Anyway - I'll duck out now...need to go solder up my APM so I can join in on the fun :)



  • I am currently analysing my logs from a recent failure on AUTO and RTL and looking at the timing intervals for certain log events, including the raw GPS data. I am doing this to determine when APM is unable to recover from say a 1.8 sec delay versus normal ~1sec interval between GPS data updates. From reports in the forum it has been indicated if APM encounters a single delay in GPS data (drop) during an AUTO mission the copter can no longer determine its position relative to the current waypoint and flys on on requiring a mission abort. I have only expereinced this after updating to 2.9.1

    As I have been using Telemetry for logging I wanted to understand the granularity of the realtime data stream i.e is each event posted sequential on hte same time base or are the intervals different between certain event updates. Also when the code detects heavier CPU load does the telemtry stream stop to the ground station and resume? Could such heavier CPU load also impact the data streams so instead of the case where people say there is a drop in GPS, the actual root cause is a delay in APM reading the data?

    Perhaps there is some documentation on the APM event logging and telmetry data frameing and log shipping I can read to understand this part of the system better?
  • I've been diligently following this thread, but maybe I missed this.  What's the specific minuses for setting INS_MPU6K_FILTER to 20 or lower? 


    For example, my hover z is -7 to -13 (I haven't tested it under speed).  I haven't tested it at 20 yet, but I'm fairly sure after reading all this that it would be better.  So is it better to leave the setting high if the vibration is acceptable (and I guess now we are talking about redefining acceptable?) or should we lower that setting 100% time if it improves z vibration?



  • today got an hour of flying.. almost no wind..loiter was solid.. RTL on first attempt today (have flown RTL last week had the same issue), gain altitude then spun around (amazing takes getting use to) then heads home..but half way to home/launch went straight up/gain more altitude at a fast rate..wait a second or two to see what happen but it was getting far, (sh*%Tin my undie)...felt like a runaway quad (as i have had in the past w/ kk board).. switch to stabilize.. and she started to come down and gain i tried it again 2 times on the same battery without landing and flew RTL no problem ...

    i'm puzzled.. i had the solid blue light- gps lock..

  • Starting Arducopter without RC control seems to work out of the box when RC remote is not switched in. I am rather curious because everywhere in the forum, it says that apm2.5 NEEDS to be armed from the RC remote. I have done more than one bench test to see, that MAV ARM and DO work very well without any RC. Not tested on the field yet. Also, first tests show that when remote is turned on during automatic work, it gets control from first switch from flight modes, not before. 

    Failsafe mode is set to enabled continue in auto mode. 

    Arducopter is 2.9.1

    RC reciever is connected and failsafe pwm output is enabled. 

    And I would say, that I am rather surprised about it working this way. 

  • Developer

    So there are a number of reports that the GPS is not as accurate in 2.9.1 vs 2.8.1.  I've looked through the code and I can't see any differences that should cause GPS accuracy to be worse under 2.9.1 but it's gotten to be a big enough issue that it's worthy of it's own discussion so I've created one here.  So let's figure it out over there, test it and if there's something wrong let's fix it.

  • Hi!

    I think I found a possible division by zero here line 122.

        perhaps that would be safer:

        _scaleLongUp = 1.0f;
        if (_scaleLongDown !=0) _scaleLongUp = _scaleLongUp / _scaleLongDown;


    Kraut Rob

This reply was deleted.


Santiago Perez liked Santiago Perez's profile
19 hours ago