Расширение функциональности наземной станции управления посредством 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 (встроенная поддержка скриптов) |
Многоканальность | Возможность работы с несколькими БАС одновременно |
Рисунок 1. Схема работы MAVProxy |
Ключевые возможности:
- полный контроль через командную строку;
- гибкая система модулей и плагинов;
- интеграция с внешними системами через API;
- маршрутизация MAVLink-сообщений.
3. Сборка MAVProxy
- Установка зависимостей
Перед сборкой необходимо установить:
-
Visual Studio Code (среда разработки) [6];
-
Python 3.8+ (использовалась 3.13.2, при установке отметить галочку "Add Python to PATH") [7];
-
Git (для клонирования репозитория) [8].
- Клонирование репозитория
Ссылка на клонируемый репозиторий MAVProxy: https://github.com/ArduPilot/MAVProxy [9].
cd # папка для клонирования репозитория
git clone https://github.com/ArduPilot/MAVProxy.git
- Установка Python-зависимостей
pip install -r requirements.txt
- Для корректной сборки проекта нужно в файле
.\MAVProxy\mavproxy.py
после импорта библиотекиpymavlink
добавить следующие строки, так как код из данного файла не "видит" родительскую директориюMAVProxy
:
import sys
import pathlib
sys.path.append(str(pathlib.Path(__file__).parent.parent))
Способы сборки MAVProxy
Способ 1: Запуск MAVProxy через MAVProxyWinUSB.bat
Этот метод подходит для быстрого запуска без установки.
-
В корневой директории проекта перейдите в папку
MAVProxy
. -
Откройте
MAVProxyWinUSB.bat
в текстовом редакторе. -
Проверьте параметры (например, 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
- Запустите
MAVProxyWinUSB.bat
(двойной клик).
Способ 2: Сборка установщика (использование MAVProxyWinBuild.bat)
Этот метод создает установочный .exe-файл для удобного развертывания.
-
Установите программу Inno Setup [10].
-
В корневой директории проекта перейдите в папку
windows
. -
Запустите
MAVProxyWinBuild.bat
. Установщик будет создан в каталоге./windows/output
. -
Запустите установщик и следуйте инструкциям в нём.
Сравнение методов указано в таблице 2.
Таблица 2. Сравнение методов сборки MAVProxy
Критерий | Через MAVProxyWinUSB.bat | Через MAVProxyWinBuild.bat |
---|---|---|
Сложность | Просто (требуется только Python) | Средняя (нужны Python и Inno Setup) |
Переносимость | Зависит от Python-окружения | Автономный .exe-файл |
Гибкость | Легко изменить параметры | Требуется пересборка при изменениях |
Использование | Для разработки | Для конечных пользователей |
4. Интеграция MAVProxy с программами для управления БАС
- Установите Mission Planner с официального сайта https://ardupilot.org/planner/docs/mission-planner-installation.html [3], при установке следуйте инструкциям с сайта. Mission Planner - программное обеспечение для настройки и управления ЛА, оснащённого полётным контроллером ArduPilot Mega [3]. Данное ПО при интеграции выступает в ролях графической надстройки над MAVProxy, инструмента глубокого анализа и резервного интерфейса управления. Такая интеграция особенно полезна для сложных операций, где требуется и гибкость консольного управления, и мощная визуализация.
- Запустите Mission Planner.
- Подключите по USB телеметрическую радиостанцию SiK Telemetry Radio V3 433 МГц. Запустите
MAVProxy
одним из способов:- двойным кликом по
MAVProxyWinUSB.bat
; - после установки
MAVProxy
следующей командой вcmd
:
- двойным кликом по
mavproxy --master=COM8 --out 127.0.0.1:14550
В консоли ПО должны появиться сообщения о подключении (рис. 2).
Рисунок 2. Консоль MAVProxy: слева окно для вывода информации; справа окно для ввода команд |
- MavProxy перенаправляет MAVLink-трафик на локальный UDP-порт (127.0.0.1:14550). Теперь Mission Planner можно подключить к этому порту. В Mission Planner перейдите во вкладку "Connect" (верхнее правое меню):
- в выпадающем списке выберите "UDP";
- в открывшемся окне "Listern Port" в поле укажите 14550 (рис. 3);
- нажмите кнопку "OK".
Рисунок 3. Окно "Listern Port" |
5. Расширение функциональности наземной станции управления посредством MAVProxy
Для расширения функциональности БАС через MAVProxy можно использовать как встроенные модули MAVProxy, так и внешние Python-скрипты. Добавление своих команд возможно несколькими способами [1, 11] (см. таблицу 3):
-
изменение кода MAVProxy (путем добавления новых модулей) [1];
-
использование встроенного Python-интерпретатора (через module load);
-
создание отдельного скрипта (вне MAVProxy, но с подключением к нему через MAVLink).
Таблица 3. Сравнительная характеристика методов расширения функциональности
Критерий | Пользовательский модуль MAVProxy | Встроенный Python-интерпретатор | Внешний скрипт |
---|---|---|---|
Сложность реализации | Средняя (требует знания структуры MAVProxy) | Низкая (прямые команды в консоли) | Низкая (отдельный скрипт) |
Гибкость | Высокая (полный доступ к API MAVProxy) | Ограниченная (одноразовые команды) | Высокая (интеграция с другими системами) |
Интеграция с MAVProxy | Полная (встроенные команды, автозагрузка) | Только в текущей сессии | Требует отдельного подключения |
Отладка | Удобная (логи внутри MAVProxy) | Быстрая проверка команд | Требует внешнего мониторинга |
Безопасность | Высокая (работает внутри MAVProxy) | Риск ошибок при ручном вводе | Зависит от реализации |
Недостатки | Требует перезагрузки модуля при изменениях | Не подходит для сложной логики | Доп. настройки (порты, соединения) |
6. Примеры применения MAVProxy
Пусть необходимо в дрон записать маршрут миссии, например, для следующих задач:
- мониторинг и патрулирование территорий и объектов;
- инспекция солнечных панелей и кровель и другие.
MAVProxy
включает в себя несколько команд для управления маршрутом миссии [1]. Они вводятся через командную строку (правое окно на рис. 2).
Работа с маршрутом миссии включает в себя следующие действия:
- Нужно проверить есть ли какая-либо текущая миссия (если миссии нет, то ответ пустой)
Команда:
wp list
Ответ:
- Очистить текущую миссию, если она есть (ответ всегда пустой).
Команда:
wp clear
Ответ:
- Построить маршрут миссии, например, в 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
- Проверить загрузился ли маршрут миссии в дрон. Если в ответе приведены точки нового маршрута, то миссия загружена в дрон. Видно, что при вызове данной команды 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. Литература
- Документация ArduPilot/MAVProxy. https://ardupilot.org/mavproxy/.
- Protocol Overview | MAVLink Guide. https://mavlink.io/en/about/overview.html.
- Документация ArduPilot/Mission Planner. https://ardupilot.org/planner/.
- PX4/PX4-Autopilot: PX4 Autopilot Software. https://github.com/PX4/PX4-Autopilot.
- ArduPilot - Versatile, Trusted, Open. https://ardupilot.org/.
- Visual Studio Code - Code Editing. Redefined. https://code.visualstudio.com/.
- Download Python | Python.org. https://www.python.org/downloads/.
- Git - Installing Git. https://git-scm.com/book/en/v2/Getting-Started-Installing-Git.
- Официальный репозиторий MAVProxy (GitHub). https://github.com/ArduPilot/MAVProxy.
- Inno Setup Downloads. https://jrsoftware.org/isdl.php#stable.
- Using Pymavlink Libraries (mavgen) | MAVLink Guide. https://mavlink.io/en/mavgen_python/.
- Mission Protocol. https://mavlink.io/en/services/mission.html.
- Skillfactory media - Блог/Словарь IT/CSV. https://blog.skillfactory.ru/glossary/csv-format/?ysclid=mb7qz55o5p646558387.
- Epoch & Unix Timestamp Conversion Tools. https://unixtime.org/.