Хабрахабр

[Из песочницы] Вход в Aeronet: запуск автономного квадрокоптера в виртуальной среде

Но чтобы решить задачу автономного управления, чтобы не нужно было двигать стиками пульта и постоянно следить за дроном – в такой постановке решение может требовать немало ресурсов: купить, собрать, спаять, настроить, взлететь, уронить, и после падения — возврат в начало цикла. Полетать на квадрокоптере сейчас, при желании, может, пожалуй, каждый.

Обучая судей/преподавателей Aeronet на нашем проекте, мы столкнулись с потребностью упрощённого «входа в тему» программирования беспилотных аппаратов для преподавателей робототехники/информатики, которые уже обладают набором базовых знаний.

Существует простой способ изучить азы программирования полётов дрона – виртуальная среда симуляции, пошаговый пример использования которой мы и рассмотрим в нашей статье.

PX4 – мощный набор ПО с открытым исходным кодом, предназначенный для использования на различных беспилотных транспортных средствах, как летающих, так и ездящих по земле. Для прокачки базовых навыков программирования дрона не нужно ничего покупать – достаточно использовать симулятор дрона jMAVSim проекта PX4. Исходные коды ПО проекта лежат на Гитхабе.

Также есть поддержка Mac. Изначально в качестве среды разработки авторами PX4 рекомендуется Linux Ubuntu LTS. В этом году появилась среда симуляции и разработки под Windows в Cygwin, что может упростить жизнь Российским учебным заведениям, которые используют Windows в классах информатики.

Далее мы рассмотрим процесс установки, сборки и запуска симулятора под Linux и под Windows.

Установка и запуск jMAVSim на Linux Ubuntu

04 LTS. Разработчики PX4 в качестве стандартной системы рекомендуют Linux Ubuntu 16. Linux позволяет производить сборку пакета PX4 под все поддерживаемые системы (аппаратные платформы на базе NuttX, Qualcomm Snapdragon Flight, Linux, среды симуляции, ROS).

Первым делом добавляем пользователя в группу «dialout»:

sudo usermod -a -G dialout $USER

Перелогинимся в систему, для того чтобы изменения вступили в силу.

Нужно скачать скрипт в каталог пользователя и запустить его с помощью команды Установка среды разработки (development toolchain) для Pixhawk/NuttX, включая jmavsim, осуществляется автоматически с помощью скрипта ubuntu_sim_nuttx.sh.

source ubuntu_sim_nuttx.sh

На все задаваемые скриптом вопросы ответить положительно.

По окончании выполнения скрипта перезагрузить компьютер.

Нам осталось скачать исходный код контроллера, управляющий полётом, и осуществить его сборку.

Клонируем репозиторий ПО полётного контроллера PX4 с github:

git clone https://github.com/PX4/Firmware.git

В дальнейшем он может пригодится как для целей изучения, так и для внесения в него правок. В папке Firmware теперь у нас лежит полный исходный код, который исполняется в полётном контроллере (и в симуляторе). Переходим в скопированную папку Firmware репозитория:

cd src/Firmware

Осуществляем компиляцию и запуск симулятора:

make px4_sitl jmavsim

После успешного завершения на экране появится консоль PX4: Процесс первой компиляции занимает некоторое время.

Консоль PX4

Дрон можно отправить в полёт, введя в консоли команду:

pxh> commander takeoff

Витруальный дрон в полёте

Посадка дрона – команда commander land, остановка симуляции – CTRL+C или команда shutdown.

Установка и запуск jMAVSim на Windows

Это наиболее производительный способ для компиляции/разработки PX4 под Windows. Набор инструментов PX4 Cygwin появился в 2018 году. Для установки – качаем и запускаем установочный файл с Гитхаба или Амазона.

По умолчанию toolchain устанавливается в папку C:\PX4.

На последнем шаге инсталлятора можно отметить галочку «clone the PX4 repository, build and run simulation with jMAVSim» (клонировать репозиторий PX4, скомпилировать и запустить симулятор jMAVSim).

Запуск среды разработки в Cygwin осуществляется с помощью файла run-console.bat в каталоге установки (по умолчанию, C:\PX4).

Если забыли отметить галочку запуска jMAVSim в процессе установки – в Cygwin можно клонировать репозиторий и запустить симулятор с помощью команд:

git clone --recursive -j8 https://github.com/PX4/Firmware.git
cd Firmware
make px4_sitl jmavsim

После компиляции на экране появится консоль PX4 и окно симулятора:

Окно симулятора jMAVSim под Windows

У меня на Windows пока не отображаются небо и деревья, вместо них – чёрный фон, о чём сообщено разработчикам симулятора.

Команды консоли для управления дроном те же: взлёт — commander takeoff, посадка – commander land, остановка симуляции – CTRL+C или команда shutdown.

Полёты с помощью программы наземной станции QGroundControl

Программа QGroundControl позволяет полностью настраивать дроны на платформах PX4 или ArduPilot, а также планировать и выполнять автономные полёты вне помещений по GPS.

Установочный файл под нужную платформу можно скачать в разделе Download сайта программы. Код программы полностью открыт, и она работает на платформах Windows, OS X, Linux, iOS и Android.

Для Windows скачиваем и запускаем вот этот файл.
После установки и запуска, если у нас на компьютере уже запущен jMAVSim – программа подключится к нему автоматически.

Также можно выполнить виртуальный полёт по точкам GPS: Запустить дрон в полёт можно с помощью кнопки Fly-Takeoff, посадить – Land.

QGroundControl

Программирование автономного полёта с помощью mavros

Для осуществления mavlink-коммуникации мы будем использовать пакет mavros системы ROS (robot operating system). Управление виртуальным дроном jMAVSim возможно по протоколу mavlink, который описан в нескольких статьях (например 1, 2).

Разработчики PX4 рекомендуют использовать ROS Kinetic.

Пакет mavros обеспечивает связь по протоколу MAVLink между компьютером, на котором работает ROS (например, виртуалка с Linux, или Raspberry PI) и полётным контроллером (реальным или в среде симулятора).

Пакет mavros устанавливается вместе с другими пакетами в ходе полной установки ROS Kinetic.

Запуск пакета mavros с подключением к симулятору осуществляется командой roslaunch, с указанием ip адреса и порта компьютера, на котором запущен симулятор:

roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557"

При выполнении команды выводится ip-адрес хоста, используемый для протокола mavlink. Если симулятор запущен не на том хосте, на котором работает jMAVSim – перед подключением mavros нужно разрешить рассылку mavlink сообщений по сети с помощью команды param set MAV_BROADCAST 1 в консоли jMAVSim. Порт можно узнать с помощью команды mavlink status в консоли симулятора:

Mavlink status

Успешность подключения к полётному контроллеру следует проверить с помощью команды:

rostopic echo /mavros/state

mavlink heartbeat, примерно раз в секунду: Если подключение успешно – в консоли начнут появляться сообщения т.н.

mavlink heartbeat

Если сообщения не появляются/не обновляются/поле Connected = False – связь с полётным контроллером не установлена, и следует разобраться, почему.

На момент написания статьи, под Windows после команды param set MAV_BROADCAST 1 в консоли jMAVSim начинали в цикле выводиться сообщения:

WARN [mavlink] getting required buffer size failed.

Чтобы симулятор заработал корректно под Windows, следует дополнить строку 1029 файла src/modules/mavlink/mavlink_main.cpp:

#if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__)

И перекомпилировать/перезапустить симулятор командой make px4_sitl jmavsim.

О данной проблеме сообщено разработчикам, возможно, её исправят в последующих релизах.

После успешного подключения, запустить дрон в автономный полёт можно с помощью следующих команд консоли ROS-системы:

После выполнения последней команды виртуальный дрон должен взлететь и зависнуть на высоте 5 метров:

Flying jMAVSim

Также запуск дрона можно осуществить с помощью несложного кода на Питоне:

import rospy
from geometry_msgs.msg import PoseStamped
from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True)
rate=rospy.Rate(5)
setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10)
arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool)
set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode)
setpt=PoseStamped()
setpt.pose.position.z=5
for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep()
set_mode(0,"OFFBOARD")
arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep()

Приведённый код использует вызов тех же сервисов ROS, что и пример вызова из командной строки.

Код нужно скопировать в текстовый файл, например, fly_jmavsim.py, и запустить его на выполнение из командной строки командой python fly_jmavsim.py.

На виртуалке Linux он успевал просчитывать только 10 FPS, и падал сразу после взлёта. В процессе отладки данного примера столкнулся с особенностью симулятора jMAVSim – для нормальной работы ему требуется производительный процессор. Помогло питание ноутбука от сети – т.к. На ноутбуке, пока я писал статью – он также периодически терял управление/падал. при питании от батарейки включается режим энергосбережения, что занижает производительность процессора, которая сказывается непосредственно на работе симулятора.

Выполнение таких упражнений может быть полезным для подготовки к программированию автономных миссий на реальном квадрокоптере. На основании приведённых примеров желающие могут сами разработать программы автономных полётов (по квадрату, по кругу, по произвольной траектории, и т.д.).

Желаем всем успешных полётов!

Ссылки:

Robot Operating System (ROS)
Автопилот PX4

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть