Методы планирования автономных миссий беспилотных летательных аппаратов
Данный раздел будет посвящен программированию беспилотников. Рассмотрим методики составления траекторий полета для БПЛА, используя как конфигураторы и программное обеспечение наземных станций управления, так и язык Python с доступом к API прошивки бортового контроллера.
Отсутствие дополнительных датчиков (кроме гироскопа и акселерометра) в бортовом контроллере не позволяет БПЛА точно позиционироваться в пространстве. Для обеспечения стабилизации и возможности составления автономных миссий полета, а также для автоматического управления БПЛА, необходим GPS-модуль. В настоящее время наиболее популярными GPS-модулями являются Beitian BN-180 и Beitian BN-220. Подключение этих модулей осуществляется по интерфейсу UART (Universal Asynchronous Receiver-Transmitter) к бортовому контроллеру. При этом важно отметить, что RX (Receiver) модуля GPS следует подключать к TX (Transmitter) бортового контроллера, а TX модуля GPS – к RX бортового контроллера.
Настройка режимов полета
Использование GPS открывает доступ к дополнительным режимам полета. Настроить эти режимы можно в разделе «Режимы».
* ALTHOLD (режим удержания высоты). В этом режиме БПЛА будет удерживать заданную высоту. Штурвал газа отвечает за изменение высоты. Для работы данного режима необходим барометр на борту бортового контроллера.
* POSHOLD (удержание позиции). В этом режиме БПЛА удерживает заданное положение в пространстве. Корректировка положения осуществляется с помощью стиков управления.
* RTH (Возвращение домой). В этом режиме БПЛА автоматически возвращается к точке старта, которая определяется как местоположение БПЛА в момент перехода в режим ARM.
* WP (Автоматический полет по миссии). В этом режиме БПЛА выполняет заранее заданный маршрут полета.
Требования к бортовым системам управления
Постоянное развитие технологий управления полетом БПЛА предъявляет высокие требования к созданию продвинутых автопилотных систем. Такие системы должны обладать:
* Полным набором датчиков: включая гироскоп, акселерометр, барометр и магнитометр для точного определения положения и ориентации БПЛА в пространстве.
* Широким набором портов ввода-вывода: для подключения периферийных устройств, расширяющих функциональные возможности БПЛА.
* Высококачественным программным обеспечением: обеспечивающим удобное управление и доступ ко всем функциям автопилота.
Полетные контроллеры БПЛА должны быть универсальными и совместимыми с различными типами аппаратов.
Системы PX4 и Ardupilot представляют собой популярные типы программного обеспечения с открытым исходным кодом для управления беспилотными летательными аппаратами (БПЛА). Обе системы обладают широким спектром функций, необходимых для автономных полетов.
Хотя для обычного пользователя разница между PX4 и Ardupilot незначительна, Ardupilot предоставляет больше возможностей для настройки и расширения функциональности.
Для эффективной работы как PX4, так и Ardupilot требуется использование специализированных бортовых контроллеров полета. Такие контроллеры должны быть оснащены набором датчиков, включая гироскоп, акселерометр, барометр и магнитометр, для обеспечения точной ориентации и навигации БПЛА.
В частности, для PX4 и Ardupilot разработаны контроллеры типа Pixhawk. Кроме того, для реализации автоматических полетов БПЛА требуется GPS-модуль для определения местоположения.
Составление миссии в QGroundControl
QGroundControl (QGC) – это программное обеспечение для наземной станции управления, предназначенное для прошивки, настройки и формирования полетных заданий для беспилотных летательных аппаратов (БПЛА).
Основным преимуществом QGC является совместимость с PX4, однако оно также может использоваться с Ardupilot.
Процедура составления миссии:
1. Запустите QGroundControl и перейдите в раздел "Plan".
2. В открывшемся окне вы увидите интерфейс для создания миссии для автоматического полета.
Существует несколько вариантов создания миссии: GeoFence, Pattern или самый простой – создание миссии по выбранным точкам.
3. Для создания простейшей миссии в окне "Plan" сначала выберите точку взлета "Takeoff" и щелкните на карте. В правом окне задайте высоту взлета. Строка "Yaw" предназначена для выбора направления курса БПЛА.
4. Выбрав на вкладке слева точку "Waypoint", перенесите ее на карту. Введите высоту для точки и скорость. Также можно указать настройки камеры и подвеса. Повторите процедуру для всех желаемых точек.
5. В конце миссии необходимо вернуть БПЛА в точку старта, которая совпадает с точкой взлета. Выбрав на вкладке слева "Return", вы переведете БПЛА в режим "Return To Launch" и зададите маршрут на высоте, соответствующей параметру режима.
6. Для загрузки миссии в полетный контроллер нажмите кнопку "Upload" в верхней панели окна.
Создание миссий в Mission Planner
Mission Planner представляет собой мощное программное обеспечение для наземной станции управления беспилотными летательными аппаратами (БПЛА). Оно преимущественно используется с прошивкой Ardupilot. Процесс создания миссии в Mission Planner схож с QGroundControl и позволяет задавать как отдельные точки, так и полеты по полигональным площадям.
Для создания простой миссии по точкам, запустите Mission Planner и перейдите на вкладку "Plan". Щелкните правой кнопкой мыши и выберите "Insert WP" для добавления точки. Удерживая левую кнопку мыши на точке, ее положение можно скорректировать. Для первой точки в нижней панели программы выберите команду "Takeoff" ("Взлет") в графе "Команда". Далее, используя левую кнопку мыши, можно задавать положение последующих точек. В нижней части панели для каждой точки можно настроить высоту, задержку по времени и курс. Для загрузки миссии в полетный контроллер нажмите кнопку "Записать WP" в правой части окна.
Программирование автономных миссий
В то время как программы наземного управления беспилотными летательными аппаратами (БПЛА) удобны для личного использования, часто возникает потребность в разработке собственных приложений для обеспечения автономного полета.
Для реализации автономного режима управления БПЛА могут потребоваться дополнительные вычислительные ресурсы. В этом случае на борт БПЛА устанавливается вспомогательный компьютер – "компаньон". Функционал такого компьютера может быть разнообразным: от обработки изображений с использованием технологий компьютерного зрения до взаимодействия с сетевыми интерфейсами и управления БПЛА по сети Интернет. Примером такого устройства может служить Raspberry Pi.
Для унификации взаимодействия внешних устройств с бортовым контроллером БПЛА сообществом был разработан протокол коммуникации Mavlink. Mavlink – это стандартный протокол, обеспечивающий взаимодействие с беспилотными летательными аппаратами.
Данная система использует современную архитектуру "подписка-публикация" и "точка-точка" для обмена данными, которые передаются в виде тем (топиков).
Для разработки программного обеспечения автоматического полета MAVlink предоставляет API на различных языках программирования, включая Python, известный своей простотой.
В качестве API для взаимодействия с бортовым контроллером могут быть использованы MAVSDK и ROS.
ROS (Robot Operating System) - это экосистема для разработки роботов, предлагающая функции для распределенной работы. Хотя ROS является универсальным API для роботов, его оптимизация для беспилотных летательных аппаратов (БПЛА) не так высока. Кроме того, ROS требует более сложной установки необходимых пакетов и настройки.
MAVSDK - это более интуитивно понятный и оптимизированный для БПЛА API, поддерживающий больше языков программирования и операционных систем.
Использование языка Python для программирования автономного полета
Установка среды разработки
Python - высокоуровневый интерпретируемый язык программирования, характеризующийся простотой освоения и широким спектром применения благодаря наличию множества библиотек. Для его функционирования требуется установка интерпретатора – программы, отвечающей за выполнение файлов Python. Последнюю версию интерпретатора для вашего дистрибутива можно скачать на официальном сайте python.org. Пользователи Linux (например, Ubuntu) могут обнаружить, что Python уже предустановлен в их операционной системе. При установке Python необходимо добавить интерпретатор в переменную окружения.
Установка PX4 Toolchain с симулятором
Разработка приложений для беспилотных летательных аппаратов (БПЛА) требует специализированного программного обеспечения, включающего инструменты для создания и тестирования, а также симулятор. Рассмотрим установку такого ПО под прошивку PX4.
Оптимальной операционной системой для установки является Ubuntu, но также возможна установка на Windows 10, 11 или Windows Subsystem for Linux (WSL). Информацию по установке WSL можно найти на сайте Microsoft. Процесс установки PX4 Toolchain в обоих вариантах схож. Рассмотрим вариант с использованием Ubuntu.
Запустите терминал и выполните следующую команду для загрузки репозитория PX4:
`git clone https://github.com/PX4/PX4-Autopilot.git --recursive`
После скачивания установите все необходимые компоненты, введя команду bash с указанием пути к файлу:
`bash ./PX4-Autopilot/Tools/setup/ubuntu.sh`
Перезагрузите компьютер. При использовании WSL достаточно закрыть терминал системы Ubuntu, введя команду выхода и завершения запущенных дистрибутивов.
Установка MAVSDK
MAVSDK представляет собой набор библиотек для работы с Mavlink-системами, такими как БПЛА, наземные станции управления и подвесы. Библиотека предоставляет доступ к функциям БПЛА через удобный API, включая информацию о состоянии, телеметрию, контроль миссий и управление перемещением.
Установка библиотек и управление дроном в симуляторе
Для установки необходимых библиотек под Python следует воспользоваться командной строкой и выполнить следующие команды:
Установка библиотеки mavsdk:
`pip3 install mavsdk`
Установка библиотеки aioconsole:
`pip3 install aioconsole`
В дальнейшем будет рассмотрено управление виртуальным беспилотным летательным аппаратом (БПЛА) с помощью симулятора jMavSim.
Для запуска симулятора необходимо ввести команду:
`make px4_sitl jmavsim`
Управление БПЛА осуществляется в терминальном окне путем ввода команд после `px4>`. Например, команда `commander takeoff` переводит дрон в состояние готовности к полету и задает высоту 2,5 метра. Для посадки БПЛА используется команда `commander land`.
Далее будет рассмотрена разработка программы управления БПЛА с использованием API MAVSDK. Для написания программы можно воспользоваться текстовым редактором nano, введя в командной строке:
`nano <имя файла>.py`
В начале программы необходимо импортировать следующие библиотеки:
```python
#!/usr/bin/env python3
import asyncio
from mavsdk import System
```
В данной программе используется асинхронный подход, реализуемый с помощью библиотеки `asyncio`. Для взаимодействия с дроном MAVSDK задействуется класс `System` из одноименной библиотеки.
Основная функция программы, обозначенная как `run()`, выполняет подключение к беспилотному летательному аппарату (БПЛА). С помощью объекта `drone` класса `System` устанавливается соединение с БПЛА.
После подключения осуществляется проверка состояния соединения посредством цикла `async for`. При успешном подключении выводится соответствующее сообщение, и цикл прерывается.
Далее проверяется наличие глобальной позиции БПЛА, получаемой с помощью симулированного GPS. Цикл `async for` проходит по данным о состоянии здоровья дрона (`health`). Если глобальная позиция и позиция дома доступны, выводится подтверждающее сообщение, и цикл завершается.
Наконец, программа готова к выполнению команды "ARM" для БПЛА.
Более подробно! Глава MAVSDK использует асинхронность, поэтому необходима библиотека asyncio.
С помощью второй команды импортируем класс System из биб-лиотеки MAVSDK.
Далее объявим входную функцию, через которую будем запус-кать нашу программу: async def run(): Далее, сделав отступ (синтаксис в Python требует наличие от-ступов), напишем саму функцию. Через переменную drone будем работать с функциями класса System и произведем подключение к нашему БПЛА: drone = System() await drone.connect() Сделаем проверку подключения к БПЛА следующим образом: print("Waiting for drone to connect...") async for state in drone.core.connection_state(): if state.is_connected: print(f"-- Connected to drone!") break В первой строчке выводим информацию для пользователя о том, что мы ожидаем подключения. Далее запускаем цикл, в котором хранятся данные о состоянии подключения. Если появляется подключение, то просто выходим из цикла.
Также необходимо убедиться в том, что получена глобальная позиция с помощью симулируемого GPS.
print("Waiting for drone to have a global position estimate...") async for health in drone.telemetry.health(): if health.is_global_position_ok and health.is_home_position_ok: print("-- Global position estimate OK") break Теперь можно прописать состояние ARM БПЛА следующей командой:
await drone.action.arm()
И затем сам взлет: await drone.action.takeoff()
Поставим задержку в 10 секунд: await asyncio.sleep(10)
И выполним посадку БПЛА: await drone.action.land()
В конце программы запишем строчки, необходимые для кор-ректной работы кода: if __name__ == "__main__": asyncio.run(run()) Данная конструкция означает, что функция run() будет выпол-няться только тогда, когда будет запущен текущий файл.
Полный код программы: #!/usr/bin/env python3
import asyncio from mavsdk import System
async def run():
drone = System() await drone.connect(system_address="udp://:14540")
print("Waiting for drone to have a global position estimate...") async for health in drone.telemetry.health(): if health.is_global_position_ok and health.is_home_position_ok: print("-- Global position estimate OK") break
print("-- Arming") await drone.action.arm()
print("-- Taking off") await drone.action.takeoff()
await asyncio.sleep(10)
print("-- Landing") await drone.action.land()
status_text_task.cancel()
async def print_status_text(drone): try: async for status_text in drone.telemetry.status_text(): print(f"Status: {status_text.type}: {status_text.text}") except asyncio.CancelledError: return
if __name__ == "__main__": asyncio.run(run())
Сохраните файл сочетанием клавиш Ctrl+X, далее Y и нажмите Enter.
Запуск программы осуществляется в новом терминале командой: python <имя файла>.py
Пример скачивания лог-файла с помощью Python
Теперь рассмотрим функционал, на который способен MAVSDK. С помощью API можно скачивать лог-файлы полета.
Реализуем данную программу следующим образом.
Начало программы не будет отличаться от предыдущей, добавим лишь им-порт пакета sys для работы с файловым выводом: #!/usr/bin/env python3
import asyncio
from mavsdk
import System
import sys
Начало функции run() также не отличается: async def run():
drone =
System()
await drone.
Анализ типичных ошибок и потенциальных затруднений.
В некоторых случаях может потребоваться установить полетный контроллер не в стандартной ориентации относительно курса БПЛА. Для корректировки требуется внести изменения в прошивку. Перейдите на вкладку «Конфигурация» и в окне «Расположение платы и датчиков» задайте значения углов для соответствующих осей.
Например, если полетный контроллер установлен с поворотом на 90 градусов по часовой стрелке, то в поле «Yaw градусы» необходимо указать значение –90. Для проверки правильности ориентации перейдите на вкладку «Система». Отклонения БПЛА на экране должны соответствовать отклонениям реального дрона.
Некорректное назначение каналов управления
Проверьте корректность назначения каналов на вкладке «Приёмник». При отклонении стиков на радиоуправлении убедитесь, что канал управления изменяется в соответствии с показаниями на экране.
Например, при отклонении левого стика вверх канал «Throttle» должен изменять свое значение, а при отклонении правого стика вправо канал «Roll» также должен увеличиваться.
Если БПЛА не реагирует на движения стиков или реакция не соответствует ожидаемой, то каналы назначены некорректно. В этом случае измените расположение букв «R», «E», «T», «A» в окне «Таблица каналов».
Непредсказуемое поведение дрона при потере связи
Режим Failsafe
В случае потери связи с радиоуправлением, беспилотный летательный аппарат (БПЛА) переходит в режим Failsafe. Это критичное для безопасности режима, который необходимо настроить как на пульте управления, так и в прошивке бортового контроллера.
Настройка Failsafe
* На пульте управления: В настройках модели ("Model Setup") перейдите к настройкам приемника. В поле "Failsafe" выберите "No Pulses". При этой настройке, при потере связи с передатчиком, приемник прекратит отправку сигналов на бортовой контроллер.
* В конфигураторе: Переключитесь в "Экспертный режим" и на вкладке "Failsafe" настройте сценарий поведения БПЛА при потере сигнала:
1. "Drop" - отключает моторы БПЛА.
2. "Land" - переводит БПЛА в режим выравнивания и подаёт минимальный сигнал на моторы для посадки.
Отсутствие вывода телеметрии на OSD и пульт управления
Многие прошивки поддерживают вывод полетной информации на экран. Для этого приемник должен поддерживать передачу телеметрии (обычно по отдельному проводу, например S.Port у FrSky).
Соедините контакт телеметрии с свободным UART-портом бортового контроллера. В настройках конфигуратора выберите тип телеметрии (SmartPort для FrSky) и включите "Telemetry" на вкладке "Приемник".
Вывод телеметрической информации на экран FPV-очков настраивается на вкладке "OSD".
Инструкция по настройке вывода телеметрической информации и особенность режима ARM
Для отображения данных с борта беспилотного летательного аппарата (БПЛА) на пульте управления необходимо выполнить следующие действия:
1. Включите БПЛА и пульт дистанционного управления.
2. Перейдите в меню "Telemetry" на вашем пульте и выберите опцию "Discover Sensors".
3. На вкладке "Display" настройте отображение необходимых датчиков на экране пульта.
К наиболее важным параметрам относятся: уровень заряда аккумулятора (АКБ), качество связи (RSSI) и высота полета (при наличии барометра на плате контроллера).
Важно: При переключении в режим "ARM" БПЛА может кратковременно увеличить обороты моторов. Это связано с функцией "Air Mode", которая стремится стабилизировать аппарат в воздухе. В отсутствие винтов и перемещения дрона, контроллер пытается добиться баланса путем увеличения оборотов двигателей.




Комментариев нет:
Отправить комментарий