Building an Intel-Based Platform for Ardupilot

Using the PXFMini with an Intel UP

Kevin Angstadt

University of Michigan


This tutorial provides step-by-step instructions for developing a Intel-based autonomous vehicle platform running an Ardupilot software stack. Steps include: assembling computation and sensor hardware, building an operating system distribution, and building software on the system. The base system consists of an Intel UP board, which is augmented by the PXFMini autopilot HAT developed by Erle Robotics.

Note: this tutorial is a work in progress. This document will be updated as the build process becomes more refined and bugs are resolved.

Looking for the older build guide? It is still available here.

Known Issues

Parts List

The following parts are needed to construct the autopilot:

Intel Up Shop

Erle Robotics


Digikey & Mouser


3D Printed Parts



Assemble RCInput Circuit Board

For construction without the printed circuit board, please refer to this schematic.

For this step, you will need a copy of the Arduino IDE installed and configured to program ATTiny85 microcontrollers. A helpful guide may be found here.

  1. Solder the 8-position IC DIP socket onto the circuit board
  2. Break off a 3-pin and a 4-pin section from the 16-position header and solder to the board
  3. Clone PPMSum Arduino Sketch repository:
    git clone git://
  4. Launch the PPMSum project in Arduino.
  5. Ensure that the following settings are selected in the Tools menu:
    • Board: ATTiny25/45/85
    • Processor: ATTiny85
    • Clock: Internal 16 MHz
    • Programmer: USBTinyISP
  6. Insert the ATTiny85 in the TinyUSB programmer and attach to computer
  7. Select Tools > Burn Bootloader. Check the error logs to verify that this completes successfully.
  8. Select Sketch > Upload to flash the firmware. Check the error logs to verify that this completes succesfully.
  9. Insert the ATTiny85 into the 8-position DIP header on the RCInput circuit board. Be sure to verify correct orientation.

Attach components to the UP Board

  1. Stack 40-pin headers and connect to GPIO pins of the UP Board
  2. Remove the two screws attaching the lower heatsink to the UP Board near the GPIO pins
  3. Attach two standoffs and one spacer (with the spacer between the two standoffs) to both of the screwholes. Use threadlocker to keep everything tight.
  4. Attach PXFMini HAT to 40-pin header
  5. Reinstall two removed screws
  6. Remove the screw attaching the lower heatsink to the UP Board near the ethernet port
  7. Install two standoffs in this hole. Use threadlocker to keep everything tight.
  8. Attach RCInput circuit board to this standoff using the screw that was previously removed. The three-pin header should be parallel with the long side of the UP.

After this step is complete, the UP Board should look like the following:

Attach peripherals

  1. Assemble and connect the WiFi kit for the UP board following the instructions in this guide.
  2. Place the UP board in the bottom case and slide the WiFi card into the bracket on the top case
  3. Feed the antenna adapter through the hole on the back of the bottom case and attach with the lock washer and nut.
  4. slide the two pieces of the case together and secure with four M3x6 machine screws.
  5. Connect the GPS/Compass unit to the PXFMini using a JST GH cable
  6. Connect RC input processor to the PXFMini using a JST GH breakout cable
  7. Connect the telemetry radio to the UP Board with a micro-USB cable

The final construction of the the UP Board-based autopilot will look similar to this:

Build OS Image

The next step is to build a custom operating system image using the Yocto Project build system, Poky.
  1. Download poky and cd into the directory:
    git clone -b krogoth-15.0.3 git://
    cd poky
  2. Download the OpenEmbedded meta layer:
    git clone -b krogoth
  3. Download the Intel BSP layer:
    git clone -b krogoth git://
  4. Download the Intel UP board BSP layer:
    git clone -b krogoth
  5. Download the Java meta layer:
    git clone -b krogoth git://
  6. Download the Virtualization meta layer:
    git clone -b krogoth git://
  7. Download the START-Rover meta layer:
    git clone git://
  8. Create the build environment (this will change into the build directory):
    TEMPLATECONF=meta-start-rover/conf source oe-init-build-env
  9. Build the OS image. There is a trusted image and a locomotion image. Both rovers are configured with static IPs: trusted is and locomotion is
    bitbake meta-start-rover-trusted
    bitbake meta-start-rover-locomotion
  10. Write the generated iso (tmp/deploy/images/up-board/meta-start-rover*.iso) to a flash drive.

Configure Software on UP Board

  1. Attach USB drive created in the previous section to the UP Board and boot
  2. Press esc at boot to enter system setup
  3. Ensure that Advanced > HAP Configuration has the following settings:
    LPSS I2C #1 Support       [ACPI Mode]
         I2C #1 Speed         [400KHz]
    LPSS I2C #2 Support       [ACPI Mode]
         I2C #2 Speed         [400KHz]
    LPSS PWM #1 Support       [ACPI Mode]
    LPSS PWM #2 Support       [ACPI Mode]
    LPSS SPISupport           [ACPI Mode]
    LPSS HSUART #1 Suppor     [ACPI Mode]
    SCC SDIO Support          [ACPI Mode]
    I2CO/GPIO Selection       [GPIO]
    I2S/GPI Selection         [GPIO]
    Save and exit configuration
  4. Press F7 to bring up the boot device menu. Select the USB drive from the menu, and follow the prompts to install the OS. Allow installation to complete and reboot.
  5. DNS is currently misconfigured. Add a nameserver to the resolv.conf file.
    echo "nameserver" > /etc/resolv.conf
  6. Download and build Ardupilot:
    cd ~
    git clone -b upboard-update
    cd ardupilot
    git submodule update --init
    ./waf configure --board=upboard
    ./waf build
  7. Binaries for Ardupilot are available in build/up-board/bin

Running Ardupilot

Ardupilot binaries require several flags to configure external devices:

Execution of ardupilot might then look something like the following:

~/ardupilot/build/up-board/ardurover -A /dev/null -B /dev/ttyS1 -C /dev/ttyUSB0

Last modified: 2018-07-06