ArduPilot/APM is a open source autopilot system supporting multi-copters, traditional helicopters, fixed wing aircraft and rovers. The source code is developed by a large community of enthusiasts. New developers are always welcome! The best way to start is by joining the Developer Mailing List, which is open to all and chock-full of daily development goodness. Lurk for a while to get a feel for it, then participate!
Why the name?
The ‘Ardu’ part of the ArduPilot name comes from Arduino. The original APM1 autopilot board was based around the Arduino development environment. We’ve since outgrown the Arduino environment and no longer use the Arduino runtime libraries, although we do still support building the ArduPilot for the AVR based APM1 and APM2 boards using a slightly modified version of the Arduino integrated development environment. Because we now support more than just Arduino-compatible hardware (such as PX4) we are moving from “Ardu” prefix names for the software projects to the “APM” prefix (APM:Copter, Plane, Rover, etc), which signifies the cross-platform nature of the current code. A timeline history of ardupilot can be found here.
Currently ArduPilot/APM supports the following autopilot boards
- Pixhawk — Next-gen PX4, with more memory, improved sensors and a much easier-to-use design
- PX4 FMU – an 32 bit ARM based autopilot with many advanced features, using the NuttX real-time operating system
- BeagleBone Black — Under development, test platform for running ArduPilot on Linux (Developers only edition)
- APM2 – a popular AVR2560 8 bit autopilot
- APM1 (discontinued) – an AVR2560 based autopilot with separate sensor board (aka “oilpan”)
The ArduPilot/APM source code is written on top of the AP-HAL hardware abstraction layer, making it possible to port the code to a wide range of autopilot boards. See this blog post for more information on the move to AP-HAL.
The ArduPilot (APM) system is made up of (or relies upon) several different projects which are listed below. Those marked with an asterix (*) are peer projects that have their own owners outside the core ArduPilot dev team.
- DroneKit (site) – APM SDK for apps running on vehicles, mobile devices and/or in the cloud.
- Plane (wiki, code) – autopilot for planes
- Copter (wiki, code) – autopilot for multicopters and traditional helicopters
- Rover (wiki, code) – autopilot for ground vehicles
- Mission Planner (wiki, code) – the most commonly used ground station written in C# for windows but also runs on Linux and MacOS via mono
- APM Planner 2.0 (wiki, code) is a ground station specifically for APM written in C++ using the Qt libraries
- MAVProxy (wiki) – command line oriented and scriptable ground station (mostly used by developers)
- MinimOSD (wiki, code) – on-screen display of flight data
- AndroPilot (user guide, code, google play) – android ground station
- DroneAPI (tutorial, droneshare) – A developer API for drone coprocessors and web applications.
- DroidPlanner2 (wiki, code, google play) – android ground station
- QGroundControl is an alternative ground station written in C++ using the Qt libraries
- PX4 (wiki) – designers of the PX4FMU and owners of the underlying libraries upon which Plane/Copter/Rover use when running on the PX4FMU
- MAVLink (wiki) – the protocol for communication between the ground station, flight controller and some periphers including the OSD. A “Dummy’s Guide” to working with MAVLink is here.
Getting Started with Flight Code Development
- Library description
- Attitude Control
- How to add Parameters
- How to create a new flight mode
- How to run your new code intermittently
- How to add a new MAVLink message
- Building the code
- Loading the code onto the board
- Editing the code with NotePad++, Eclipse or MS Visual Studio
- Git and GitHub guide
- Debugging with GDB
- Ardupilot Style Guide
- Submitting Patches back to master
- EZ Developer Walk Throughs Install and set up a development system, get the ArduPilot code and compile and load it to your controller.
- Companion computers:
Getting started with Ground Station development
How the team works
- Bringing new members onto the team
- The main developer discussion mailing list is drones-discuss, and is open to anyone to join
- The development team is also using gitter for APM development discussions – https://gitter.im/diydrones/ardupilot#
- We have a mumble server for real-time voice discussions
- Our annual developers conference is DroneCon. See previous years speeches and content here.
- The source code for ArduPilot/APM is managed using git on http://github.com/diydrones/ardupilot
- Pre-compiled firmware for supported autopilot boards is available from http://firmware.diydrones.com
- User support is available on the APM forums.
- The ArduPilot/APM automatic test system shows the test status of each commit. It’s described here.
- Bug tracking and open issues are tracked using the github issues system
- Vehicle onboard parameter documentation for copter, plane and rover is auto-generated from the source code
- Release Procedures for Copter
- Current and Past Dev Team members
Development languages and tools
The main flight code for ArduPilot/APM is written in C++. Support tools are written in a variety of languages, most commonly in python. Currently the main vehicle code is written as ‘.pde’ files, which come from the Arduino build system. The pde files are preprocessed into a .cpp file as part of the build. The include statements in the pde files also provide implied build rules for what libraries to include and link to.