AI Detection Setup Guide
Table of contents
- Overview
- VTX Configuration
- VRX Configuration
- Object Detection with voxl-tflite-server
- Object Tracking with voxl-nano-tracker
- Verifying Operation
- Troubleshooting
Overview
The VTX/VRX system supports a real-time AI overlay on the video stream: an onboard service detects or tracks objects in the camera feed, voxl-vtx transmits the bounding box data alongside the video, and voxl-vrx renders the boxes (with optional labels) on the display or goggles.
How It Works
- Drone/VTX: an onboard AI service publishes detection results (bounding boxes, labels, confidence scores) to an MPA pipe. Two sources are supported:
voxl-tflite-server— object detection: box every object a deep-learning model recognizes. Display-only. Publishes ontflite_data.voxl-nano-tracker— object tracking: follow one target selected via RC or voxl-portal. Can also command vehicle yaw via VFC. Publishes onobject_tracker_meta(the shipped config default on current SKUs).
- Transmission:
voxl-vtxsubscribes to the pipe named byai_detection_sourcein the active video profile and transmits the detection data to the VRX - VRX (Ground Unit):
voxl-vrxreceives the detection data and renders bounding boxes with optional labels on the video display
Prerequisites
- Drone/VTX/VRX on SDK 1.6.0+ (SDK 1.6.3+ for voxl-nano-tracker; the
object_tracker_metadefault requires SDK 1.6.6+) - AI detection enabled in voxl-vtx and voxl-vrx configuration files
VTX Configuration
On the drone/VTX, edit /etc/modalai/voxl-vtx.conf to enable AI detection transmission.
The configuration is done per video profile, edit the following parameters in the profile you want the detection to be on:
{
...
"profiles": [
{
"name": "Object Detection",
"source": "hires_default_misp_encoded", // Should be the encoded version of the camera pipe used for object detection in voxl-tflite-server
...
"ai_detection_enable": true, // Enable/Disable AI detection for this profile
"ai_detection_source": "object_tracker_meta", // Pipe to read detections from: object_tracker_meta (nano-tracker) or tflite_data (tflite-server)
"ai_detection_qty": 3, // The maximum number of object detections to transmit to the VRX
"ai_detection_threshold": 0.5 // The confidence threshold for an object to be considered for transmission
}
]
...
}
Configuration Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
ai_detection_enable | bool | true | Enable transmission of AI detection data for this profile |
ai_detection_source | string | object_tracker_meta | MPA pipe to read detections from (object_tracker_meta or tflite_data) |
ai_detection_qty | int | 3 | Maximum number of detection boxes to transmit |
ai_detection_threshold | float | 0.5 | Minimum confidence threshold for detections (0.0 - 1.0) |
Parameter Notes
- ai_detection_qty: Higher values transmit more detected objects but increase bandwidth usage. Typically 2-5 objects is sufficient.
- ai_detection_threshold: Only detections with confidence greater than this value are transmitted. Range: 0.0 (all detections) to 1.0 (only very confident detections). A value of 0.75 means 75% confidence or higher.
VRX Configuration
On the VRX, edit /etc/modalai/voxl-vrx.conf to enable AI detection rendering:
{
...
"ai_detection_enable": true, // Enable/Disable AI detection
"ai_detection_show_labels": false // Enable/Disable object class labels
...
}
Configuration Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
ai_detection_enable | bool | true | Enable rendering of AI detection boxes on display |
ai_detection_show_labels | bool | true | Show object class labels and confidence scores with boxes |
Object Detection with voxl-tflite-server
voxl-tflite-server boxes every object its model recognizes. It is display-only — it never influences flight. Point ai_detection_source at tflite_data in the active VTX profile, then configure voxl-tflite-server on the drone/VTX:
- Ensure
voxl-tflite-serveris installed on the drone/VTX. - Configure the service using
voxl-configure-tflite.- Set the input pipe to match your camera source for the video feed (e.g.,
hires_default_misp_colorifhires_default_misp_encodedis used as video source)
- Set the input pipe to match your camera source for the video feed (e.g.,
- It is recommended to skip a few frames (set
skip_n_framesin/etc/modalai/voxl-tflite-server.confto 2, 3, or 4) to reduce the CPU usage, thevoxl-tflite-serverprocess can be quite CPU intensive. - Set the
allow_multiplefield tofalse. This is necessary so that the MPA pipe enumerates astflite_data, which is what voxl-vtx expects. - Restart and verify the service is running:
systemctl restart voxl-tflite-serverthensystemctl status voxl-tflite-server. - Check that detection data is being published:
voxl-inspect-detections tflite_data.
Refer to the voxl-tflite-server documentation for complete setup instructions.
Object Tracking with voxl-nano-tracker
object_tracker_meta is the shipped config default on current SKUs. voxl-nano-tracker tracks a single target selected from an RC channel (default: channel 12) or voxl-portal; its configuration lives at /etc/modalai/voxl-nano-tracker.conf. Enable it with:
voxl-configure-nano-tracker factory_enable
voxl-nano-tracker is more than a display overlay. Paired with VFC position mode, AOI yaw tracking commands the drone’s yaw to keep the tracked target centered. Understand the AOI Yaw Tracking guide and its warnings before enabling tracking in flight, and be ready to take manual control.
Verifying Operation
On the VTX (Drone)
Check that detection data is being generated on your configured source pipe:
voxl-inspect-detections tflite_data # tflite-server
voxl-inspect-detections object_tracker_meta # nano-tracker
On the VRX (Ground Unit)
You should see bounding boxes rendered on the video display. If ai_detection_show_labels is enabled, you’ll also see class names.
Troubleshooting
No bounding boxes visible on VRX
- Verify
ai_detection_enable: truein both VTX and VRX config files - Check the source service is running on the drone/VTX:
systemctl status voxl-tflite-server(orvoxl-nano-tracker) - Verify detections are being published:
voxl-inspect-detections tflite_data(orobject_tracker_meta) on the drone/VTX - Confirm the VTX profile’s
ai_detection_sourcematches the pipe your source service publishes - Ensure VTX/VRX link is working (video streaming properly)
- Check
ai_detection_thresholdisn’t too high (try lowering the configured threshold)
Poor detection performance
- Lower
ai_detection_thresholdto see more detections (may increase false positives) - Verify TFLite model is appropriate for your use case
Bandwidth concerns
- Reduce
ai_detection_qtyto transmit fewer objects - Increase
ai_detection_thresholdto only send high-confidence detections