Skip to content Link Search Menu Expand Document
ModalAI DOCS
Store

voxl-configure-mpa

Table of contents

  1. When to use voxl-configure-mpa?
  2. How voxl-configure-mpa Decides What to Run
    1. Baseline Service Defaults
  3. What does voxl-configure-mpa do?
    1. 1. Reads and Validates SKU
    2. 2. Constructs list of Config Steps
    3. 3. Executes these steps
    4. 4. Print summary
  4. Next Steps

voxl-configure-mpa serves to define the set of config files and MPA services that should be enabled for a given SKU number. When reflashing a VOXL with an SDK installer, the last step of the installation process is an automatic call to voxl-configure-mpa to set up all the necessary services.

voxl-configure-mpa                    # interactive: confirms the SKU before running
voxl-configure-mpa --debug            # dry-run pause: shows the step list before executing
voxl-configure-mpa --non-interactive  # no prompts, for scripted setup

When to use voxl-configure-mpa?

You should run voxl-configure-mpa if you wish to reset all config files and systemd service states to default conditions. This is useful if you’ve been experimenting with different services and configurations, but want to return to a known default state without reflashing VOXL.

You should also run voxl-configure-mpa after changing the SKU number on your VOXL to update all services to the respective defaults for the new SKU.

How voxl-configure-mpa Decides What to Run

Everything voxl-configure-mpa does is driven by a single input: the SKU stored at /data/modalai/sku.txt. That file is written by voxl-configure-sku — see Inspect and Configure SKU for what the SKU fields mean and how to change them safely. voxl-configure-mpa parses the SKU’s fields and turns them into a concrete list of configuration steps:

voxl-configure-sku ──► /data/modalai/sku.txt     e.g. MRB-D0005-4-V2-C6
        │                           family code ──┘  │  │   └─ camera config
        │  voxl-configure-mpa                        │  └─ hw version
        ▼  parses the SKU             compute board ─┘
~35 per-service settings, initialized to defaults
        │
        ▼  the family code picks the vehicle: extrinsics, VIO cameras,
per-vehicle overrides   ESC setup, PX4 platform and parameter file, ...
        │
        ▼  refined further by the camera, modem, RC-transmitter,
           and extras fields of the SKU
CONFIG_STEPS — one voxl-configure-xyz call per installed service
        │
        ▼
all steps execute in order; failures are retried and summarized

A few behaviors worth knowing:

  • The step list adapts to what is installed. A voxl-configure-xyz step is only added if that service exists on the system, so a minimal install configures fewer services than a full one. A few SKUs also work the other way around: SKUs whose hardware requires extra software (for example FPV and VRX vehicles) will apt install the needed package as one of the configuration steps.
  • Failures don’t stop the run. Every step executes even if an earlier one fails. A failed step is retried exactly once after a one-second pause, and the final summary reports steps that “worked on the second try” separately from genuine failures. A step whose tool is missing from the system entirely is marked failed immediately (usually a sign a package didn’t install).
  • Flight-critical steps are sequenced. voxl-px4 is stopped and disabled before ESC and ELRS firmware steps, voxl-mavlink-server is stopped before PX4 parameters load, and the PX4 configuration step re-enables the autopilot for the next boot — which is why the run always ends with “PLEASE POWER CYCLE YOUR VOXL”.
  • It can run unattended. voxl-configure-mpa --non-interactive skips all prompts; this is how the SDK installer drives it as the last step of an install.

Baseline Service Defaults

Before any per-vehicle overrides, every run starts from the same baseline — this is what a bare board with no special SKU fields gets:

Enabled by defaultDisabled by default
voxl-camera-server (per the SKU’s camera config)voxl-qvio-server, voxl-px4-imu-server
voxl-imu-server, voxl-cpu-monitorvoxl-dfs-server, voxl-tag-detector, voxl-tflite-server
voxl-open-vins-servervoxl-lepton-server, voxl-lepton-tracker, voxl-flow-server, voxl-feature-tracker
voxl-vision-hub, voxl-mavlink-servervoxl-uvc-server, voxl-modem, voxl-rangefinder-server
voxl-px4, voxl-portalvoxl-vtx, voxl-vrx, voxl-state-estimator
voxl-streamer, voxl-mavcam-managervoxl-io-server, voxl-osd, voxl-rc-server, voxl-static-ip

The family code then flips these per vehicle. Two common patterns: older platforms (RB5 Flight, Starling, Sentinel) enable voxl-qvio-server and disable voxl-open-vins-server — the reverse of the current default — and FPV SKUs disable voxl-streamer/voxl-mavcam-manager in favor of voxl-vtx, voxl-osd, voxl-state-estimator, and voxl-lepton-tracker, since video leaves through the VTX.

See how the SDK fits together for an interactive diagram of what these services do and how they connect.

The family-code logic itself lives in the voxl-configure-mpa script in voxl-configurator — reading the case statement for your vehicle’s family code is the definitive reference for exactly what a given SKU gets.

What does voxl-configure-mpa do?

1. Reads and Validates SKU

First, voxl-configure-mpa reads the /data/modalai/sku.txt file, validates it, and asks the user if it is correct before continuing:

voxl2:/$ voxl-configure-mpa
------------------------------------------------------------------
               Welcome to voxl-configure-mpa!

VOXL is currently thinks it is in the following hardware:

family code:   MRB-D0005 (starling)
compute board: 4 (voxl2)
hw version:    2
cam config:    6
SKU:           MRB-D0005-4-V2-C6

If this doesn't look right, quit and run voxl-configure-sku to
set it correctly. Then run voxl-configure-mpa again.


Continue? y/n:

2. Constructs list of Config Steps

The example below is a Starling (MRB-D0005), an older platform that uses voxl-qvio-server — a current-generation SKU’s list looks similar but enables voxl-open-vins-server instead (see Baseline Service Defaults).

Then, it internally makes a list of the necessary voxl-configure-xyz commands necessary to configure MPA. This list is printed out during the configuration process but so is a lot of other stuff. If you want to do a dry-run just to see what would be executed, run it in debug mode with voxl-configure-mpa --debug which will pause the program before executing, letting you see what is about to be run.

voxl2:/$ voxl-configure-mpa --debug

About to Execute:
voxl-configure-extrinsics starling_v2_voxl2
voxl-configure-cameras 6
voxl-configure-cpu-monitor factory_enable
voxl-configure-qvio factory_enable
voxl-configure-dfs factory_disable
voxl-configure-tag-detector factory_disable
voxl-configure-tflite factory_disable
voxl-configure-vision-hub factory_enable
voxl-configure-mavlink-server factory_enable
voxl-configure-portal enable
voxl-configure-lepton disable
voxl-configure-uvc disable
voxl-configure-streamer factory_enable
voxl-configure-modem disable
voxl-configure-mavcam factory_enable
voxl-configure-px4-imu-server factory_disable
voxl-configure-imu factory_enable
voxl-configure-flow-server disable
voxl-configure-feature-tracker disable
voxl-esc setup_starling_v2
voxl-elrs configure
voxl-configure-px4 starling_v2
voxl-configure-px4-params -np MRB-D0005-V2


Continue? y/n:

3. Executes these steps

All steps are executed, whether they pass or fail. At the end, a summary is presented showing which steps failed, if any. Note the last step in the example above: the vehicle’s PX4 parameter file is applied by voxl-configure-px4-params — see How PX4 is Packaged on VOXL 2 for where those parameter sets come from.

If your SKU has a voxl-esc, voxl-configure-mpa will upgrade the ESC firmware if necessary and set ESC params for the motors and propellers on your particular SKU; likewise an ELRS radio’s firmware is checked and updated. These steps are sequenced safely: voxl-px4 is stopped and disabled before the ESC and ELRS steps run (and voxl-rc-server is stopped to free the radio’s serial port, if present), then the PX4 configuration steps re-enable everything for the next boot. On much older SDK releases this ordering didn’t exist and voxl-configure-px4-params could occasionally fail from a PX4 restart race — on those releases, simply run voxl-configure-mpa again.

4. Print summary

If you’ve flashed VOXL with the SDK installer then this summary print will look familiar as it’s the last step of the installer. Note that the list of required calibration files can be accessed separately with the voxl-check-calibration tool.

------------------------------------------------------------------
        SUCCESSFULLY CONFIGURED MPA SERVICES!
        Services will start up on next reboot

Calibration File Status:
Present /data/modalai/voxl-imu-server.cal
Present /data/modalai/opencv_tracking_intrinsics.yml
Present /data/px4/param/parameters_gyro.cal
Present /data/px4/param/parameters_acc.cal
Present /data/px4/param/parameters_mag.cal
Present /data/px4/param/parameters_level.cal

                PLEASE POWER CYCLE YOUR VOXL
------------------------------------------------------------------

Next Steps

Now, voxl-configure-mpa has reset your configuration to defaults for a particular SKU. The remaining pages in the Configuration section are about customizing particular configuration files for your custom application.

Next: Configuring Extrinsics