Хабрахабр

[Из песочницы] DIY автономный дрон с управлением через интернет

image

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

Итак, задача: создание автономного БПЛА для мониторинга состояния линий электропередач (ЛЭП).
Так как:

  1. это хобби-проект и я могу сильно ошибаться в расчетах
  2. летающие предметы представляют опасность для живых существ и их имущества,


то эту статью следует воспринимать только как расширяющую кругозор, а не руководство к действию.

Список дефектов для обнаружения на ЛЭП.

Требования к БПЛА

  • Вертикальный взлет и посадка (без катапульт и парашютов), то есть коптер
  • Умеет взлетать, лететь по заданным точкам, возвращаться обратно и садиться в автоматическом режиме
  • Редактировать полетное задание, давать команду на взлет и на посадку можно из любой точки мира
  • Трансляция телеметрии и видео в реальном времени через интернет
  • Загрузка на сервер фото и видео с бортовой камеры в процессе или после полета
  • Зарядка или механизированная замена аккумулятора без участия человека.

А также два противоречащих друг другу требования:

  • Надежная электроника (если где-то упадет, считай потерял)
  • Относительно низкая стоимость эксперимента (если где-то упадет, считай потерял)

Степень автономности в идеале хочется фантастическую: дрон сам летает по заранее спланированному маршруту, загружает фото на сервер, ПО на сервере выявляет дефекты по фото и формирует заявку ремонтной бригаде с координатами мест проведения работ. Сам дрон не должен требовать к себе внимания человека до окончания рабочего ресурса какой-нибудь детали, например, аккумулятора или подшипников.

Понятно, что эта задача не на один год, но я начну, а кто-нибудь, может быть, подхватит и продолжит.

Я всем написал запросы как потенциальный покупатель, чтобы узнать цены. Для примера, готовые промышленные варианты автономных комплексов: раз, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать. Из них готовых к продаже: 2; готовых к продаже в Россию: 0.

Выбор полетного контроллера

Так как мне нужно транслировать видео и телеметрию через интернет, то сразу приходит на ум поставить на дрон микрокомпьютер с 4G модемом и камерой, и сделать из этого комплекта web-трансляцию. Нашлись вот такие решения: раз, два, три. Это обычные одноплатники с внешним USB 4G модемом и камерой. Для кодирования и трансляции видео используется gstreamer. Но эти штуки сами по себе дроном управлять не умеют, их нужно использовать совместно с полетным контроллером.

Он следит за состоянием датчиков положения (гироскоп, акселерометр, компас), GPS-координатами, положением ручек на пульте управления и, исходя из этих данных, управляет моторами, чтобы висеть в одной точке или куда-то лететь. Полетный контроллер — это мозг дрона. Какие-то из них работают на своем родном ПО, а какие-то используют open-source ПО, такое как Ardupilot и его форк PX4. Полетный контроллер нужно будет как-то связать с бортовым компьютером, чтобы можно было загрузить полетное задание или указать произвольную точку куда лететь и когда включать камеру.
В продаже можно найти много разных контроллеров сильно отличающихся друг от друга по цене и функционалу.

С тех пор с ним не сталкивался и был приятно удивлен, когда узнал, что сейчас он может работать на 64-битных компьютерах с Linux, у него огромное сообщество пользователей как хобби, так и профи, длинный список поддерживаемых “из коробки” датчиков и расписанные планы на 2018-2019 годы. С Ardupilot я игрался еще на 8-битных атмегах, в которых не было USB-bootloader’а, а прошивались они на программаторе. За это время он успел перерасти в проект DroneCode, а потом и отсоединиться от него.

Программы управления (GCS — Ground Control Station) общаются с бортовым контроллером короткими сообщениями по открытому протоколу MAVLink через комплект радиомодемов (дрон шлет телеметрию, GCS шлет команды управления). На первый взгляд в нем как раз реализованы все необходимые функции: автоматический взлет и посадка, загрузка полетных заданий, есть desktop и мобильные приложения под все основные семейства ОС. Подозреваю, что эти сообщения получится пустить через интернет.

Вариантов там полтора десятка от мала до велика и с разными характеристиками. Взглянем на список поддерживаемых контроллеров и что-нибудь подберем.

Из всего того многообразия контроллеров мне понравилось несколько вариантов:

Полетный контроллер

Erle PXFMini

Emlid Edge

Navio 2

Erle Brain 3

PixHawk 2 Cube

Доп компьютер

Raspberry Pi Zero W

нет

Raspberry Pi 3

нет

Raspberry Pi 3

Вес комплекта, г

84

97

98

145

150

Процессоры, общее кол-во

1

2

2

1

3

ОС, одновременно работающих

1

1

1

1

2

IMU датчики, комплектов

1

2

2

1

3

Датчик воздушного давления

1

2

1

1

1

Резервирование питания

нет

нет

GPS, Глонасс

внешний модуль
с доп магнитометром

внешний модуль
с доп магнитометром

встроенный приемник, внешняя антенна

внешний модуль
с доп магнитометром

внешний модуль

Видеовход

CSI на Raspberry

HDMI

CSI на Raspberry

CSI

CSI на Raspberry

WiFi

есть

есть
Long Range 2км
+52 г

есть

есть

есть

Стоимость комплекта, $

212

700

215

341

331

Самый легкий комплект (84 г) получается из микрокомпьютера Raspberry Pi Zero W (9 г), контроллера Erle PXFMini (15 г), родного внешнего GNSS модуля (46 г) и дополнительного USB-концентратора (14 г).

На нем висит управление ШИМ регуляторов моторов, считывание показаний датчиков, ОС Linux со всеми потрохами и декодирование видео с камеры. Рабочий процессор в этом комплекте один — на Raspberry Pi. IMU датчики и вход питания без резервирования. Так как в Pi Zero не предусмотрены USB порты, то в этом варианте приходится использовать внешний концентратор.

GNSS модуль работает по протоколу UAVCAN и дополнительно оснащен магнитометром и датчиком воздушного давления. Следующий комплект (97 г) от гонконгской компании с русскими фамилиями в команде разработчиков — контроллер Emlid Edge (59 г) с GNSS модулем (38 г). За ШИМ здесь отвечает отдельный процессор ARM Cortex-M3, ОС Linux крутится на основном ARM Cortex-A53 quad-core.

Относительно высокая стоимость объясняется дальнобойными wifi-приемопередатчиками в комплекте (до 2 км с трансляцией HD-видео). В контроллере имеется HDMI видеовход, что позволяет подключить к нему напрямую любую камеру с таким выходом, например GoPro 4 или 5. Вес бортового модуля (52 г) в общей таблице не включен, так как мне нужна связь по 4G, однако такой вариант можно иметь в виду: из дальнобойного wifi можно сделать запасной канал связи через стационарный роутер с проводным интернетом.

На контроллере стоит отдельный процессор Cortex-M3 для управления ШИМ на 14 каналах и расшифровки входящих SBUS и PPM сигналов от приемника. Следующий вариант (98 г) состоит из знаменитого микрокомпьютера Raspberry Pi 3 (45 г) с контроллером-шилдом Navio 2 (23 г) от той же Emlid и внешней GNSS-антенны (30 г). Он, в свою очередь, управляется через драйвер в ядре ОС Linux, которая крутится на Raspberry.

Контроллер оснащен парой раздельных IMU датчиков (акселерометр, гироскоп, магнитометр) MPU9250 и LSM9DS1, одним датчиком воздушного давления и GNSS-модулем U-blox NEO-M8N, который видит GPS, Глонасс и BeiDou с внешней антенной через разъем MCX.

Запитывать этот “пирог” от 5 вольт можно одновременно с трех сторон, которые работают как дублирующие друг друга независимые источники: основной разъем питания на шилде, PWM серво выходы, micro-USB на Raspberry.

Контроллер Erle Brain 3 (100 г) с внешним GPS модулем (45 г) по своим весу, цене и набору датчиков смотрится в таблице так, что даже фото сюда вставлять не буду.

Вместо Raspberry в этом случае можно использовать любой легкий одноплатник, например, Odroid XU4, NVIDIA Jetson или любой другой с нужными интерфейсами и подходящим весом.

В самом PixHawk установлено 2 процессора: первый 32-битный STM32F427 Cortex M4 — основной, на котором работает ОС реального времени (RTOS) NuttX и второй резервный (failsafe) 32-битный STM32F103. Далее у нас самый надежный и самый тяжелый комплект (150 г), который состоит из популярного полетного контроллера PixHawk 2 Cube (80 г) с открытой архитектурой и компьютера Raspberry Pi 3. Предполагается, что основы могут быть разными и все желающие могут разработать свою собственную под специфические требования, на которую можно потом поставить готовый куб. Контроллер сделан в виде модулей: в кубе установлены процессоры и датчики IMU (на антивибрационном креплении, да еще и с подогревом), а на основу выведены питание и разъемы на всю периферию. Но, так как, Intel больше эти компьютеры не выпускает, то и в этом комплекте в качестве бортового компьютера будет Raspberry. Есть, кстати, готовый вариант с разъемом под установку микрокомпьютера Intel Edison.

Raspberry используется как дополнительный компьютер для связи с интернетом и на нем можно запускать любые ресурсоемкие задачи (например, распознавание образов в OpenCV), не боясь, что сбои в таком процессе “повесят” критичные функции, такие как управление моторами.

Вот, если бы под Pixhawk была основа в разъемом для маленького Raspberry Zero, да еще и выводом USB, то было бы интересней. Итак, учитывая вес, характеристики и цену на первое место для меня выходит комплект Navio 2 + Raspberry, а на второе Pixhawk 2 Cube + Raspberry (+52 г). По общему итогу расчетов эти цифры могут оказаться незначительными. Но такую еще купить нельзя, а изготавливать ее пока не интересно.
Запишу в заметки, что повышенная надежность стоит дополнительные 52 грамма и $110.

Автономная зарядка

Как можно видеть в готовых вариантах выше, существует несколько подходов к подготовке автономного дрона к следующему полету: зарядка аккумулятора через контактные площадки, бесконтактная индукционная зарядка и механизированная замена аккумулятора с последующей его зарядкой на станции.

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

Посадка “в точку”

Для точной посадки можно использовать стандартную камеру бортового компьютера, визуальные маркеры и OpenCV для их распознавания. Вот один из вариантов решения, который можно нагуглить. Еще один свежий появился, когда я писал эту статью. Но распознавание образов достаточно трудоемкий процесс для Raspberry, и без особой необходимости загружать его не хочется. Также качество распознавания будет сильно зависеть от материала из чего сделан маркер и условий освещенности. Желательно, чтобы это был отдельный датчик и отдавал готовые координаты нужной визуальной точки, независимо от наличия и угла падения света. И такой есть в списке поддерживаемого оборудования Ardupilot, называется IR-Lock.

Он сделан на основе модуля камеры с открытым кодом Pixy CMUcam5. Airobotics из списка выше также использует это решение. Этот модуль снабжен камерой и процессором, и его можно “научить” распознавать определенные образы объектов, а, затем, на выходе получать готовые координаты этих объектов на изображении.

Зная координаты распознанного образа на изображении и расстояние до него, полетный контроллер вычисляет на какое расстояние и в какую сторону нужно переместить дрон.
Модификация IR-Lock состоит в том, что в качестве маркера, который нужно распознать используется ИК фонарь из светодиодов, а на камере обычные линзы заменены на те, что пропускают только ИК свет. В итоге, при любом освещении, камера видит свечение фонаря белым цветом на черном фоне (и больше ничего), что сильно повышает точность распознавания.

Разработчики рекомендуют использовать лазерный дальномер, например LightWare LW20 (20 грамм и $299, меряет до 100 м), или дешевый и короткий VL53L0X (менее 1 грамма и $10, меряет до 2 м), который стал поддерживаться в последних версиях Ardupilot. Для нормальной работы этого датчика необходим еще и дальномер, который будет измерять высоту над землей. Почему-то ультразвуковой датчик для целей посадки не заслуживает доверия разработчиков IR-Lock.
Кстати, дроны DJI автоматически садятся, используя ультразвук и стереокамеры.

Висеть, как вкопанный

Чтобы дрон умел висеть на одном месте и не “плавать”, одного только 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. Для его нормальной работы также рекомендуется использовать лазерный дальномер, вместо ультразвукового. Хотя на самом модуле предусмотрен разъем как раз для УЗ датчика.

Минимальный комплект электроники

Вот, что собралось:

Все компоненты работают от 5 Вольт и потребляют в режиме трансляции видео почти 2 Ампера (10 Ватт). Общий вес получается 199 г.

Стереозрение и круговые лидары я оставил на потом, если в них возникнет реальная необходимость. В наборе присутствует ультразвуковой датчик расстояния, который будет смотреть вперед на предмет препятствий.

Полезная нагрузка

Так как родная камера от 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.

В оптимальном режиме при напряжении питания 24 Вольта такой комплект тянет 474 грамма при токе 1,4 А. Поигравшись в калькулятор, я выбрал моторы Antigravity 4004 KV300 (53 г) с винтами 15х5 (27 г). 11 г/Ватт, отношение тяги к собственному весу = 5. Эффективность получается 14. На полном ходу тяга составляет 1311 грамм при токе 7,5 А. 9:1. Оптимальный взлетный вес = (474 г * 4 мотора) = 1896 г, максимальный (с учетом тяговооруженности 2:1) = (1311 г * 4 мотора) / 2 = 2622 г. Коптер будет с четырьмя моторами, то есть квадро.

Напряжение питания моторов = 24 Вольта, максимальный рабочий ток = 7,5 А, поэтому нужен регулятор под такое напряжение и с рабочим током, с учетом запаса, минимум 10А. Моторы управляются регуляторами оборотов. Он сделан на основе популярной прошивки BLHeli-32, с закрытым кодом, но с широкими возможностями настроек и большим числом аналогов. У T-Motor самый легкий регулятор (7 г без проводов) под такое напряжение — это FPV 35A-32bit 3-6S.

Подитог:

ВМГ (винто-моторная группа), состоящая из моторов, пропеллеров и регуляторов (по 4 шт каждого) весит 346 г.

С учетом крепежа, проводов и разъемов (прикинем +100 г) = 951 г. Вместе с электроникой и полезной нагрузкой (346 + 505) получается 851 г.

При максимальном (2622 — 951) = 1671 г. При оптимальном весе, на раму и аккумулятор остается (1896 — 951) = 945 г.

Рама

Рассчитаем минимальный размер рамы, чтобы выбранные 15-дюймовые пропеллеры не мешали друг другу создавать тягу. Размеры рамы производители указывают в расстоянии между осями моторов, расположенных по диагонали друг от друга.

Соседние лопасти 15-дюймового винта будут крутиться в 1 миллиметре друг от друга при диагонали рамы 540 мм. По картинке можно узнать гипотенузу, которая вычисляется из катета, равного сумме диаметра винта и расстояния между пропеллерами. Добавим немного пространства и размер подходящей рамы будет равен примерно 600-700 мм.

Все они отличаются исполнением и наличием складных элементов (шасси, лучи) для удобства транспортировки. В продаже найти таких можно много, например, раз: 600мм и 750г, два: 650мм и 450г, три: 690 и 675г, четыре: 650мм и 750г.

Выбор конкретного экземпляра для своих нужд пока отложу, для дальнейшего расчета буду иметь в виду вес рамы равный 450 г.

Остается аккумулятор весом 495 г для оптимального веса и 1221 г для максимального.

Аккумулятор

Для выбора аккумулятора нужно знать какой он должен отдавать ток.

С учетом небольшого запаса округлим минимальный рабочий ток аккумулятора в 35А. На полном ходу двигатели будут “есть” 30А (7,5А * 4 мотора), а электроника примерно 0,45А (10 Ватт). Для Li-Po батарей с высокой токоотдачей в 30С минимальная емкость будет равна 1,2 Ач (35/30), а для более легких Li-Po и Li-Ion с токоотдачей в 10С минимальная емкость 3,5 Ач (35/10).

С этим аккумулятором дрон будет весить 2031 г, что больше оптимального на 135 г, но в пределах максимального. Как вариант, сборка 6S2P из Li-Ion Sony VTC6 с BMS весит примерно 630 г (при емкости 6 Ач). При общем весе в 2031 г на каждый мотор приходится 508 г. Теперь посчитаем на какое время коптер сможет зависнуть при идеальных условиях. Он примерно будет равен 1,6А. Взглянем на характеристики мотора и найдем потребляемый ток при такой тяге. С учетом разрядки аккумулятора до 20% получится (6 Ач * 80% / (6,85 A)) = 0,7 часа или 42 минуты. 4 мотора и электроника дадут в сумме 6,85A (1,6 * 4 + 0,45).

Компоновка

Пару готовых железок и крепеж можно заказать на Алиэкспрессе. Пока я выбирал подходящую раму и думал как все это на ней размещать и чем крепить, пришел к выводу, что проще будет нарисовать несколько деталей и заказать 3D-печать из пластика и фрезеровку из карбона.

Немного поэкспериментировав с компоновкой и центром тяжести, получилась вот такая рама:

Расчетный вес рамы получился 350 г при диагонали 700 мм. Она состоит из карбоновых трубок и пластин, деталей из алюминия и крепежа из титана. 3D-модель рамы и список деталей.

Полностью собранная модель (без проводов):

Общий вес коптера с электроникой, аккумулятором Li-Ion 6S2P и проводами должен получится 1931 г.

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

Список деталей рамы.
3D-модель в сборе. 3D-модель рамы. Список компонентов.

Вес пустой рамы с корпусом 384 г, общий вес 2020 г, расчетное время висения на одной зарядке (разряд аккумулятора до 20%): 44 минуты.

Бокс для зарядки

В нем будут установлены роутер, компьютер, погодные датчики и камера с видом на посадочную зону. Бокс для зарядки будет сделан из алюминиевого профиля, крепежной фурнитуры и алюминиевых сендвич-панелей. Механизм открывания створок до конца еще не продуман, а также не определена система зарядки (нуждаюсь в подсказках). Я решил сделать покатую крышу из двух створок, чтобы зимой на ней не скапливался снег и не мешал открыванию.

В следующей статье я расскажу как настроить и запустить дрон через интернет с помощью GUI или командной строки, про варианты систем зарядки из которых я сейчас выбираю, ПО для управления коптером и анализа снимков и почему мой первый полет через интернет продлился так недолго:

Продолжение следует…

Показать больше

Похожие публикации

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

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

Кнопка «Наверх»