Software Components
System Dependencies
The following packages are installed by the release setup.
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
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.
Mavlink
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.3is 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:
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 MediaMTX 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.
mediamtx.yml
yaml
—
MediaMTX YAML config file for the payload
Config file per build:
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 documentation.
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 Manual 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-addressin 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.
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):
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_RECTANGLEorMAV_CMD_CAMERA_TRACK_POINTStop tracking with MAVLink
MAV_CMD_CAMERA_STOP_TRACKINGSends 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, andMAV_CMD_CAMERA_TRACK_POINT, as well asCAMERA_TRACKING_IMAGE_STATUS, are acting as component ID100.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: doodleorradio_type: viulinxdoodle_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=doodleViulinx:
AV_RADIO_TYPE=viulinxOptional 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:
AvRadioStatusexposes 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 RSSIremrssi: wearable RSSItxbuf: channel bandwidth usagenoise: drone noiseremnoise: wearable noiserxerrors: currently set frequencyfixed: drone MCS index
ArduPilot stream filtering:
When
AvRadioStatusruns 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_etbased on received radio data, which is usually not desirable for payload radio status telemetry.Filter the radio message out in
mavlink-routerso 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:
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_OFFResponse to
ILLUMINATOR_STATUSrequests
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
