3D Robotics

ArduCopter 2.3 released

Jason is travelling this week, so I'll take the helm for the next software release post. 

UPDATE: the motor remapping thing was confusing everyone, so we took that out and returned to the regular motor mapping. That means that APM 2 users with Hexas and Octos should wait for the next version. APM 1 users should be fine with any frame.  

NOTE: Hexa and Octo users: there have been motor mapping changes that may affect you. Please don't upgrade until we can update the documentation to reflect the changes. This should happen by the end of the day today (Feb 1).

ArduCopter 2.3 is now available in the Mission Planner.  This is the next revision of the ArduCopter 2.2B6 code, which is perhaps the most tested code we've ever released (1288 comments in the thread!)  and certainly in my experience the best code, too. 

The default PIDs are optimized for a 3DR/Jdrones quad with 850 motors and 10" props. If you're using more powerful motors/props, start by turning down Rate Roll P (default is 0.14, so start by turning it down to 0.1. In general tune PIDs in 25% steps).

Now that we've got solid code out there, we can turn to collecting suggested gains for standard frames, and a better guide to how to tune PIDs for your unique setups. 

Here are Jason's note on the latest changes (mostly from 2.2B6)

A dampening term called STAB_D has been refined. A D term for all of the Rate based control loops has been added based on Igor's work. Landing for Baro and Sonar has been refined based on JLN's work. A slightly new approach to Loiter and Navigation is being used to try and linearize the pitch and roll for rate control. It tends to use lower gains, yet has a more assertive response in the air.

STAB_D : This is the gyro accretion dampener. This can remove small wobbles during sharp changes in angle commands. Making this too high can have a negative effect in performance and add a memory effect that can cause temporary loss in control. The in flight tuning is ranged so you are just below that effect.

If you haven't noticed before the control loops are in two stages. The first is a PI stage that converts some sort of position or angle error into a desired rate. These generally do not need to be tuned. They are more of a user preference on how fast you want the copter to perform a motion. 

The second stage is the actual PID loop that needs to be tuned for the copter. This converts the desired rate into a motor command of some sort. I added a D term based on Igor's recommendation to the PI's for each rate controller. These should show up soon in the mission planner for the release. I cannot give you a concrete answer for how to tune the D terms, because they each depend on their function such as alt hold or loiter, etc.

Still, the absolute most important term is always the Rate_P term for each loop. Start tuning here.

The default PIDs are in the what flies great for a stock jDrones/3DR Quad with the purple motors in X mode.

Note the Mission Planner does not yet highlight these D terms on the main tuning page (it will soon), but you can find them and modify them on in the Parameters list.

Autolanding should now work well (see video above) and the Tri servo issue is now resolved. 

The code should now compile with Arduino 1.0 (thank, Randy!), but remember that you need to use the "relaxpatch" version of Arduino in our downloads section

[Update: we've reverted the below. See update at the top of the post]

Important for Octo users:

We've changed some of the motor orders for some more exotic airframes. We'll be updating the docs on the Wiki in a day or two to reflect this. Pat Hickey explains:

As before, the hexa plus APM2 motor setup has changed from the ordering [1, 2, 3, 4, 5, 6] to [ 5, 6, 1, 2, 3, 4 ].

The Octa V layout for APM2 is:
6            4
  2        5
    8    1
      3 7
Motors 1 through 4 spin clockwise, and 5 through 8 spin counterclockwise.
Support for roll/tilt camera control on APM 2 should be coming in the next version. Traditional Heli will also be updating to this latest code as well once we track down a memory issue. 
As always, you can see a complete list of changes in the changelogs.

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

Join diydrones

Email me when people reply –


  • im trying to figure out why Futaba make a 10channel rc transmitter but no 10channel receivers. They Make 7,8 9 and 14 but no 10 channel. I don't get it. So can I use 14ch rx using a 10ch tx?

    Also what the general opinion whether to have the throttle/yaw on the left or right stick?

  • I've just posted another video blog of tuning attempts...this time focused on Stab_P only. You can find the post at http://diydrones.com/profiles/blogs/arducopter-2-3-tuning-stab-p-fo.... Unfortunately I wasn't able to get any useful logs again today...I guess it's related to the problem that has already been identified and fixed on GIT.

  • Anybody out there got the ArduCopter failsafe feature to work exactly as supposed to?

    Then please share your knowledge to us who still grope for leads in the darkness.

    Thread on it here.

  • What is OF_PIT_D and so.... controlled?

    My copter is shaking like a 120 years old virgin.

    I have tried it all PID except those OF_'s


  • Developer

    Is there any word on the use of DMP for APM 2.0 users? Just ordered my new board and wondering if those licensing issues were resolved.

  • Sorry to repost this but Id like some further feedback of my PIDs. I am thinking to further  lower the stabilize  Pitch/Roll to 3.0 or lower even. I'm also concerned the I is at 0 and also I on rate is at 0 for Rate Roll/Pitch/Yaw.

    This was my post a few days ago:

    Im still no further getting any reasonable stability and control with 2.3 and nearly at a point I'm thinking to strip the whole rig down and rebuild it from ground up just to make sure I'm eliminating any hardware glitches I might be missing.

    Yesterdays flights I couldn't really get any good stability. I could take of in stable OK but it starts to rotate an wont hold a stable yaw. I then put it back to Stab simple and launched again and once up to about 5 meters clicked loiter and then it started to wobble around a lot while descending. Once I clicked back to Stabilize it settled down but  still kept wandering away. I also tried RTL and it did similar to Loiter and wobbled around while descending. It did look like it was trying to come back to home position but it would be on the ground before it could make it.

    I few things Im thinking as a slim chance to be part the cause. Could the bottom motors props being in the wash of the top motors props be giving some kind if weird feed back the the ESC? Maybe if I use smaller props on the bottom?

    The wire length from the ESC to the motors is about 40cm and I read somewhere this might cause some signal feed back issues and to try keep the wire between the ESCs to motors as short as possible. I wouldn't have thought though it would make a lot of difference but I don't really know.  If I do a rebuild then Ill mount the ESC at the end of the arms with the motors.

    I'm only using a 3300mAh 4S 35-70C Turnigy battery to run 8 motors. But surly I should be able to get at least 2-3 min of good flight time. Ive measured voltage and its never been below 15v after each flight.  I have a separate Switching 5v  regulator for the APM so it cant be a brown out from poor power feed from the ESCs.

    Attached is my param file if anyone can please let me know if they see any problems with it.

    My X8 Quad specs

    Board: AMP1

    GCS: MP1.1.31

    Firmware: 2.3

    Quad X8 (coaxial 2 motors/ESC per arm sharing one APM signal)

    3300mAh 4S 35-70C

    Droidworx ADR Quad Standard, (72cmx72cm across)

    Flight weight 2.4kgs

    Motors 880kv Jdrones

    8 Props 12x4.5

    ESC 30A Jdrones

    APM power supply. 5V, 3amp switching regulator (SVR3 Tahmazo)

    Sonar XL-EZ0 (MB1200)

    Declination:  -0.5899

    Param Jan 2nd 12 MrcoSugstd1a.param

  • Log issues fix:

    in ArduCopter 2.3.zip, in Log.pde, line 602 needs to be changed from 

    for(int8_t i = 0; i < 11; i++ ){


    for(int8_t i = 0; i < 10; i++ ){

    p.s. if you can see the comments (which more likely were used to write the for loop), the parameters are numbered starting with 1 even though the loop starts at 0. systematic error, no biggie.

    Hope it helps someone ;-)

  • How accurate should the sonar read? I tested it on CLIjust now and it starts off reading 21cm even though its only 14.5cm from the ground. I lifted it up to 70cm and its only reading 45cm. Thats seems crap to me if its to help with auto landing.

    How can I calibrate this? I have the XL-EZ0

  • Just had a bad crash when descending form about 90 meters. Quad flipped about 70m above ground almost 90 degrees and I wasn't able to recover. Anyone any idea what might have gone wrong here? SD Card flipped out of gopro so the file was corrupt, but here is what I was able to recover:

    Luckily I only got some broken legs, when it was dropping I saw myself digging for the single parts.

    This is the altitude graph:


    Here is also the log and kmz file if this is any help:

    2012-02-05 04-10 2.log

    2012-02-05 04-10 2.kmz

  • Developer

    Here a video of one of the test flight with the firmware ArduCopter v2.3 installed on my QRO quadcopter that I have done on feb 4, 2012.

    Wind 9 Km/h, gusting at 15 Km/h. Temperature: -7°C (Windchild)

    In spite of strong gusts and turbulences due to the presence high trees around the field, the firmware v2.3 has been able give a good stability (see the onboard video). There is no wooble during the takeoff...

    Regards, Jean-Louis


This reply was deleted.


Shivchand Jaysaval liked Shivchand Jaysaval's profile
Aug 25