../_images/ap-periph-logo.png

AP_Periph

../_images/ap-periph-collage.png

AP_Periph is an abbreviation for ArduPilot Peripheral, ie. an ArduPilot peripheral device based on the existing ArduPilot autopilot code. It takes peripheral device driver libraries of ArduPilot and adapts them to run on stand-alone peripheral devices, which communicate to the main autopilot via CAN, MSP, or other peripheral bus protocols.

The Peripheral device usually uses an STMF103 or STMF303 processor, but it is also being ported to use normal autopilot boards to be configured instead as a peripheral. Both sensors (distance sensor, GNSS, IMU, Barometer, etc.) and output ports (I2C, SPI, PWM, UART, ESC, LED, etc.) can be used to build new peripherals, as well as providing bus expansion for CAN, MSP, I2C,SPI, etc.

The software uses the same build system as ArduPilot for autopilot boards. All the firmware build configuration for an AP_Periph board done using a single configuration file (hwdef.dat) defines the inputs / outputs of the device and what device drivers will be included, in the same manner as an autopilot board. This makes it possible, for example, to define a AP_Periph device for UAVCAN with only a micro-controller of the STM32F103 type and 128 KB of flash memory, although processors with larger memory will be required depending on the number of drivers.

Capabilities

  • Bootloader update via serial or CAN port
  • Firmware update
  • Dynamic or static CAN node allocation
  • Parameter storage in flash memory
  • Self-diagnostic and security: watchdog, CRC, autotest, etc.
  • Updates with MissionPlanner or UAVCAN tools like UAVCAN GUI

Existing Products

Some (but not all) product examples using AP-Periph:

Firmware

Firmware for existing device definitions are posted here. Their hardware definition files are in the ArudPilot Github repository, here

To create firmware for a new design, follow the same instructions as for porting to a new autopilot board, as explained in the Wiki section Porting to a new flight controller board .

Additional information is available in the AP_Periph readme here