- Опыт использование AR.Drone 2.0 в связке с Windows
- Почему AR.Drone 2.0, а не DJI Phantom, или Walkera
- Как я приучал AR.Drone к Windows
- Как и с помощью чего я летаю
- DIY автономный дрон с управлением через интернет
- Требования к БПЛА
- Выбор полетного контроллера
- Автономная зарядка
- Посадка “в точку”
- Висеть, как вкопанный
- Минимальный комплект электроники
- Полезная нагрузка
- Питание
- Моторы и пропеллеры
- Аккумулятор
- Компоновка
- Бокс для зарядки
- Вход в Aeronet: запуск автономного квадрокоптера в виртуальной среде
- Установка и запуск jMAVSim на Linux Ubuntu
- Установка и запуск jMAVSim на Windows
- Полёты с помощью программы наземной станции QGroundControl
- Программирование автономного полёта с помощью mavros
Опыт использование AR.Drone 2.0 в связке с Windows
Почему AR.Drone 2.0, а не DJI Phantom, или Walkera
На рынке присутствует огромное количество квадрокоптеров есть, и крохотные, но дешёвые Hubsan’ы, и вполне крупные DJI Phantom который считаются эталоном квадрокоптера, и оптимальные по цене Walkera, и много другие модели. Но чем же среди всего этого разнообразия лично для меня выделяется AR.Drone, разумеется это управление по WI-FI с возмужанью передачи видео в реальном времени по нему же. Т.е. AR.Drone это единственный квадрокоптер который можно купить и без паяльника подключить к компьютеру и тут уж делать можно все что угодно, начиная от просто управления с джойстиком или мышкой и заканчивая автономными полетами на основе видео с камеры и 3D реконструкцией пространства.
Как я приучал AR.Drone к Windows
Как и с помощью чего я летаю
Первой полет под управлением производился с ноутбука и геймпада, в целом все приемлемо за исключением веса ноутбука и его габаритов. Более удобный вариант оказался использование планшета на Windows 8.1 который легко помещается в рюкзак вместе с Drone, аккумуляторами и всеми прочему аксессуарами. Общий набор для полета выглядит так.
Все это отлично умещается в небольшой рюкзак от 13ти дюймового ноутбука и весит 1 килограмм. Управление аналогично mode 2 и на фоне более мелких квадрокоптеров Dron’ом очень легко управлять и в целом он очень стабилен (видео зависания на землей представлено ниже). После подключение и проверки работы планшет обычно отправляется в рюкзак который висит за спиной и управление происходит по визуальному контакту без использования FPV, а иногда планшет отдается в руки детей, которые непременно возникают рядом, и они смотрят «прямую трансляцию с неба».
DIY автономный дрон с управлением через интернет
Сначала я написал длинное предисловие откуда взялась такая задача, а потом оно мне показалось скучным и я его удалил.
Итак, задача: создание автономного БПЛА для мониторинга состояния линий электропередач (ЛЭП).
Так как:
Список дефектов для обнаружения на ЛЭП.
Требования к БПЛА
Понятно, что эта задача не на один год, но я начну, а кто-нибудь, может быть, подхватит и продолжит.
Для примера, готовые промышленные варианты автономных комплексов: раз, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать. Я всем написал запросы как потенциальный покупатель, чтобы узнать цены. Из них готовых к продаже: 2; готовых к продаже в Россию: 0.
Выбор полетного контроллера
Так как мне нужно транслировать видео и телеметрию через интернет, то сразу приходит на ум поставить на дрон микрокомпьютер с 4G модемом и камерой, и сделать из этого комплекта web-трансляцию. Нашлись вот такие решения: раз, два, три. Это обычные одноплатники с внешним USB 4G модемом и камерой. Для кодирования и трансляции видео используется gstreamer. Но эти штуки сами по себе дроном управлять не умеют, их нужно использовать совместно с полетным контроллером.
Полетный контроллер — это мозг дрона. Он следит за состоянием датчиков положения (гироскоп, акселерометр, компас), GPS-координатами, положением ручек на пульте управления и, исходя из этих данных, управляет моторами, чтобы висеть в одной точке или куда-то лететь. Полетный контроллер нужно будет как-то связать с бортовым компьютером, чтобы можно было загрузить полетное задание или указать произвольную точку куда лететь и когда включать камеру.
В продаже можно найти много разных контроллеров сильно отличающихся друг от друга по цене и функционалу. Какие-то из них работают на своем родном ПО, а какие-то используют open-source ПО, такое как Ardupilot и его форк PX4.
С Ardupilot я игрался еще на 8-битных атмегах, в которых не было USB-bootloader’а, а прошивались они на программаторе. С тех пор с ним не сталкивался и был приятно удивлен, когда узнал, что сейчас он может работать на 64-битных компьютерах с Linux, у него огромное сообщество пользователей как хобби, так и профи, длинный список поддерживаемых “из коробки” датчиков и расписанные планы на 2018-2019 годы. За это время он успел перерасти в проект DroneCode, а потом и отсоединиться от него.
На первый взгляд в нем как раз реализованы все необходимые функции: автоматический взлет и посадка, загрузка полетных заданий, есть desktop и мобильные приложения под все основные семейства ОС. Программы управления (GCS — Ground Control Station) общаются с бортовым контроллером короткими сообщениями по открытому протоколу MAVLink через комплект радиомодемов (дрон шлет телеметрию, GCS шлет команды управления). Подозреваю, что эти сообщения получится пустить через интернет.
Взглянем на список поддерживаемых контроллеров и что-нибудь подберем. Вариантов там полтора десятка от мала до велика и с разными характеристиками.
Из всего того многообразия контроллеров мне понравилось несколько вариантов:
Самый легкий комплект (84 г) получается из микрокомпьютера Raspberry Pi Zero W (9 г), контроллера Erle PXFMini (15 г), родного внешнего GNSS модуля (46 г) и дополнительного USB-концентратора (14 г).
Рабочий процессор в этом комплекте один — на Raspberry Pi. На нем висит управление ШИМ регуляторов моторов, считывание показаний датчиков, ОС Linux со всеми потрохами и декодирование видео с камеры. Так как в Pi Zero не предусмотрены USB порты, то в этом варианте приходится использовать внешний концентратор. IMU датчики и вход питания без резервирования.
Следующий комплект (97 г) от гонконгской компании с русскими фамилиями в команде разработчиков — контроллер Emlid Edge (59 г) с GNSS модулем (38 г). GNSS модуль работает по протоколу UAVCAN и дополнительно оснащен магнитометром и датчиком воздушного давления. За ШИМ здесь отвечает отдельный процессор ARM Cortex-M3, ОС Linux крутится на основном ARM Cortex-A53 quad-core.
В контроллере имеется HDMI видеовход, что позволяет подключить к нему напрямую любую камеру с таким выходом, например GoPro 4 или 5. Относительно высокая стоимость объясняется дальнобойными wifi-приемопередатчиками в комплекте (до 2 км с трансляцией HD-видео). Вес бортового модуля (52 г) в общей таблице не включен, так как мне нужна связь по 4G, однако такой вариант можно иметь в виду: из дальнобойного wifi можно сделать запасной канал связи через стационарный роутер с проводным интернетом.
Следующий вариант (98 г) состоит из знаменитого микрокомпьютера Raspberry Pi 3 (45 г) с контроллером-шилдом Navio 2 (23 г) от той же Emlid и внешней GNSS-антенны (30 г). На контроллере стоит отдельный процессор Cortex-M3 для управления ШИМ на 14 каналах и расшифровки входящих SBUS и PPM сигналов от приемника. Он, в свою очередь, управляется через драйвер в ядре ОС Linux, которая крутится на Raspberry.
Контроллер оснащен парой раздельных IMU датчиков (акселерометр, гироскоп, магнитометр) MPU9250 и LSM9DS1, одним датчиком воздушного давления и GNSS-модулем U-blox NEO-M8N, который видит GPS, Глонасс и BeiDou с внешней антенной через разъем MCX.
Запитывать этот “пирог” от 5 вольт можно одновременно с трех сторон, которые работают как дублирующие друг друга независимые источники: основной разъем питания на шилде, PWM серво выходы, micro-USB на Raspberry.
Контроллер Erle Brain 3 (100 г) с внешним GPS модулем (45 г) по своим весу, цене и набору датчиков смотрится в таблице так, что даже фото сюда вставлять не буду.
Далее у нас самый надежный и самый тяжелый комплект (150 г), который состоит из популярного полетного контроллера PixHawk 2 Cube (80 г) с открытой архитектурой и компьютера Raspberry Pi 3. Вместо Raspberry в этом случае можно использовать любой легкий одноплатник, например, Odroid XU4, NVIDIA Jetson или любой другой с нужными интерфейсами и подходящим весом. 
В самом PixHawk установлено 2 процессора: первый 32-битный STM32F427 Cortex M4 — основной, на котором работает ОС реального времени (RTOS) NuttX и второй резервный (failsafe) 32-битный STM32F103. Контроллер сделан в виде модулей: в кубе установлены процессоры и датчики IMU (на антивибрационном креплении, да еще и с подогревом), а на основу выведены питание и разъемы на всю периферию. Предполагается, что основы могут быть разными и все желающие могут разработать свою собственную под специфические требования, на которую можно потом поставить готовый куб. Есть, кстати, готовый вариант с разъемом под установку микрокомпьютера Intel Edison. Но, так как, Intel больше эти компьютеры не выпускает, то и в этом комплекте в качестве бортового компьютера будет Raspberry.
Raspberry используется как дополнительный компьютер для связи с интернетом и на нем можно запускать любые ресурсоемкие задачи (например, распознавание образов в OpenCV), не боясь, что сбои в таком процессе “повесят” критичные функции, такие как управление моторами.
Автономная зарядка
Как можно видеть в готовых вариантах выше, существует несколько подходов к подготовке автономного дрона к следующему полету: зарядка аккумулятора через контактные площадки, бесконтактная индукционная зарядка и механизированная замена аккумулятора с последующей его зарядкой на станции.
У каждого метода есть свои плюсы и минусы, о них я напишу отдельно, но в любом случае, для их функционирования дрон должен уметь приземляться в нужную точку практически с сантиметровой точностью.
Посадка “в точку”
Для точной посадки можно использовать стандартную камеру бортового компьютера, визуальные маркеры и OpenCV для их распознавания. Вот один из вариантов решения, который можно нагуглить. Еще один свежий появился, когда я писал эту статью. Но распознавание образов достаточно трудоемкий процесс для Raspberry, и без особой необходимости загружать его не хочется. Также качество распознавания будет сильно зависеть от материала из чего сделан маркер и условий освещенности. Желательно, чтобы это был отдельный датчик и отдавал готовые координаты нужной визуальной точки, независимо от наличия и угла падения света. И такой есть в списке поддерживаемого оборудования Ardupilot, называется IR-Lock.
Airobotics из списка выше также использует это решение. Он сделан на основе модуля камеры с открытым кодом Pixy CMUcam5. Этот модуль снабжен камерой и процессором, и его можно “научить” распознавать определенные образы объектов, а, затем, на выходе получать готовые координаты этих объектов на изображении.
Зная координаты распознанного образа на изображении и расстояние до него, полетный контроллер вычисляет на какое расстояние и в какую сторону нужно переместить дрон.
Модификация IR-Lock состоит в том, что в качестве маркера, который нужно распознать используется ИК фонарь из светодиодов, а на камере обычные линзы заменены на те, что пропускают только ИК свет. В итоге, при любом освещении, камера видит свечение фонаря белым цветом на черном фоне (и больше ничего), что сильно повышает точность распознавания.
Висеть, как вкопанный
Чтобы дрон умел висеть на одном месте и не “плавать”, одного только GPS не достаточно. К сожалению, из-за состояния атмосферы координаты с приемников GPS могут плавать в пределах десятков метров и для сантиметровой точности нужно использовать корректирующие системы GPS RTK. Эта система использует наземную неподвижную станцию, как эталон отклонений координат, и радиосвязь с бортом, чтобы отправить туда значения этих отклонений. Такая штука обязательно нужна для съемки фотопланов с последующей склейкой в большие карты, а для целей висения на месте я пока ограничусь оптическим датчиком PX4Flow.
Работает он по такому же принципу, как и оптическая мышь. В отличие от IR-Lock, он не распознает конкретный образ и в Ardupilot они работают в разных полетных режимах. Изображение с камеры анализируется на смещение 400 раз в секунду, а вычисленные значения смещения могут быть прочитаны контроллером по протоколу I2C. Датчик (open-hardware) весит 15 грамм и имеет все необходимое у себя на плате: процессор 168 MHz Cortex M4F CPU (128 + 64 KB RAM), оптический сенсор 752×480 MT9V034 и 3-х осевой гироскоп L3GD20. Для его нормальной работы также рекомендуется использовать лазерный дальномер, вместо ультразвукового. Хотя на самом модуле предусмотрен разъем как раз для УЗ датчика.
Минимальный комплект электроники
Общий вес получается 199 г. Все компоненты работают от 5 Вольт и потребляют в режиме трансляции видео почти 2 Ампера (10 Ватт).
В наборе присутствует ультразвуковой датчик расстояния, который будет смотреть вперед на предмет препятствий. Стереозрение и круговые лидары я оставил на потом, если в них возникнет реальная необходимость.
Полезная нагрузка
Так как родная камера от Raspberry делает средние по качеству фото, а также не умеет захватывать фото одновременно с видео, то она будет использоваться только для web-трансляции, а в качестве основной камеры нужна подходящая для выявления дефектов на ЛЭП. Для большей части позиций из списка выявляемых дефектов подойдут GoPro Hero 5 Session, мультиспектральная Parrot Sequoia, двойная Sentera Double 4K и инфракрасная FLIR Vue Pro. Каждая из них весит около 100 г.
Для стабилизации камеры с целью улучшения качества снимков в нагрузку с ней полетит 2х или 3х осевой подвес.
Простые 3-х осевые подвесы весят около 160 г и питаются от 12 Вольт, имеют рабочий ток при таком напряжении около 50 мА и максимальный ток 700 мА при заклинивании моторов.
Питание
Для питания всей электроники необходимы источники на 5 Вольт (минимум 2,2 Ампера) и 12 Вольт (минимум 1 Ампер). С учетом резервного питания полетного контроллера, нужно два независимых источника на 5 Вольт. Сделать систему питания можно из отдельных модулей подходящего номинала или найти готовый “3 в 1”, например такой (24 г, макс входное напряжение до 28 Вольт, выходы по 3А). К нему будет подключен датчик тока (22 г), чтобы была возможность измерять расход мАч на аккумуляторе.
Комплект электроники + камера + подвес + система питания весят 505 г.
Моторы и пропеллеры
На многих профессиональных дронах я видел моторы и пропеллеры компании T-Motor. Видимо, не спроста. В документации Ardupilot они также рекомендованы как силовая установка для профессиональных дронов. Поэтому, поищем подходящие моторы у них.
Чтобы дрон летал долго, нужны моторы с максимальным КПД. Эффективность связки мотора и пропеллера измеряется количеством тяги в граммах на 1 Ватт затраченной электроэнергии.
Чтобы узнать какой мотор самый подходящий, нужно знать общий вес полностью собранного дрона с учетом рамы, аккумулятора и самих моторов с винтами. Аккумулятор нужен такой, чтобы его хватило минут на 30 полета. Рама нужна такая, чтобы на нее все поместилось и винты ничего не задевали.
Слишком много неизвестных, поэтому воспользуюсь онлайн калькулятором для квадрокоптеров E-calc.
Поигравшись в калькулятор, я выбрал моторы Antigravity 4004 KV300 (53 г) с винтами 15х5 (27 г). В оптимальном режиме при напряжении питания 24 Вольта такой комплект тянет 474 грамма при токе 1,4 А. Эффективность получается 14.11 г/Ватт, отношение тяги к собственному весу = 5.9:1. На полном ходу тяга составляет 1311 грамм при токе 7,5 А. Коптер будет с четырьмя моторами, то есть квадро. Оптимальный взлетный вес = (474 г * 4 мотора) = 1896 г, максимальный (с учетом тяговооруженности 2:1) = (1311 г * 4 мотора) / 2 = 2622 г.
Моторы управляются регуляторами оборотов. Напряжение питания моторов = 24 Вольта, максимальный рабочий ток = 7,5 А, поэтому нужен регулятор под такое напряжение и с рабочим током, с учетом запаса, минимум 10А. У T-Motor самый легкий регулятор (7 г без проводов) под такое напряжение — это FPV 35A-32bit 3-6S. Он сделан на основе популярной прошивки BLHeli-32, с закрытым кодом, но с широкими возможностями настроек и большим числом аналогов.
ВМГ (винто-моторная группа), состоящая из моторов, пропеллеров и регуляторов (по 4 шт каждого) весит 346 г.
Вместе с электроникой и полезной нагрузкой (346 + 505) получается 851 г. С учетом крепежа, проводов и разъемов (прикинем +100 г) = 951 г.
При оптимальном весе, на раму и аккумулятор остается (1896 — 951) = 945 г. При максимальном (2622 — 951) = 1671 г.
Рассчитаем минимальный размер рамы, чтобы выбранные 15-дюймовые пропеллеры не мешали друг другу создавать тягу. Размеры рамы производители указывают в расстоянии между осями моторов, расположенных по диагонали друг от друга.
По картинке можно узнать гипотенузу, которая вычисляется из катета, равного сумме диаметра винта и расстояния между пропеллерами. Соседние лопасти 15-дюймового винта будут крутиться в 1 миллиметре друг от друга при диагонали рамы 540 мм. Добавим немного пространства и размер подходящей рамы будет равен примерно 600-700 мм.
В продаже найти таких можно много, например, раз: 600мм и 750г, два: 650мм и 450г, три: 690 и 675г, четыре: 650мм и 750г. Все они отличаются исполнением и наличием складных элементов (шасси, лучи) для удобства транспортировки.
Выбор конкретного экземпляра для своих нужд пока отложу, для дальнейшего расчета буду иметь в виду вес рамы равный 450 г.
Остается аккумулятор весом 495 г для оптимального веса и 1221 г для максимального.
Аккумулятор
Для выбора аккумулятора нужно знать какой он должен отдавать ток.
На полном ходу двигатели будут “есть” 30А (7,5А * 4 мотора), а электроника примерно 0,45А (10 Ватт). С учетом небольшого запаса округлим минимальный рабочий ток аккумулятора в 35А. Для Li-Po батарей с высокой токоотдачей в 30С минимальная емкость будет равна 1,2 Ач (35/30), а для более легких Li-Po и Li-Ion с токоотдачей в 10С минимальная емкость 3,5 Ач (35/10).
Как вариант, сборка 6S2P из Li-Ion Sony VTC6 с BMS весит примерно 630 г (при емкости 6 Ач). С этим аккумулятором дрон будет весить 2031 г, что больше оптимального на 135 г, но в пределах максимального. Теперь посчитаем на какое время коптер сможет зависнуть при идеальных условиях. При общем весе в 2031 г на каждый мотор приходится 508 г. Взглянем на характеристики мотора и найдем потребляемый ток при такой тяге. Он примерно будет равен 1,6А. 4 мотора и электроника дадут в сумме 6,85A (1,6 * 4 + 0,45). С учетом разрядки аккумулятора до 20% получится (6 Ач * 80% / (6,85 A)) = 0,7 часа или 42 минуты.
Компоновка
Пока я выбирал подходящую раму и думал как все это на ней размещать и чем крепить, пришел к выводу, что проще будет нарисовать несколько деталей и заказать 3D-печать из пластика и фрезеровку из карбона. Пару готовых железок и крепеж можно заказать на Алиэкспрессе.
Немного поэкспериментировав с компоновкой и центром тяжести, получилась вот такая рама:
Она состоит из карбоновых трубок и пластин, деталей из алюминия и крепежа из титана. Расчетный вес рамы получился 350 г при диагонали 700 мм. 3D-модель рамы и список деталей.
Полностью собранная модель (без проводов):
Общий вес коптера с электроникой, аккумулятором Li-Ion 6S2P и проводами должен получится 1931 г.
Да, мне тоже показалось, что дрон получился слишком голым для автономного варианта и мелкий дождик легко намочит бортовую электронику. Поэтому добавил немного пластика:
Вес пустой рамы с корпусом 384 г, общий вес 2020 г, расчетное время висения на одной зарядке (разряд аккумулятора до 20%): 44 минуты.
Бокс для зарядки
Бокс для зарядки будет сделан из алюминиевого профиля, крепежной фурнитуры и алюминиевых сендвич-панелей. В нем будут установлены роутер, компьютер, погодные датчики и камера с видом на посадочную зону. Я решил сделать покатую крышу из двух створок, чтобы зимой на ней не скапливался снег и не мешал открыванию. Механизм открывания створок до конца еще не продуман, а также не определена система зарядки (нуждаюсь в подсказках).
В следующей статье я расскажу как настроить и запустить дрон через интернет с помощью GUI или командной строки, про варианты систем зарядки из которых я сейчас выбираю, ПО для управления коптером и анализа снимков и почему мой первый полет через интернет продлился так недолго:
Вход в Aeronet: запуск автономного квадрокоптера в виртуальной среде
Полетать на квадрокоптере сейчас, при желании, может, пожалуй, каждый. Но чтобы решить задачу автономного управления, чтобы не нужно было двигать стиками пульта и постоянно следить за дроном – в такой постановке решение может требовать немало ресурсов: купить, собрать, спаять, настроить, взлететь, уронить, и после падения — возврат в начало цикла.
Обучая судей/преподавателей 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»:
Перелогинимся в систему, для того чтобы изменения вступили в силу.
Установка среды разработки (development toolchain) для Pixhawk/NuttX, включая jmavsim, осуществляется автоматически с помощью скрипта ubuntu_sim_nuttx.sh. Нужно скачать скрипт в каталог пользователя и запустить его с помощью команды
На все задаваемые скриптом вопросы ответить положительно.
По окончании выполнения скрипта перезагрузить компьютер.
Нам осталось скачать исходный код контроллера, управляющий полётом, и осуществить его сборку.
Клонируем репозиторий ПО полётного контроллера PX4 с github:
В папке Firmware теперь у нас лежит полный исходный код, который исполняется в полётном контроллере (и в симуляторе). В дальнейшем он может пригодится как для целей изучения, так и для внесения в него правок. Переходим в скопированную папку Firmware репозитория:
Осуществляем компиляцию и запуск симулятора:
Процесс первой компиляции занимает некоторое время. После успешного завершения на экране появится консоль PX4:
Дрон можно отправить в полёт, введя в консоли команду:
Установка и запуск 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 можно клонировать репозиторий и запустить симулятор с помощью команд:
После компиляции на экране появится консоль PX4 и окно симулятора:
У меня на Windows пока не отображаются небо и деревья, вместо них – чёрный фон, о чём сообщено разработчикам симулятора.
Полёты с помощью программы наземной станции 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 адреса и порта компьютера, на котором запущен симулятор:
Если симулятор запущен не на том хосте, на котором работает jMAVSim – перед подключением mavros нужно разрешить рассылку mavlink сообщений по сети с помощью команды param set MAV_BROADCAST 1 в консоли jMAVSim. При выполнении команды выводится ip-адрес хоста, используемый для протокола mavlink. Порт можно узнать с помощью команды mavlink status в консоли симулятора:
Успешность подключения к полётному контроллеру следует проверить с помощью команды:
Если подключение успешно – в консоли начнут появляться сообщения т.н. mavlink heartbeat, примерно раз в секунду:
Если сообщения не появляются/не обновляются/поле Connected = False – связь с полётным контроллером не установлена, и следует разобраться, почему.
На момент написания статьи, под Windows после команды param set MAV_BROADCAST 1 в консоли jMAVSim начинали в цикле выводиться сообщения:
Чтобы симулятор заработал корректно под Windows, следует дополнить строку 1029 файла src/modules/mavlink/mavlink_main.cpp:
О данной проблеме сообщено разработчикам, возможно, её исправят в последующих релизах.
После успешного подключения, запустить дрон в автономный полёт можно с помощью следующих команд консоли ROS-системы:
После выполнения последней команды виртуальный дрон должен взлететь и зависнуть на высоте 5 метров:
Также запуск дрона можно осуществить с помощью несложного кода на Питоне:
Приведённый код использует вызов тех же сервисов ROS, что и пример вызова из командной строки.
В процессе отладки данного примера столкнулся с особенностью симулятора jMAVSim – для нормальной работы ему требуется производительный процессор. На виртуалке Linux он успевал просчитывать только 10 FPS, и падал сразу после взлёта. На ноутбуке, пока я писал статью – он также периодически терял управление/падал. Помогло питание ноутбука от сети – т.к. при питании от батарейки включается режим энергосбережения, что занижает производительность процессора, которая сказывается непосредственно на работе симулятора.
На основании приведённых примеров желающие могут сами разработать программы автономных полётов (по квадрату, по кругу, по произвольной траектории, и т.д.). Выполнение таких упражнений может быть полезным для подготовки к программированию автономных миссий на реальном квадрокоптере.







