Расширение функциональности наземной станции управления посредством MAVProxy - DRONE520/RF-BAS-COMMON GitHub Wiki

1. Введение

Эффективное управление беспилотными авиационными системами (БАС) требует надежных и гибких наземных станций, способных не только отправлять команды, но и обрабатывать телеметрию, интегрироваться с дополнительными сервисами и обеспечивать расширенную аналитику в реальном времени.

Одним из мощных инструментов для расширения функциональности наземных станций является MAVProxy [1] – легковесный, но мощный прокси-сервер для протокола MAVLink [2], который обеспечивает маршрутизацию сообщений, логирование данных, интеграцию с внешними приложениями и поддержку множества модулей для автоматизации задач. Использование MAVProxy позволяет значительно повысить гибкость и производительность наземной станции управления, добавляя возможности удаленного доступа, обработки данных через Python-скрипты, взаимодействия с API сторонних сервисов и многого другого.

В рамках проектно-технологической практики было необходимо:

  • изучить разнообразное ПО, которые позволяют управлять воздушными и маломерными транспортными средствами со своего компьютера, подключая соответствующие устройства и создавая путевые точки для автоматизированных маршрутов движения;

  • научиться собирать MAVProxy;

  • интегрировать MAVProxy с MissionPlanner [3];

  • рассмотреть различные способы расширения функциональности наземной станции управления посредством MAVProxy.

2. Назначение и характеристики MAVProxy

MAVProxy — это консольная программа для управления дронами через протокол MAVLink. Она поддерживает подключение к автономным БПЛА (PX4 [4], ArduPilot [5]), передачу телеметрии, управление вручную и автоматическими миссиями (см. таблицу 1). Управление дроном осуществляется через командную строку (рис. 1). ПО поддерживает сценарии автоматизации, телеметрию и интеграцию с другими станциями наземного управления.

Таблица 1. Основные характеристики MAVProxy

Характеристика Описание
Поддержка протоколов MAVLink 1.0/2.0, совместимость с ArduPilot, PX4 и другими автопилотами
Интерфейсы подключения UDP, TCP, Serial (USB/UART), Bluetooth, SITL
Платформы Windows, Linux, macOS (требуется Python)
Архитектура Модульная система с поддержкой Python-расширений
Основные функции Управление БПЛА, телеметрия, миссии, параметры, логирование
Логирование данных Поддержка форматов .tlog, .bin, CSV
Язык программирования Python (встроенная поддержка скриптов)
Многоканальность Возможность работы с несколькими БАС одновременно
image
Рисунок 1. Схема работы MAVProxy

Ключевые возможности:

  • полный контроль через командную строку;
  • гибкая система модулей и плагинов;
  • интеграция с внешними системами через API;
  • маршрутизация MAVLink-сообщений.

3. Сборка MAVProxy

  1. Установка зависимостей
    Перед сборкой необходимо установить:
  • Visual Studio Code (среда разработки) [6];

  • Python 3.8+ (использовалась 3.13.2, при установке отметить галочку "Add Python to PATH") [7];

  • Git (для клонирования репозитория) [8].

  1. Клонирование репозитория

Ссылка на клонируемый репозиторий MAVProxy: https://github.com/ArduPilot/MAVProxy [9].

cd # папка для клонирования репозитория
git clone https://github.com/ArduPilot/MAVProxy.git
  1. Установка Python-зависимостей
pip install -r requirements.txt
  1. Для корректной сборки проекта нужно в файле .\MAVProxy\mavproxy.py после импорта библиотеки pymavlink добавить следующие строки, так как код из данного файла не "видит" родительскую директорию MAVProxy:
import sys
import pathlib
sys.path.append(str(pathlib.Path(__file__).parent.parent))

Способы сборки MAVProxy

Способ 1: Запуск MAVProxy через MAVProxyWinUSB.bat

Этот метод подходит для быстрого запуска без установки.

  1. В корневой директории проекта перейдите в папку MAVProxy.

  2. Откройте MAVProxyWinUSB.bat в текстовом редакторе.

  3. Проверьте параметры (например, COM-порт):

cd ..\
python.exe -m pip install --upgrade build . --user
python.exe .\MAVProxy\mavproxy.py --console --master=COM8 --out 127.0.0.1:14550
pause
  1. Запустите MAVProxyWinUSB.bat (двойной клик).

Способ 2: Сборка установщика (использование MAVProxyWinBuild.bat)

Этот метод создает установочный .exe-файл для удобного развертывания.

  1. Установите программу Inno Setup [10].

  2. В корневой директории проекта перейдите в папку windows.

  3. Запустите MAVProxyWinBuild.bat. Установщик будет создан в каталоге ./windows/output.

  4. Запустите установщик и следуйте инструкциям в нём.

Сравнение методов указано в таблице 2.

Таблица 2. Сравнение методов сборки MAVProxy

Критерий Через MAVProxyWinUSB.bat Через MAVProxyWinBuild.bat
Сложность Просто (требуется только Python) Средняя (нужны Python и Inno Setup)
Переносимость Зависит от Python-окружения Автономный .exe-файл
Гибкость Легко изменить параметры Требуется пересборка при изменениях
Использование Для разработки Для конечных пользователей

4. Интеграция MAVProxy с программами для управления БАС

  1. Установите Mission Planner с официального сайта https://ardupilot.org/planner/docs/mission-planner-installation.html [3], при установке следуйте инструкциям с сайта. Mission Planner - программное обеспечение для настройки и управления ЛА, оснащённого полётным контроллером ArduPilot Mega [3]. Данное ПО при интеграции выступает в ролях графической надстройки над MAVProxy, инструмента глубокого анализа и резервного интерфейса управления. Такая интеграция особенно полезна для сложных операций, где требуется и гибкость консольного управления, и мощная визуализация.
  2. Запустите Mission Planner.
  3. Подключите по USB телеметрическую радиостанцию SiK Telemetry Radio V3 433 МГц. Запустите MAVProxy одним из способов:
    • двойным кликом по MAVProxyWinUSB.bat;
    • после установки MAVProxy следующей командой в cmd:
mavproxy --master=COM8 --out 127.0.0.1:14550

В консоли ПО должны появиться сообщения о подключении (рис. 2).

консоль mavproxy
Рисунок 2. Консоль MAVProxy: слева окно для вывода информации; справа окно для ввода команд
  1. MavProxy перенаправляет MAVLink-трафик на локальный UDP-порт (127.0.0.1:14550). Теперь Mission Planner можно подключить к этому порту. В Mission Planner перейдите во вкладку "Connect" (верхнее правое меню):
    • в выпадающем списке выберите "UDP";
    • в открывшемся окне "Listern Port" в поле укажите 14550 (рис. 3);
    • нажмите кнопку "OK".
image
Рисунок 3. Окно "Listern Port"

5. Расширение функциональности наземной станции управления посредством MAVProxy

Для расширения функциональности БАС через MAVProxy можно использовать как встроенные модули MAVProxy, так и внешние Python-скрипты. Добавление своих команд возможно несколькими способами [1, 11] (см. таблицу 3):

  1. изменение кода MAVProxy (путем добавления новых модулей) [1];

  2. использование встроенного Python-интерпретатора (через module load);

  3. создание отдельного скрипта (вне MAVProxy, но с подключением к нему через MAVLink).

Таблица 3. Сравнительная характеристика методов расширения функциональности

Критерий Пользовательский модуль MAVProxy Встроенный Python-интерпретатор Внешний скрипт
Сложность реализации Средняя (требует знания структуры MAVProxy) Низкая (прямые команды в консоли) Низкая (отдельный скрипт)
Гибкость Высокая (полный доступ к API MAVProxy) Ограниченная (одноразовые команды) Высокая (интеграция с другими системами)
Интеграция с MAVProxy Полная (встроенные команды, автозагрузка) Только в текущей сессии Требует отдельного подключения
Отладка Удобная (логи внутри MAVProxy) Быстрая проверка команд Требует внешнего мониторинга
Безопасность Высокая (работает внутри MAVProxy) Риск ошибок при ручном вводе Зависит от реализации
Недостатки Требует перезагрузки модуля при изменениях Не подходит для сложной логики Доп. настройки (порты, соединения)

6. Примеры применения MAVProxy

Пусть необходимо в дрон записать маршрут миссии, например, для следующих задач:

  • мониторинг и патрулирование территорий и объектов;
  • инспекция солнечных панелей и кровель и другие.

MAVProxy включает в себя несколько команд для управления маршрутом миссии [1]. Они вводятся через командную строку (правое окно на рис. 2).

Работа с маршрутом миссии включает в себя следующие действия:

  1. Нужно проверить есть ли какая-либо текущая миссия (если миссии нет, то ответ пустой)
Команда:
wp list
Ответ:
  1. Очистить текущую миссию, если она есть (ответ всегда пустой).
Команда:
wp clear
Ответ:
  1. Построить маршрут миссии, например, в Mission Planer и сохранить в файл формата .waypoints [12] в рабочей директории (в данной работе было сохранено в директории: "C:\Users\Drone\Desktop" следующий маршрут PIPA.waypoints c 2 точками). После этого загрузить маршрут в дрон.
Команда:
wp load C:\Users\Drone\Desktop\PIPA.waypoints
Ответ:
Loaded 2 waypoints from C:\Users\Drone\Desktop\PIPA.waypoints
Loaded 2 waypoints in 0.50s
  1. Проверить загрузился ли маршрут миссии в дрон. Если в ответе приведены точки нового маршрута, то миссия загружена в дрон. Видно, что при вызове данной команды MAVProxy автоматически сохраняет данные в файл формата .txt в директорию "C:\Users\Drone\Desktop\Магистратура 1 курс\MAVProxy"
Команда:
wp list
Ответ:
16 5 57.7979440000 45.5273440000 100.000000 p1=0.0 p2=0.0 p3=0.0 p4=0.0 cur=1 auto=1
16 6 57.0407300000 43.3300780000 100.000000 p1=0.0 p2=0.0 p3=0.0 p4=0.0 cur=0 auto=1
Saved 2 waypoints to way.txt
Saved waypoints to way.txt

Телеметрия дрона была автоматически сохранена в файл my_telemetry.tlog [3] с помощью MAVProxy. Для анализа данные были конвертированы в формат .csv [13] с использованием утилиты mavlogdump.py из библиотеки pymavlink [2]. Для выделения информации об ориентации дрона применялся фильтр по сообщению ATTITUDE [1]. Конвертация выполнялась следующей командой из директории "C:\Users\Drone\Desktop\Магистратура 1 курс\MAVProxy":

python .venv\Scripts\mavlogdump.py --format csv --types ATTITUDE my_telemetry.tlog > output.csv

В файле output.csv получена таблица со следующими параметрами (см. таблицу 4).

Таблица 4. Поля сообщения ATTITUDE

Поле Единицы измерения Описание
timestamp секунды (float) Временная метка в формате Unix time [14] (время получения сообщения на наземной станции). Это не время с дрона, а системное время компьютера.
ATTITUDE.time_boot_ms миллисекунды (int) Время с момента запуска системы дрона (boot time), в миллисекундах. Используется для точной синхронизации данных внутри дрона.
ATTITUDE.roll радианы Угол крена (roll) — наклон дрона вокруг продольной оси (ось X). Значение положительное, если правое крыло/мотор ниже левого.
ATTITUDE.pitch радианы Угол тангажа (pitch) — наклон дрона вокруг поперечной оси (ось Y). Положительный угол, когда нос дрона поднят.
ATTITUDE.yaw радианы Угол рыскания (yaw) — направление, в котором смотрит дрон, относительно севера (магнитного или истинного, зависит от настроек). 0 радиан = север.
ATTITUDE.rollspeed рад/с Угловая скорость вокруг оси X (крен). Как быстро дрон поворачивается вокруг своей продольной оси.
ATTITUDE.pitchspeed рад/с Угловая скорость вокруг оси Y (тангаж).
ATTITUDE.yawspeed рад/с Угловая скорость вокруг оси Z (рыскание). Насколько быстро дрон меняет направление.

В результате получен CSV-файл с данными о пространственной ориентации дрона и его угловых скоростях, которые могут быть использованы для анализа его движения и стабилизации.

7. Заключение

В ходе проектно-технологической практики была изучена работа с наземными станциями управления БАС и рассмотрены возможности их расширения с использованием MAVProxy. Данный инструмент продемонстрировал свою эффективность в управлении БПЛА, маршрутизации MAVLink-сообщений, интеграции с другими системами (такими как Mission Planner) и возможности автоматизации задач через Python-скрипты.

Были успешно выполнены поставленные задачи:

  • изучено программное обеспечение для управления БАС;

  • освоена сборка MAVProxy различными способами (через скрипты и создание установочного пакета);

  • реализована интеграция MAVProxy с Mission Planner для совместного управления дроном;

  • рассмотрены методы расширения функциональности наземной станции, включая использование встроенных модулей и внешних скриптов;

  • освоена работа с миссиями и телеметрией дрона через MAVProxy.

Таким образом, MAVProxy является перспективным решением для повышения эффективности наземных станций управления БАС, а его модульная архитектура и поддержка Python открывают широкие возможности для дальнейшей кастомизации и интеграции в сложные программно-аппаратные комплексы. В будущем имеет смысл углубиться в разработку собственных модулей и скриптов для автоматизации специфических задач, а также исследовать возможности интеграции с облачными сервисами и системами машинного обучения для более интеллектуального управления БПЛА.

8. Аббревиатуры и сокращения

  • БАС - беспилотная авиационная система
  • БПЛА - беспилотный летательный аппарат
  • ЛА - летательный аппарат

9. Литература

  1. Документация ArduPilot/MAVProxy. https://ardupilot.org/mavproxy/.
  2. Protocol Overview | MAVLink Guide. https://mavlink.io/en/about/overview.html.
  3. Документация ArduPilot/Mission Planner. https://ardupilot.org/planner/.
  4. PX4/PX4-Autopilot: PX4 Autopilot Software. https://github.com/PX4/PX4-Autopilot.
  5. ArduPilot - Versatile, Trusted, Open. https://ardupilot.org/.
  6. Visual Studio Code - Code Editing. Redefined. https://code.visualstudio.com/.
  7. Download Python | Python.org. https://www.python.org/downloads/.
  8. Git - Installing Git. https://git-scm.com/book/en/v2/Getting-Started-Installing-Git.
  9. Официальный репозиторий MAVProxy (GitHub). https://github.com/ArduPilot/MAVProxy.
  10. Inno Setup Downloads. https://jrsoftware.org/isdl.php#stable.
  11. Using Pymavlink Libraries (mavgen) | MAVLink Guide. https://mavlink.io/en/mavgen_python/.
  12. Mission Protocol. https://mavlink.io/en/services/mission.html.
  13. Skillfactory media - Блог/Словарь IT/CSV. https://blog.skillfactory.ru/glossary/csv-format/?ysclid=mb7qz55o5p646558387.
  14. Epoch & Unix Timestamp Conversion Tools. https://unixtime.org/.