Виртуальная MAVLink-камера COEX DuoCam
Полётные контроллеры поддерживают разные способы взаимодействия с внешними камерами, включая протокол MAVLink. Обычно коммуникация с помощью данного протокола требует использования UART-порта на полётном контроллере, но есть возможность работать с камерой в основном потоке MAVLink-телеметрии с БПЛА.
Утилита duocam-mavlink
отвечает за работу виртуальной MAVLink-камеры и встраивается в общую телеметрию между полётным контроллером и QGroundControl.
На блок-схеме прямыми линиями обозначены взаимодействия между блоками, пунктирными линиями уточняется характер взаимодействия.
Протокол взаимодействия находится в процессе модификации. В новых версиях планируется избавиться от прямой отправки значений параметров и их количества от
duocam-mavlink
к QGroundControl.
duocam-camera
и duocam-mavlink
обмениваются данными с помощью очередей POSIX. Имена очередей и формат сообщений доступен в репозитории duocam-common.
Для объединения блоков, взаимодействующих через MAVLink, можно использовать любой MAVLink-коммутатор/маршрутизатор, который либо позволяет отключить таблицу коммутации, либо заполняет её по схеме MAVLink ID:Component ID (например, cmavnode
, mavlink-fast-switch
, mavlink-switch
).
При использовании
mavlink-fast-switch
требуется использоватьmavlink-serial-bridge
, либо любой другой мост для передачи MAVLink из последовательного порта в UDP, так какmavlink-fast-switch
работает только с UDP.
Конфигурационный файл
Для редактирования конфигурационного файла необходимо извлечь microSD-карту из RPi4, вставить в кард-ридер своего компьютера (от операционной системы требуется возможность читать файловую систему ext4), открыть файл по адресу <microSD>/etc/duocam/mavlink.yaml
.
Также можно зайти по SSH на работающую RPi4 и отредактировать конфигурационный файл внутри системы по тому же пути.
Для корректной работы duocam-mavlink
требуется MAVLink ID полётного контроллера (параметр vehicle_id
) и MAVLink ID
QGroundControl (параметр qgc_vehicle_id
). duocam-mavlink
ожидает телеметрию на UDP (параметры ip
и port
) и отправляет сообщения HEARTBEAT с частотой, согласно параметру heartbeat_frequency
, представляясь, как компонент полётного контроллера MAV_COMP_ID_CAMERA
.
Максимальная задержка от duocam-camera
задаётся параметром command_timeout
.
Если система DuoCam используется для полётов внутри помещений, то должен быть включен параметр no_gps
.
Пример конфигурационного файла
# MAVLink vehicle ID that owns the camera
vehicle_id: 1
# Enable this flag for indoor use
no_gps: False
# QGC vehicle ID
qgc_vehicle_id: 255
mavlink:
# IP address of the interface to listen port on (0.0.0.0 for all interfaces)
ip: 127.0.0.1
# UDP port
port: 14540
# Heartbeat frequency (Hz)
heartbeat_frequency: 1.0
# Camera driver command timeout (s)
command_timeout: 3.0
Пример конфигурационного файла для mavlink-fast-switch
# MAVLink endpoints
endpoints:
# UAV endpoint
- name: "uav"
local:
port: 14588
# DuoCam MAVLink endpoint
- name: "duocam-mavlink"
remote:
ip: "127.0.0.1"
port: 14540
# GCS endpoint
- name: "gcs"
remote:
ip: "127.0.0.1"
port: 14550
# Enable MAVLink ID table
# HINT: Can't use this feature with duocam
id-table: False
Пример конфигурационного файла для mavlink-serial-bridge
# Serial device settings
serial:
# Device file
device: "/dev/ttyS0"
# Baudrate
baudrate: 57600
# Flow control (hardware, none)
flow: none
# Software serial TX buffer (bytes) (2048 by default)
tx-buffer: 2048
# UDP port settings
udp:
# Remote host settings (optional, listening mode if not presented)
remote:
ip: 127.0.0.1
port: 14588
# Lock remote host on the initial value (optional, False by default)
lock: True
# Broadcast mode (optional, False by default)
broadcast: False
# Local settings (optional, all interfaces and a random port by default)
local:
# Local IP address (0.0.0.0 to listen on all interfaces) (optional, all interfaces by default)
ip: 127.0.0.1
# Local UDP port (0 to select a random free port) (optional, 0 by default)
port: 0