VOXL Vision PX4 Features

The voxl-vision-px4 package provides the software interface between the VOXL and PX4 flight controller. It enables GPS-denied position control via Visual Inertial Odometry (VIO), Visual Obstacle Avoidance (VOA), and AprilTag detection.

This project is under active development and currently provides the following features and functions:

Table of contents

  1. Telemetry Proxy
  2. VIO - Visual inertial Odometry for GPS-denied Navigation
  3. VOA - Visual Obstacle Avoidance
  4. Offboard Figure Eight Mode
  5. ADS-B
  6. Configurable Rotation Matrix
  7. Time Synchronization

Telemetry Proxy

voxl-vision-px4 serves as a telemetry proxy between WiFi/LTE (UDP) and PX4’s UART telemetry port. This is always enabled and removes the need to use a USB cable or Serial Radio Link for telemetry data.

Configure this by providing the IP address of your ground station computer in the “qgc_ip” field of the config file.

    "qgc_ip":                   "",

A second UDP port can also be configured and enabled. This will allow you to connect two ground controllers to one drone. Alternatively this secondary port can serve to allow other processes running on VOXL to communicate with PX4 over mavlink by sending/receiving UDP packets to/from the localhost interface. This is how MAVROS running on VOXL communicates with PX4.

    "en_secondary_qgc": false,
    "secondary_qgc_ip": "",

VIO - Visual inertial Odometry for GPS-denied Navigation

Send Visual Inertial Odometry data to PX4 for accurate position control (VIO). The VIO algorithm is provided by the ModalAI Vision Library and is sent to PX4 over UART in the form of VISION_POSITION_ESTIMATE packets.

This can be turned on and off with the “en_vio” field in the configuration file. For debugging purposes you may also enable “en_send_vio_to_qgc” which will send data back to QGC which can be viewed in QGC’s mavlink inspector or logged.

    "en_vio":                   true,
    "en_send_vio_to_qgc":       false,

VOA - Visual Obstacle Avoidance

Provides Visual Obstacle Avoidance data from stereo cameras (VOA) enabled by the ModalAI Vision Library. Enabling this feature only sends obstacle distance data to PX4 in the form of OBSTACLE_DISTANCE mavlink messages.

Currently, it is still PX4 providing the collision prevention algorithm and requires PX4 builds after October 24th to work. You will also need to set the CP_DIST PX4 parameter to a distance greater than 0 for Collision prevention to work. We suggest 1.5 meters for close-quarters indoor flight testing.

You will also need to calibrate your stereo cameras.

More information available at https://docs.px4.io/master/en/computer_vision/collision_prevention.html

    "en_voa":                   true,
    "en_send_voa_to_qgc":       false,

Offboard Figure Eight Mode

Just like the MAVROS test utility, voxl-vision-px4 can command px4 to fly a figure eight when switched to offboard mode. Don’t enable this feature if you are providing offboard mode commands from another source such as MAVROS.

    "en_offboard_figure_eight":   true,


Automatic Dependent Surveillance-Broadcast (ADS-B) receive and relay to Ground Controller

    "en_adsb":                  false,
    "adsb_uart_bus":            7,
    "adsb_uart_baudrate":       57600,

Configurable Rotation Matrix

This represents the rotation from VOXL’s primary IMU to the NED coordinate frame for the drone. This changes based on your mounting of VOXL. The default listed below is the common and recomended layout for VOXL matching that of our Flight Deck kit and M500 development platform.

    "vio_to_ned_rotation_matrix":   [[0, 1, 0], [1, 0, 0], [0, 0, -1]]

Time Synchronization

Synchronizes time between PX4 and VOXL by responding to PX4’s timesync mavlink packets. PX4 then filters and maintains an offset between the VOXL’s application’s processor time (clock_monotonic) and PX4’s time. Note that currently these timesync requests are handled directly by voxl-vision-px4 and never make their way to MAVROS as this method provides lower latency and overhead.