Welcome to the ArduPilot Development Site¶
Keep up with the latest ArduPilot related blogs on ArduPilot.org!
ArduPilot (sometimes known as APM) is the leading open source autopilot system supporting multi-copters, traditional helicopters, fixed wing aircraft, rovers, submarines and antenna trackers.
We pride ourselves on being versatile (rich in features with support for a large number of flight controllers, sensors and frame types), trusted (reliable and predictable) and open (both in terms of software and in our team’s organisation and governance).
New developers are always welcome! The best way to start is to:
- read this wiki to learn the basics of the software and how the team works
- get involved with the other developers by posting on the Developer Team Forum, chat to us on Gitter or join the weekly development call. You can also find a large number of users and some developers in the ArduPilot facebook group. All channels are open to all. Lurk for a while to get a feel for it, then participate!
- find a specific bug you’d like to fix or a feature you’d like to add (check out the good first issues, recent issues from Randy or our roadmap for ideas).
- fix the bug in your own clone and test that it’s working
- submit the change to the main code base via a pull request.
Why the name?¶
The ‘Ardu’ part of the ArduPilot name comes from Arduino. The original APM1 and APM2 boards were based around the Arduino development environment and AVR CPUs. We long ago outgrew these boards so we recommend users use one of the many more capable boards found on our Autopilot Hardware Options page including the Pixhawk.
A timeline history of ArduPilot can be found here.
The ArduPilot source code includes the AP-HAL hardware abstraction layer, making it relatively easy 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 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.
- Plane (wiki, code) - autopilot for planes
- Copter (wiki, code) - autopilot for multicopters and traditional helicopters
- Rover (wiki, code) - autopilot for ground vehicles
- Antenna Tracker (wiki, code) - for automatically aiming an antenna at a vehicle
- 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 - command line oriented and scriptable ground station (mostly used by developers)
- DroneKit - APM SDK for apps running on vehicles, mobile devices and/or in the cloud.
- MinimOSD (wiki, code) - on-screen display of flight data
- Tower (wiki, code, google play) - android ground station
- QGroundControl* is an alternative ground station written in C++ using the Qt libraries
- PX4* - designers of the original PX4FMU hardware (from which the Pixhawk was developed) and owners of a relatively small number of drivers we use when running on a Pixhawk flight controller board
- MAVLink* - the protocol for communication between the ground station, flight controller and some peripherals including the OSD. A “Dummy’s Guide” to working with MAVLink is here.
- UAVCAN* - Lightweight protocol designed for reliable communication in aerospace and robotic applications via CAN bus. Ardupilot is using the Libuavcan, which is a portable, cross-platform library written in C++ with minimal dependency on the C++ standard library.
How the team works¶
- Our annual developers conference is held in Feb/March in Canberra Australia (2018 annoucement).
- The source code for ArduPilot/APM is managed using git on https://github.com/ArduPilot/ardupilot
- Pre-compiled firmware for supported autopilot boards is available from http://firmware.ardupilot.org
- User support is available on the forums.
- The ArduPilot 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
Development languages and tools¶
The main flight code for ArduPilot is written in C++. Support tools are written in a variety of languages, most commonly in python.
ArduPilot (including Copter, Plane, Rover, Antenna Tracker and MissionPlanner) is released as free software under the GNU General Public License version 3 or later. See License overview wiki page here.
Didn’t find what you are looking for?¶
If you think of something that should be added to this site, please open an issue for the wiki.
Full Table of Contents¶
- License (GPLv3)
- Downloading the code / Using Git
- Building the code
- Setup the Build Environment on Linux/Ubuntu
- Setup the Build Environment on Windows
- Setup the waf Build Environment on Windows10 using WSL
- Setup the waf Build Environment on Windows using Cygwin
- Setup Eclipse on Windows for building with waf
- Setup the Build Environment on MacOSX
- Building for NAVIO2 on RPi3
- Building for Erle-Brain 2
- Building for Erle-Brain
- Building for Bebop 2
- Building for Bebop on Linux
- Building for BeagleBone Black
- Building Mission Planner with Visual Studio
- ArduPilot Pre-Built Binaries
- Deprecated: Building for Pixhawk on Windows with Make
- Deprecated: Building ArduPilot with Arduino for Windows
- Deprecated: Editing & Building with Atmel Studio or Visual Studio
- Deprecated: Building for APM2.x with Make (Win, Mac, Linux)
- Deprecated: APM2.x on MacOS with Arduino
- Deprecated: APM2.x on Linux with Make
- Deprecated: Building for Flymaple on Linux
- Deprecated: Building for Pixhawk on Windows or Linux with QtCreator
- Deprecated: Building for NAVIO+ on RPi2
- Deprecated: Building for Qualcomm Snapdragon
- Editors & IDEs
- Learning the code
- Library Description
- Library Example Sketches
- Sensor Drivers
- UARTs and the Console
- RC Input and Output
- Storage and EEPROM management
- Copter - Vehicle Code introduction
- Copter - Attitude Control
- Copter - Adding Parameters
- Copter - Adding a new flight mode (ver 3.6 and higher)
- Copter - Adding a new flight mode (ver 3.5 and lower)
- Copter - Scheduling your new code to run intermittently
- Copter - Motors Library
- Copter - PosControl and Navigation
- Copter - Object Avoidance
- Rover - Adding a new drive mode
- Rover - L1 navigation controller
- Plane - Architecture overview
- Adding a new Log message
- Adding a new MAVLink message
- Adding a new MAVLink Gimbal
- Simulation & Testing
- SITL Simulator
- SITL setup on Linux
- SITL setup on Windows
- SITL setup on Windows in a VM
- SITL setup using Vagrant
- Copter SITL/MAVProxy Tutorial
- Plane SITL/MAVProxy Tutorial
- Rover SITL/MAVProxy Tutorial
- Balance Bot SITL/MAVProxy Tutorial
- SITL Advanced Testing
- Using Gazebo Simulator with SITL
- Using Last_letter Simulator with SITL
- Using the CRRCSim simulator
- Using X-Plane 10 with SITL
- Soaring SITL with X-Plane
- Last Letter
- HITL Simulators
- Autotest Framework
- SITL Simulator
- Contributing Code
- MAVLink Interface
- CAN and UAVCAN
- Companion Computers
- DroneKit Tutorial
- Raspberry Pi
- Intel Edison
- NVidia TX2
- NVidia TX1
- BeaglePilot Project
- Turnkey Companion Computer Solutions
- Porting to a new Flight Controller
- Pixhawk Advanced Hardware Info
- MAVProxy Developer GCS
- RTF Vehicle Developer Information
- How The Team Works
- GSoC 2018 project ideas
- Wiki Editing Guide
- Advanced user tools (downloads)
- Commercial Support
- Contact Us
- Developer tools (downloads)
- Donating to ArduPilot
- Firmware (downloads)
- History of ArduPilot
- Ready-To-Use vehicles
- Top Contributors
- Wiki Editing Guide
- Archived Topics
- Building ArduPilot for APM2.x with Eclipse on Windows
- Loading the code onto APM2.x
- Advanced Configuration Settings
- Updating the APM2.x BootLoader
- Mission Planner Terminal
- Debugging using JTAG
- Full Table of Contents