Полетать на квадрокоптере сейчас, при желании, может, пожалуй, каждый. Но чтобы решить задачу автономного управления, чтобы не нужно было двигать стиками пульта и постоянно следить за дроном – в такой постановке решение может требовать немало ресурсов: купить, собрать, спаять, настроить, взлететь, уронить, и после падения — возврат в начало цикла.
Обучая судей/преподавателей Aeronet на нашем проекте, мы столкнулись с потребностью упрощённого «входа в тему» программирования беспилотных аппаратов для преподавателей робототехники/информатики, которые уже обладают набором базовых знаний.
Существует простой способ изучить азы программирования полётов дрона – виртуальная среда симуляции, пошаговый пример использования которой мы и рассмотрим в нашей статье.
Для прокачки базовых навыков программирования дрона не нужно ничего покупать – достаточно использовать симулятор дрона jMAVSim проекта PX4. PX4 – мощный набор ПО с открытым исходным кодом, предназначенный для использования на различных беспилотных транспортных средствах, как летающих, так и ездящих по земле. Исходные коды ПО проекта лежат на Гитхабе.
Изначально в качестве среды разработки авторами PX4 рекомендуется Linux Ubuntu LTS. Также есть поддержка Mac. В этом году появилась среда симуляции и разработки под Windows в Cygwin, что может упростить жизнь Российским учебным заведениям, которые используют Windows в классах информатики.
Далее мы рассмотрим процесс установки, сборки и запуска симулятора под Linux и под Windows.
Установка и запуск jMAVSim на Linux Ubuntu
Разработчики PX4 в качестве стандартной системы рекомендуют Linux Ubuntu 16.04 LTS. 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:
Дрон можно отправить в полёт, введя в консоли команду:
pxh> commander takeoff
Посадка дрона – команда commander land
, остановка симуляции – CTRL+C или команда shutdown
.
Установка и запуск jMAVSim на Windows
Набор инструментов PX4 Cygwin появился в 2018 году. Это наиболее производительный способ для компиляции/разработки PX4 под Windows. Для установки – качаем и запускаем установочный файл с Гитхаба или Амазона.
По умолчанию 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 и окно симулятора:
У меня на Windows пока не отображаются небо и деревья, вместо них – чёрный фон, о чём сообщено разработчикам симулятора.
Команды консоли для управления дроном те же: взлёт — commander takeoff
, посадка – commander land
, остановка симуляции – CTRL+C или команда shutdown
.
Полёты с помощью программы наземной станции QGroundControl
Программа QGroundControl позволяет полностью настраивать дроны на платформах PX4 или ArduPilot, а также планировать и выполнять автономные полёты вне помещений по GPS.
Код программы полностью открыт, и она работает на платформах Windows, OS X, Linux, iOS и Android. Установочный файл под нужную платформу можно скачать в разделе Download сайта программы.
Для Windows скачиваем и запускаем вот этот файл.
После установки и запуска, если у нас на компьютере уже запущен jMAVSim – программа подключится к нему автоматически.
Запустить дрон в полёт можно с помощью кнопки Fly-Takeoff, посадить – Land. Также можно выполнить виртуальный полёт по точкам GPS:
Программирование автономного полёта с помощью mavros
Управление виртуальным дроном jMAVSim возможно по протоколу mavlink, который описан в нескольких статьях (например 1, 2). Для осуществления mavlink-коммуникации мы будем использовать пакет mavros системы ROS (robot operating system).
Разработчики 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"
Если симулятор запущен не на том хосте, на котором работает jMAVSim – перед подключением mavros нужно разрешить рассылку mavlink сообщений по сети с помощью команды param set MAV_BROADCAST 1
в консоли jMAVSim. При выполнении команды выводится ip-адрес хоста, используемый для протокола mavlink. Порт можно узнать с помощью команды mavlink status
в консоли симулятора:
Успешность подключения к полётному контроллеру следует проверить с помощью команды:
rostopic echo /mavros/state
Если подключение успешно – в консоли начнут появляться сообщения т.н. 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 раз в секунду целевую точку для полёта дрона в режиме OFFBOARD. Для того, чтоб дрон не «вываливался» из режима автономного полёта OFFBOARD, необходимо осуществлять публикацию целевой точки всё время, несколько раз в секунду:
rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0"
- Переводим дрон в режим OFFBOARD (в новой отдельной сессии терминала):
rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'"
- Отправляем команду перевести дрон в режим полёта (т.е. «заармить»):
rosservice call /mavros/cmd/arming "value: true"
После выполнения последней команды виртуальный дрон должен взлететь и зависнуть на высоте 5 метров:
Также запуск дрона можно осуществить с помощью несложного кода на Питоне:
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
.
В процессе отладки данного примера столкнулся с особенностью симулятора jMAVSim – для нормальной работы ему требуется производительный процессор. На виртуалке Linux он успевал просчитывать только 10 FPS, и падал сразу после взлёта. На ноутбуке, пока я писал статью – он также периодически терял управление/падал. Помогло питание ноутбука от сети – т.к. при питании от батарейки включается режим энергосбережения, что занижает производительность процессора, которая сказывается непосредственно на работе симулятора.
На основании приведённых примеров желающие могут сами разработать программы автономных полётов (по квадрату, по кругу, по произвольной траектории, и т.д.). Выполнение таких упражнений может быть полезным для подготовки к программированию автономных миссий на реальном квадрокоптере.
Желаем всем успешных полётов!
Ссылки:
Комментарии (4)
VereNick
26.12.2018 14:42Как то я не сильно верю в работоспособность этого. Выложи какое-нибудь видео, как это работает.
CopterSpace Автор
26.12.2018 14:43В чуть более усложнённом варианте выглядело вот так: yadi.sk/i/LB_pfZLt3QDZzV
shalm
В моей стимовской библиотеке есть такая прога. В ней эмулируется интерфейс бетафлай и можно своим пультом рулить. Но я не уверен, что она подойдёт для Ваших задач по изучению программирования автономных полётов, а поучиться летать на дроне и настраивать бетафлай позволяет.
CopterSpace Автор
Спасибо за ссылку. Эмулятор FPV нам также интересен, т.к. у нас есть в линейке FPV модуль, а тренировать новичков на эмуляторе намного экономичнее, чем реальные дроны колошматить.