Протокол управления MiddleAUV и MiddleUSV

Лучшим источником информации на эту тему остаются исходники.

Общие принципы

Приложение (например, MUR IDE) подключается к аппарату (как правило IP-адрес 10.3.141.1) по протоколу WebSocket, порт 2090. При открытом подключении, аппарат будет периодически отсылать телеметрию.

Тип сообщения задаётся полем type, например: {"type": "remote"}

Виды исходящих пакетов (управление аппаратом)

run - запуск скрипта

type: 'run',
filename: "имя файла",
content: "закодированный в Base64 скрипт"

stop - остановка скрипта

type: 'stop'

remote - включить режим телеуправления

type: 'remote'

В режиме телеуправления также открываются видеопотоки. Передача видео идёт другим способом.

stop_remote - выключить режим телеуправления

type: 'stop_remote'

Иногда не срабатывает из-за того, что видеопотоки забивают WiFi-сеть.

thrust - телеуправление: задать тягу движкам

Используется в режиме телеуправления, если нет регуляторов (полностью ручное упарвление)

type: 'thrust',
power: [
        firstUpwardMotor,
        firstForwardMotor,
        secondForwardMotor,
        secondUpwardMotor,
        0,
        0,
        0,
        0,
        0
    ]

remote_control - телеуправление: задать оси и регуляторы

Полуавтоматическое управление с регуляторами по курсу и глубине

type: 'remote_control',
axes: [
        x,
        y,
        z,
        0
    ],
yaw: true,
depth: false

Виды входящих пакетов (информация с аппарата)

telemetry - телеметрия

vehicle_type:
            - он либо отсутствует (значит AUV)
            - либо USV для лодки

running     - выполняет скрипт
remote      - режим телеуправления
mission     - mission, это для лодки

yaw         - навигационно-пилотажный датчик
pitch
roll

battery
temperature

gps_satellites  - GPS, только на MiddleUSV
gps_lng
gps_lat
gps_alt
gps_speed

output - вывод в консоли

stdout, stderr - соответствующий вывод из консоли.

Видео с камер (GStreamer)

Видео передается через GStreamer pipeline на тот же IP, который подключился по WebSocket. Видео кодируется в JPEG, заворачивается в RTP и передаётся по UDP, порты 5000 и 5001 на две камеры.

Чтобы открыть видеопоток в VLC (или для записи) можно сделать так: создать SDP-файл (например, mur-camera0.sdp) со следующим содержанием, который можно открыть в VLC:

c=IN IP4 127.0.0.1
m=video 5000 RTP/AVP 26
a=rtpmap:26 JPEG/90000

Если нужно в целях отладки симулировать видеопоток с аппарата без него (т.е. локально запустить аналогичный видеопоток, который можно посмотреть в MUR IDE), то можно воспользоваться такой командой:

gst-launch-1.0 -v filesrc location=video.mp4 ! decodebin ! jpegenc ! rtpjpegpay ! udpsink host=0.0.0.0 port=5000

Выдернуть один кадр в JPEG-файл:

gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,media=video,payload=26,clock-rate=90000,encoding-name=JPEG,framerate=1/1 ! rtpjpegdepay ! multifilesink location="img.jpg"