NAVIO: Installing and running APM (ArduPilot)

This document is not updated, please proceed to for latest version!

It is possible to run APM (ArduPilot) on Raspberry Pi with Navio. The autopilot’s code works directly on Raspberry Pi using the APM’s Linux HAL. Even though it is possible to run APM on standard Raspbian distribution it won’t work properly as it requires lower latency. Please use Raspbian with real time kernel for running APM, you can get it here.

Important! Keep in mind that the code for Navio is in the experimental state. 

Use it with caution!

State of the ArduPilot port to Raspberry Pi with Navio

These things were already supported in APM’s library and worked with minimal configuration:

  • MPU9250 inertial sensor
  • MS5611 barometer
  • Serial port

What has been added:

  • Raspberry Pi build configuration
  • Navio board configuration
  • GPIO driver for Raspberry Pi
  • RCOutput based on PCA9685 with 24.576 external oscillator
  • RCInput – uses pigpio daemon to sample GPIOs with 1MHz rate, should be rewritten to work without pigpio
  • MPU9250 built-in compass driver
  • U-blox GPS SPI driver – ready, but requires some rework
  • ADC based on ADS1115 – ready, needs reworking (available in navio-experimental branch only)

Installing APM

Log in to your Raspberry Pi using SSH or other method and download one of the ready to use APM binaries using wget.

For Navio or Navio+ pick one of the following corresponding to the type of your drone:


For Navio Raw pick one of the following corresponding to the type of your drone:


Make the file executable (if needed replace APMrover2.elf with ArduCopter.elf or ArduPlane.elf):

sudo chmod +x APMrover2.elf

If you’d like to build the binary yourself please proceed to the following tutorial.

Running APM

To run APM use the following (change APMrover2.elf to ArduCopter.elf or ArduPlane.elf if needed):

sudo ./APMrover2.elf -A udp:

Where is the IP address of the device with the Ground Control Station – your laptop, smartphone etc.

Arguments specify serial ports (TCP or UDP can be used instead of serial ports) :

  • -A is for telemetry
  • -B is for external GPS
  • -C is for secondary telemetry

If you would like to transfer secondary telemetry over the UART port on Navio you can specify it like this:

sudo ./APMrover2.elf -A udp: -C /dev/ttyAMA0

Autostarting APM on boot

To automatically start APM on boot add the following (change -A and -C options to suit your setup) to /etc/rc.local file on your Raspberry Pi:

sudo /home/pi/APMrover2.elf -A udp: -C /dev/ttyAMA0 > /home/pi/startup_log &

Connecting to Navio from the GCS

APM Planner

APM Planner is a ground station software for APM. It can be downloaded from the

APM Planner listens on UDP port 14550, so it should catch telemetry from the drone automatically.


MAVProxy is a console-oriented ground station software written in Python that can be used standalone or together with APM Planner. It’s well suited for advanced users and developers. MAVProxy can be installed with pip:

pip install mavlink mavproxy console wp

To run it specify the –master port, which can be serial, TCP or UDP. It also can perform data passthrough using –out option. --master --console

Where is the IP address of the GCS, not RPi.