Welcome to the ArduPilot Development Site¶
Tip
Keep up with the latest ArduPilot related blogs on ArduPilot.org!
ArduPilot 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).
The source code is developed by a group of volunteer and professional (i.e. paid) developers who, along with our users and Partners, make up the ArduPilot Community.
Getting Involved¶
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 ArduPilot Discord Chat 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.
Supported boards¶
The Autopilot Hardware Options page provides an overview for all the supported controller boards, including Pixhawk, The Cube, Pixracer, NAVIO2, Bebop2, etc.
To get going quickly please consider purchasing one of the ready-to-fly vehicles including the very low-cost SkyRocket/SkyViper drone.
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.
Project List¶
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.
Copter (wiki, code) - autopilot for multicopters and traditional helicopters
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.
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)
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 and calls its version DroneCAN, allowing UAVCAN to evolve separately.
How the team works¶
Our annual developers conference is held in Feb/March in Canberra Australia (2018 announcement).
The source code for ArduPilot is managed using git on https://github.com/ArduPilot/ardupilot
Pre-compiled firmware for supported autopilot boards is available from https://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.
License¶
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.
Table of Contents¶
- License (GPLv3)
- AP_Peripheral Devices
- 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 Windows11 using WSL2
- 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
- Custom Build Server
- Editors & IDEs
- Learning the code
- Introduction
- Library Description
- Library Example Sketches
- Sensor Drivers
- Threading
- UARTs and the Console
- RC Input and Output
- Storage and EEPROM management
- Filesystems
- EKF
- Copter - Vehicle Code introduction
- Copter - Attitude Control
- Copter - Adding Parameters
- Copter - Adding a new flight mode
- Copter - Scheduling your new code to run intermittently
- Copter - Motors Library
- Copter - PosControl and Navigation
- Copter - Object Avoidance
- Copter - Adding Custom Attitude Controller
- 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
- Mission Planner Simulation
- Gazebo
- XPlane-10
- XPlane-10 Soaring
- RealFlight
- Morse
- Replay
- JSBSim
- AirSim
- Silent Wings Soaring
- Last Letter
- CRRCSim
- HITL Simulators
- Autotest Framework
- Unit Tests
- SCRIMMAGE
- Webots
- MATLAB and Simulink
- JSON interface
- Debugging
- ArduPilot On Linux
- Support Proxy
- Contributing Code
- MAVLink Interface
- MAVLink Basics
- Request Data From The AutoPilot
- Get and Set Parameters
- Copter Commands (Guided Mode)
- Plane Commands (Guided Mode)
- Rover Commands (Guided Mode)
- Get and Set Home and/or EKF origin
- Arm and Disarm
- Get and Set FlightMode
- Camera Commands
- Gimbal / Camera Mount
- Mission Upload/Download
- Move a Servo
- Non-GPS Position Estimation
- Winch Commands
- MAVLink Routing
- Other Commands
- Mission Command List
- Mission Command Package Format
- CAN and DroneCAN/UAVCAN
- Companion Computers
- Arduino family
- ARK Jetson PAB Carrier
- LYCHEE (Cube Carrier Board for Raspberry Pi Compute Module)
- ModalAI VOXL
- ModalAI VOXL2
- NVidia TX1
- NVidia TX2
- ODroid
- Holybro Pixhawk Rasberry Pi CM4/CM5 Baseboard
- Holybro Pixhawk Jetson Baseboard
- Raspberry Pi
- APSync
- BlueOS
- DroneKit
- FlytOS
- Maverick
- ROS
- Installing ROS
- Installing MAVROS
- Connecting to ArduPilot from ROS
- Hector SLAM for non-GPS navigation
- Google Cartographer SLAM for non-GPS navigation
- VIO tracking camera for non-GPS navigation
- Sending Commands from rviz
- Object Avoidance
- Clock/Time syncronisation
- Send data from AP to ROS/mavros
- ROS with SITL
- ROS with SITL in Gazebo
- ROS with distance sensors
- ROS with Aruco Boards detection
- ROS with Apriltag Boards detection
- Install ROS 2
- ROS 2 with SITL
- ROS 2 Interfaces
- ROS 2 with SITL in Gazebo
- ROS 2 over Ethernet
- ROS 2 waypoint goal interface
- Cartographer SLAM with ROS 2 in SITL
- Rpanion-server
- Turnkey Companion Computer Solutions
- ROS1/ROS2
- Installing ROS
- Installing MAVROS
- Connecting to ArduPilot from ROS
- Hector SLAM for non-GPS navigation
- Google Cartographer SLAM for non-GPS navigation
- VIO tracking camera for non-GPS navigation
- Sending Commands from rviz
- Object Avoidance
- Clock/Time syncronisation
- Send data from AP to ROS/mavros
- ROS with SITL
- ROS with SITL in Gazebo
- ROS with distance sensors
- ROS with Aruco Boards detection
- ROS with Apriltag Boards detection
- Install ROS 2
- ROS 2 with SITL
- ROS 2 Interfaces
- ROS 2 with SITL in Gazebo
- ROS 2 over Ethernet
- ROS 2 waypoint goal interface
- Cartographer SLAM with ROS 2 in SITL
- Lua Scripts
- Porting to a new Flight Controller
- OEM Customization
- Secure Firmware
- RemoteID
- Advanced Hardware Info
- MAVProxy Developer GCS
- Resources for GCS Developers
- RTF Vehicle Developer Information
- How The Team Works
- Events
- Training Centers
- GSoC
- Developers Conference
- 2022 Roadmap
- Wiki Editing Guide
- USB IDs
- User Alerts
- Academic Works Involving ArduPilot
- Appendix
- Abbreviations
- Acknowledgments
- Advanced user tools (downloads)
- Commercial Support
- Contact Us
- Developer tools (downloads)
- Donating to ArduPilot
- Firmware (downloads)
- Glossary
- History of ArduPilot
- Partners
- Partners Program
- Stores
- Top Contributors
- Wiki Editing Guide
- Trademark
- 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
- Building for Pixhawk on Windows with Make
- Building ArduPilot with Arduino for Windows
- Editing & Building with Atmel Studio or Visual Studio
- Editing with Eclipse
- Building for APM2.x with Make (Win, Mac, Linux)
- APM2.x on MacOS with Arduino
- APM2.x on Linux with Make
- Building for Flymaple on Linux
- Building for Pixhawk on Windows or Linux with QtCreator
- Building for Qualcomm Snapdragon
- Building for Erle-Brain 2
- Building for Erle-Brain
- Building for Navio on RPI 2
- Setup the waf Build Environment on Windows10 using WSL
- Intel Edison
- Interfacing with Pixhawk Using the NSH
- BeaglePilot Project
- Making a MAVLink WiFi bridge using the Raspberry Pi
- HITL Simulators
- Weekly meetings on Mumble Server
- How to sign a Pixhawk with your Certificate of Authenticity
- SITL Serial Mapping
- RoadMap for 2020/2021
- Items completed in 2019
- Items completed in 2018
- Trouble Shooting Pixhawk4 Boot