Software Components

System Dependencies

The following packages are installed by the release setup.

Package
Purpose

cmake

Build system

nano

Text editor

htop

Process monitor

ncdu

Disk usage analyzer

locate

File search utility

curl

HTTP client

v4l-utils

Video4Linux utilities

g++

C++ compiler

git-lfs

Git Large File Storage

python3

Python runtime

python3-pip

Python package manager

libssl-dev

OpenSSL development libraries

libgstreamer1.0-0

GStreamer core library

gstreamer1.0-tools

GStreamer command-line tools

gstreamer1.0-plugins-good

GStreamer good plugins

gstreamer1.0-plugins-bad

GStreamer bad plugins

gstreamer1.0-plugins-ugly

GStreamer ugly plugins

gstreamer1.0-libav

GStreamer libav plugin

libgstreamer-plugins-base1.0-dev

GStreamer base plugins development

libgstrtspserver-1.0-0

RTSP server library

libgstrtspserver-1.0-dev

RTSP server development

gstreamer1.0-rtsp

GStreamer RTSP plugin

libjansson4

JSON parsing library

libyaml-cpp-dev

YAML C++ development

libboost-all-dev

Boost libraries

jq

JSON query tool

nload

Network bandwidth monitor

libeigen3-dev

Eigen linear algebra library

libcurl4-openssl-dev

cURL development libraries

nlohmann-json3-dev

JSON for Modern C++

libgeographic-dev

Geographic library

Python Packages

Package
Version

jetson-stats

latest

meson

latest

ninja

latest

lxml

5.4.0

pyserial

latest

pymavlink

latest


CMake 3.27

CMake is configured to a version compatible with the build requirements of the platform applications (3.27). The project usually uses 3.17, but this release is updated for 3.27 to ensure all native CMake-based projects in the stack compile correctly against the supplied libraries and headers without version conflicts.


Jetpack 6.2

NVIDIA Jetpack provides the base OS, CUDA runtime, and NVIDIA libraries required for Jetson hardware operation. This includes GPU drivers, multimedia frameworks, and hardware-specific optimizations used across the entire software stack.


OpenCV 4.11

OpenCV is installed with CUDA, providing GPU-accelerated computer vision processing on the Jetson platform. This differs from the default OpenCV distribution, which typically does not include CUDA acceleration.

GLib

GLib is a core support library providing data structures, I/O abstractions, and utility functions. Many native components and system services throughout the stack depend on GLib for runtime compatibility.


DeepStream

NVIDIA DeepStream provides video analytics, hardware-accelerated stream processing, and RTSP support on Jetson. The system uses DeepStream for efficient video frame processing and stream manipulation across the pipeline.


Librdkafka

Librdkafka is the Kafka client library supporting high-performance messaging and telemetry streaming. Components that publish or consume large volumes of payload data use librdkafka for efficient, distributed message handling.


The system uses MAVLink as the primary protocol for communication with the autopilot and for messaging between onboard applications. mavlink-router is responsible for routing MAVLink traffic between the flight controller, the Jetson companion computer, payload services, and the ground station.

Endpoints are defined either in main.conf or in profile.d/<app_name>/endpoint.conf configuration files. This allows each application to publish and subscribe on the correct system/component IDs and to use the correct network transport for its MAVLink streams.

The system also uses the mavlink-udp-interface library for application-level MAVLink communication over UDP:

  • https://gitlab.com/airvolute_oss/dronecore.os/mavlink-udp-interface

This library provides the shared UDP transport abstraction used by packages that send and receive MAVLink messages without talking directly to the serial autopilot endpoint.

mavlink-router bridges the serial and UDP domains, forwards messages based on configured endpoints, and ensures that application traffic and autopilot telemetry remain isolated by system/component routing rules.

Configuration (/etc/mavlink-router/main.conf) defines the primary router endpoints additional endpoints can be defined /etc/mavlink-router/profile.d/<app_name>/endpoint.conf entries used by payload apps and services.


ArduPilot

ArduPilot is the flight control software used for autopilot communication and vehicle control. The release includes specialized autopilot variants depending on payload and platform:

  • Copter 4.6.3 is the default ArduPilot variant used with SIYI gimbals on Stribog platforms.

  • Custom ArduPilot for NextVision gimbals is provided as a modified variant:

    • On Ellipsis, the custom NextVision autopilot is an edited ArduPlane 4.6.2 derivative.

    • On Stribog, the NextVision integration uses a Copter 4.5.7-based custom firmware.

Developers: Use the payload-specific ArduPilot variant for the correct gimbal integration. SIYI payloads use the standard Copter 4.6.3 image, while NextVision payloads use custom-forked images tuned for gimbal support.

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


AvDiagnostic

This package sets ArduPilot MAVLink stream rates from a config input. The input config defines the messages and publish rates the autopilot should use, allowing the system to tune telemetry throughput for payload services and the ground station.

Link:

Parameter
Type
Default
Description

config.yaml

yaml

Mavlink Endpoint definition and messages to set stream rates for with they frequency

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


MediaMTX

Launches the MediaMTXarrow-up-right media server to proxy and route live video streams from the payload camera. It provides RTSP endpoints to downstream consumers and translates camera output into the correct network paths for each build.

For Siyi payloads, MediaMTX routes the camera stream to downstream consumers using a payload-specific configuration file.

All RTSP streams in this release flow through MediaMTX. Downstream consumers subscribe to streams from MediaMTX rather than directly from the camera device. When subscribing from outside the local device, use the Jetson/device IP address for the MediaMTX RTSP endpoint.

Parameter
Type
Default
Description

mediamtx.yml

yaml

MediaMTX YAML config file for the payload

Config file per build:

Build
Config file

Ellipsis

mediamtx.yml

Stribog Siyi

mediamtx_siyi_zr10.yml

Stribog NextVision

mediamtx_nextvision.yml

Operators: For RTSP proxy configuration details, refer to the MediaMTX RTSP documentationarrow-up-right.

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


GimbalNextVisionLib

Installs and initializes the NextVision gimbal integration library and configures the gimbal control interface for the NextVision payload. This stage is conditional when nextvision payload is used.

The library adapts the proprietary NextVision gimbal communication protocol for communication with the gimbal and is compatible with all NextVision payloads. A valid NextVision license is required for this adapter to operate correctly.

Camera and gimbal control for Siyi payloads are handled separately by SIYI. Refer to the ZR10 User Manualarrow-up-right for the Siyi MAVLink camera and gimbal protocol details.

Used in: Ellipsis, Stribog NextVision


AvPayloadManager

The AvPayloadManager package is responsible for publishing video streams for cameras and MAVLink control of both the camera and the gimbal. It controls stream publication, registers camera and gimbal endpoints, and informs the ground station of the drone's RTSP IP address over MAVLink.

The RTSP streaming IP address used by AvPayloadManager is resolved in the following priority order (highest priority first). Each candidate is validated as a proper IPv4 address before being accepted.

  • rtsp-ip-address in the camera configuration file (camera_configuration/config.yaml) — if provided and valid, this value is used.

  • Environment variable AV_COMM_UAV_IP — if the YAML value is missing or invalid, this environment variable is checked next. The variable should be exported in /etc/profile.d/<radio_script_name>.sh.

  • Default USB fallback address 192.168.55.1 — if neither YAML nor environment provides a valid IPv4 address, this value is used.

This address is sent over MAVLink to inform the GCS which drone IP to use for RTSP subscription. Change this value when you want the GCS to subscribe from USB instead of the radio link.

This package also manages the connected payload lifecycle and the message flow between the gimbal integration library, detection pipeline, and video stream routing. It ensures payload services are initialized in the correct order and their MAVLink interfaces are registered.

Configuration
Purpose

payload_configuration/config.yaml

Defines MAVLink endpoints and gimbal parameters for NextVision payloads, including endpoint mappings, system/component IDs, and payload-specific control settings.

camera_configuration/config.yaml

Lists the cameras used by the package and their respective stream configurations, including resolution, bitrate, codec, and media source settings. Editing this file is possible but not recommended unless there is a specific need.

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


AvDetection

Subscribes to a video stream from a configured RTSP mount point, performs DNN-based object detection inference, and republishes an annotated video stream with bounding boxes to a separate RTSP endpoint.

Detection results are also published over MAVLink using COMMAND_LONG with command MAV_CMD_SPATIAL_USER_5. Link: https://gitlab.com/airvolute_oss/dronecore.os/av-detection MAVLink message structure (MAV_CMD_SPATIAL_USER_5):

Field
Description

param1

Frame ID

param2

Bounding box cx (centre X)

param3

Bounding box cy (centre Y)

param4

Bounding box width

param5

Bounding box height

param6

Confidence score

param7

Class ID

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


AvStabilization

AvStabilization is an application designed for processing video streams. It subscribes to an RTSP stream and utilizes CUDA for GPU-accelerated processing. The output stream is re-encoded with low quality (LQ) for streaming via radio and high quality (HQ) for use on device.

Link:

Features:

  • Roll compensation: CUDA-accelerated roll compensation for 2-axis NextVision gimbals.

Used in: Ellipsis, Stribog NextVision


AvVisualTracker

AvVisualTracker is a real-time visual tracking system built with OpenCV using a MedianFlow tracker and a partial MAVLink camera tracking protocol implementation.

Link: https://gitlab.com/airvolute_oss/dronecore.os/av-visual-tracker.git

Features:

  • Start tracking with MAVLink MAV_CMD_CAMERA_TRACK_RECTANGLE or MAV_CMD_CAMERA_TRACK_POINT

  • Stop tracking with MAVLink MAV_CMD_CAMERA_STOP_TRACKING

  • Sends normalized tracked bounding box state in CAMERA_TRACKING_IMAGE_STATUS

Warning:

  • All ack messages for MAV_CMD_CAMERA_TRACK_RECTANGLE, MAV_CMD_CAMERA_STOP_TRACKING, and MAV_CMD_CAMERA_TRACK_POINT, as well as CAMERA_TRACKING_IMAGE_STATUS, are acting as component ID 100.

  • The tracker used is MedianFlow.

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


AvGimbalTracking

Tracks an object in the image using position data from AvVisualTracker. The gimbal tracking feature adds movement prediction via Kalman filtering and a prediction matrix.

Link: https://gitlab.com/airvolute_oss/dronecore.os/av-gimbal-tracking.git

Supported gimbals include NextVision and SIYI. The active gimbal can be reconfigured using dpkg-reconfigure.

Gimbal commands are routed through mavlink-router, then forwarded to ArduPilot, which serves as the gimbal manager. ArduPilot emits the final movement command on MAVLink, and AvPayloadManager reads that command and translates it to the gimbal's respective communication protocol.

For NextVision gimbals, user control input from the GCS travels through mavlink-router to ArduPilot, which processes the command and outputs the payload-specific gimbal control message back onto the MAVLink bus. AvPayloadManager then consumes that command and converts it to the NextVision protocol used by the gimbal.

Used in: Ellipsis, Stribog Siyi, Stribog NextVision


AvRadioStatus

AvRadioStatus publishes live radio link health and status over MAVLink so the GCS can display the active radio connection, link quality, and client-specific state.

Link: https://gitlab.airvolute.com/sw/linux/av-radio-status.git

Key behavior:

  • Publishes radio status telemetry on a MAVLink component attached to the payload stack.

  • Reports signal strength, packet loss estimates, and active radio type in status messages consumed by QGC and other ground stations.

  • Supports both Doodle and Viulinx radio clients via configuration.

Radio client configuration:

  • radio_type: doodle or radio_type: viulinx

  • doodle_endpoint: TCP or UDP address/port used by the Doodle client.

  • viulinx_endpoint: UDP address/port used by the Viulinx uplink/downlink.

  • radio_status_publish_rate_hz: desired status publish rate.

Environment variable examples:

  • Doodle: AV_RADIO_TYPE=doodle

  • Viulinx: AV_RADIO_TYPE=viulinx

  • Optional radio endpoint override: AV_RADIO_ENDPOINT=...

On Doodle-based systems, AvRadioStatus monitors the Doodle link process and publishes the connection state and quality metrics on MAVLink. For Viulinx radio configurations, it publishes the active Viulinx endpoint, connection health, and any internal packet discard counters.

QGroundControl custom action usage:

  • AvRadioStatus exposes a custom MAVLink action that can be invoked from QGC to request a radio status refresh or to toggle the radio diagnostics overlay.

  • The custom action is mapped to a payload-specific MAVLink command and may require the GCS to use a custom action list or plugin.

  • Use the custom action when the ground station needs a fresh radio health snapshot without waiting for the periodic telemetry stream.

RADIO_STATUS structure:

  • rssi: drone RSSI

  • remrssi: wearable RSSI

  • txbuf: channel bandwidth usage

  • noise: drone noise

  • remnoise: wearable noise

  • rxerrors: currently set frequency

  • fixed: drone MCS index

ArduPilot stream filtering:

  • When AvRadioStatus runs with ArduPilot on the same MAVLink bus, ensure the ArduPilot endpoint is configured to avoid forwarding excessive stream data for radio and payload status.

  • ArduPilot can adjust stream_et based on received radio data, which is usually not desirable for payload radio status telemetry.

  • Filter the radio message out in mavlink-router so the radio status message does not reach ArduPilot.

Example mavlink-router filter for the Cube endpoint:


AvGeopixel

Provides geo-projection and reprojection of image pixel coordinates into real-world geographic coordinates and distance, then broadcasts those results over MAVLink.

This package currently uses MAVLINK_COMMAND_LONG (message ID 76) for both deprojection requests and deprojection results. The current message definition is defined in deprojection_definitions.hpp.

Because COMMAND_LONG only exposes 7 float fields, the data is carried as raw 7×32-bit storage instead of native float semantics. The result is always returned to the component querying the service.

Current message definition:

Param
Sender (Result) storage
Receiver (Request) unpack
Type(s)

param1

Latitude in degrees × 1e7 (int32_t lat_e7) 31‒0: lat_e7

img_x (bits 0‒15), img_y (bits 16‒31)

Send: int32_t Recv: uint16_t, uint16_t

param2

Longitude in degrees × 1e7 (int32_t lon_e7) 31‒0: lon_e7

class_id (bits 0‒7), camera_id (bits 8‒15), obj_id (bits 16‒31)

Send: int32_t Recv: uint8_t, uint8_t, uint16_t

param3

Altitude in meters (float alt) 31‒0: alt

Timestamp low 32 bits (ts_lo)

Send: float Recv: uint32_t

param4

class_id (uint8_t, zero-extended) 0‒7: class_id, 8‒31: 0

Timestamp high 32 bits (ts_hi)

Send/Recv: uint32_t

param5

obj_id (uint16_t, zero-extended) 0‒15: obj_id, 16‒31: 0

Recipients[0] sysid (bits 0‒7), compid (bits 8‒15) Recipients[1] sysid (bits 16‒23), compid (bits 24‒31)

Send: uint32_t Recv: two × (uint8_t, uint8_t)

param6

Timestamp low 32 bits (ts_lo) 31‒0: ts_lo

Recipients[2] sysid (bits 0‒7), compid (bits 8‒15) Recipients[3] sysid (bits 16‒23), compid (bits 24‒31)

Send: uint32_t Recv: two × (uint8_t, uint8_t)

param7

Timestamp high 32 bits (ts_hi) 31‒0: ts_hi

Recipients[4] sysid (bits 0‒7), compid (bits 8‒15) Recipients[5] sysid (bits 16‒23), compid (bits 24‒31)

Send: uint32_t Recv: two × (uint8_t, uint8_t)

Used in: Ellipsis, Stribog NextVision


AvLedSwitch

AvLedSwitch is a lightweight MAVLink-based application used to control onboard LEDs (Here4 and indicator LEDs). It implements a partial Illuminator Protocol, allowing external systems (e.g., QGroundControl or CLI tools) to switch LEDs on or off and query their status.

Link:

Supported functionality:

  • LED control via MAV_CMD_ILLUMINATOR_ON_OFF

  • Response to ILLUMINATOR_STATUS requests

Usage:

The application starts automatically after installation. To control LEDs, send a MAVLINK_COMMAND_LONG message with command MAV_CMD_ILLUMINATOR_ON_OFF to component ID 36.

param1

Effect

1

LEDs ON

0

LEDs OFF

Used in: Stribog Siyi, Stribog NextVision

Last updated