![image](https://habrastorage.org/webt/k1/u9/6y/k1u96yys-x68cjebrmsojpxbmcy.png)
Сначала я написал длинное предисловие откуда взялась такая задача, а потом оно мне показалось скучным и я его удалил.
Итак, задача: создание автономного БПЛА для мониторинга состояния линий электропередач (ЛЭП).
Так как:
- это хобби-проект и я могу сильно ошибаться в расчетах
- летающие предметы представляют опасность для живых существ и их имущества,
то эту статью следует воспринимать только как расширяющую кругозор, а не руководство к действию.
Список дефектов для обнаружения на ЛЭП.
Требования к БПЛА
- Вертикальный взлет и посадка (без катапульт и парашютов), то есть коптер
- Умеет взлетать, лететь по заданным точкам, возвращаться обратно и садиться в автоматическом режиме
- Редактировать полетное задание, давать команду на взлет и на посадку можно из любой точки мира
- Трансляция телеметрии и видео в реальном времени через интернет
- Загрузка на сервер фото и видео с бортовой камеры в процессе или после полета
- Зарядка или механизированная замена аккумулятора без участия человека.
А также два противоречащих друг другу требования:
- Надежная электроника (если где-то упадет, считай потерял)
- Относительно низкая стоимость эксперимента (если где-то упадет, считай потерял)
Степень автономности в идеале хочется фантастическую: дрон сам летает по заранее спланированному маршруту, загружает фото на сервер, ПО на сервере выявляет дефекты по фото и формирует заявку ремонтной бригаде с координатами мест проведения работ. Сам дрон не должен требовать к себе внимания человека до окончания рабочего ресурса какой-нибудь детали, например, аккумулятора или подшипников.
Понятно, что эта задача не на один год, но я начну, а кто-нибудь, может быть, подхватит и продолжит.
Для примера, готовые промышленные варианты автономных комплексов: раз, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать. Я всем написал запросы как потенциальный покупатель, чтобы узнать цены. Из них готовых к продаже: 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 шлет команды управления). Подозреваю, что эти сообщения получится пустить через интернет.
Взглянем на список поддерживаемых контроллеров и что-нибудь подберем. Вариантов там полтора десятка от мала до велика и с разными характеристиками.
Из всего того многообразия контроллеров мне понравилось несколько вариантов:
Полетный контроллер | 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 |
Резервирование питания | нет | 2х | 3х | нет | 2х |
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 г).
![](https://habrastorage.org/webt/2p/aw/tm/2pawtm7z82xszvowpsnageeuemo.jpeg)
Рабочий процессор в этом комплекте один — на Raspberry Pi. На нем висит управление ШИМ регуляторов моторов, считывание показаний датчиков, ОС Linux со всеми потрохами и декодирование видео с камеры. Так как в Pi Zero не предусмотрены USB порты, то в этом варианте приходится использовать внешний концентратор. IMU датчики и вход питания без резервирования.
Следующий комплект (97 г) от гонконгской компании с русскими фамилиями в команде разработчиков — контроллер Emlid Edge (59 г) с GNSS модулем (38 г). GNSS модуль работает по протоколу UAVCAN и дополнительно оснащен магнитометром и датчиком воздушного давления. За ШИМ здесь отвечает отдельный процессор ARM Cortex-M3, ОС Linux крутится на основном ARM Cortex-A53 quad-core.
![](https://habrastorage.org/webt/jc/ks/p-/jcksp-p0yeenxdaii9yyptnpi3q.jpeg)
В контроллере имеется 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.
![](https://habrastorage.org/webt/qp/xe/er/qpxeerggs3xhy4fw0koae9ysx1o.jpeg)
Контроллер оснащен парой раздельных 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 или любой другой с нужными интерфейсами и подходящим весом.
![](https://habrastorage.org/webt/jv/rn/it/jvrnitgujsxukuxyytqhhfudike.jpeg)
В самом PixHawk установлено 2 процессора: первый 32-битный STM32F427 Cortex M4 — основной, на котором работает ОС реального времени (RTOS) NuttX и второй резервный (failsafe) 32-битный STM32F103. Контроллер сделан в виде модулей: в кубе установлены процессоры и датчики IMU (на антивибрационном креплении, да еще и с подогревом), а на основу выведены питание и разъемы на всю периферию. Предполагается, что основы могут быть разными и все желающие могут разработать свою собственную под специфические требования, на которую можно потом поставить готовый куб. Есть, кстати, готовый вариант с разъемом под установку микрокомпьютера Intel Edison. Но, так как, Intel больше эти компьютеры не выпускает, то и в этом комплекте в качестве бортового компьютера будет Raspberry.
Raspberry используется как дополнительный компьютер для связи с интернетом и на нем можно запускать любые ресурсоемкие задачи (например, распознавание образов в OpenCV), не боясь, что сбои в таком процессе “повесят” критичные функции, такие как управление моторами.
Итак, учитывая вес, характеристики и цену на первое место для меня выходит комплект Navio 2 + Raspberry, а на второе Pixhawk 2 Cube + Raspberry (+52 г). Вот, если бы под Pixhawk была основа в разъемом для маленького Raspberry Zero, да еще и выводом USB, то было бы интересней. Но такую еще купить нельзя, а изготавливать ее пока не интересно.
Запишу в заметки, что повышенная надежность стоит дополнительные 52 грамма и $110. По общему итогу расчетов эти цифры могут оказаться незначительными.
Автономная зарядка
Как можно видеть в готовых вариантах выше, существует несколько подходов к подготовке автономного дрона к следующему полету: зарядка аккумулятора через контактные площадки, бесконтактная индукционная зарядка и механизированная замена аккумулятора с последующей его зарядкой на станции.
У каждого метода есть свои плюсы и минусы, о них я напишу отдельно, но в любом случае, для их функционирования дрон должен уметь приземляться в нужную точку практически с сантиметровой точностью.
Посадка “в точку”
Для точной посадки можно использовать стандартную камеру бортового компьютера, визуальные маркеры и OpenCV для их распознавания. Вот один из вариантов решения, который можно нагуглить. Еще один свежий появился, когда я писал эту статью. Но распознавание образов достаточно трудоемкий процесс для Raspberry, и без особой необходимости загружать его не хочется. Также качество распознавания будет сильно зависеть от материала из чего сделан маркер и условий освещенности. Желательно, чтобы это был отдельный датчик и отдавал готовые координаты нужной визуальной точки, независимо от наличия и угла падения света. И такой есть в списке поддерживаемого оборудования Ardupilot, называется IR-Lock.
![](https://habrastorage.org/webt/dh/0a/b4/dh0ab42xxzhhlri6vo0nemzpdys.gif)
Airobotics из списка выше также использует это решение. Он сделан на основе модуля камеры с открытым кодом Pixy CMUcam5. Этот модуль снабжен камерой и процессором, и его можно “научить” распознавать определенные образы объектов, а, затем, на выходе получать готовые координаты этих объектов на изображении.
![](https://habrastorage.org/webt/xk/1f/6h/xk1f6hvuyc0-qbrdvw-oeak2vcs.gif)
Зная координаты распознанного образа на изображении и расстояние до него, полетный контроллер вычисляет на какое расстояние и в какую сторону нужно переместить дрон.
Модификация 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. Для его нормальной работы также рекомендуется использовать лазерный дальномер, вместо ультразвукового. Хотя на самом модуле предусмотрен разъем как раз для УЗ датчика.
Минимальный комплект электроники
Вот, что собралось:
![](https://habrastorage.org/webt/ks/ii/ep/ksiiepidvyhb0tg0tic1nxmqhoq.png)
Общий вес получается 199 г. Все компоненты работают от 5 Вольт и потребляют в режиме трансляции видео почти 2 Ампера (10 Ватт).
В наборе присутствует ультразвуковой датчик расстояния, который будет смотреть вперед на предмет препятствий. Стереозрение и круговые лидары я оставил на потом, если в них возникнет реальная необходимость.
Полезная нагрузка
Так как родная камера от Raspberry делает средние по качеству фото, а также не умеет захватывать фото одновременно с видео, то она будет использоваться только для web-трансляции, а в качестве основной камеры нужна подходящая для выявления дефектов на ЛЭП. Для большей части позиций из списка выявляемых дефектов подойдут GoPro Hero 5 Session, мультиспектральная Parrot Sequoia, двойная Sentera Double 4K и инфракрасная FLIR Vue Pro. Каждая из них весит около 100 г.
Для стабилизации камеры с целью улучшения качества снимков в нагрузку с ней полетит 2х или 3х осевой подвес.
![](https://habrastorage.org/webt/bm/wm/7w/bmwm7w31jj8gn2iel0idyt9eyfc.jpeg)
Простые 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-дюймовые пропеллеры не мешали друг другу создавать тягу. Размеры рамы производители указывают в расстоянии между осями моторов, расположенных по диагонали друг от друга.
![](https://habrastorage.org/webt/rk/ky/34/rkky34z43lunn4bjfsstbctrpew.jpeg)
По картинке можно узнать гипотенузу, которая вычисляется из катета, равного сумме диаметра винта и расстояния между пропеллерами. Соседние лопасти 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 минуты.
Компоновка
![](https://habrastorage.org/webt/c7/5q/xz/c75qxzz_3u6adscdlf9vqrw95h4.png)
Пока я выбирал подходящую раму и думал как все это на ней размещать и чем крепить, пришел к выводу, что проще будет нарисовать несколько деталей и заказать 3D-печать из пластика и фрезеровку из карбона. Пару готовых железок и крепеж можно заказать на Алиэкспрессе.
![](https://habrastorage.org/webt/p7/5h/gu/p75hgu-2i6y-hk-g4uj_zieizi8.png)
Немного поэкспериментировав с компоновкой и центром тяжести, получилась вот такая рама:
![](https://habrastorage.org/webt/hr/j1/mz/hrj1mz2x8fitodhme7vhh_jn-xi.png)
Она состоит из карбоновых трубок и пластин, деталей из алюминия и крепежа из титана. Расчетный вес рамы получился 350 г при диагонали 700 мм. 3D-модель рамы и список деталей.
Полностью собранная модель (без проводов):
![](https://habrastorage.org/webt/k8/hs/6y/k8hs6ystorq0kgmxa-yqyipkkxi.png)
Общий вес коптера с электроникой, аккумулятором Li-Ion 6S2P и проводами должен получится 1931 г.
Да, мне тоже показалось, что дрон получился слишком голым для автономного варианта и мелкий дождик легко намочит бортовую электронику. Поэтому добавил немного пластика:
![](https://habrastorage.org/webt/_w/a1/oo/_wa1ooujcahq9ddosmjnwg_-6ak.png)
3D-модель рамы. Список деталей рамы.
3D-модель в сборе. Список компонентов.
Вес пустой рамы с корпусом 384 г, общий вес 2020 г, расчетное время висения на одной зарядке (разряд аккумулятора до 20%): 44 минуты.
Бокс для зарядки
![](https://habrastorage.org/webt/ky/xz/ni/kyxzni7czbjyj4wpiffqf1g4oy0.png)
![](https://habrastorage.org/webt/wc/im/fd/wcimfdlh6gogtgofinjawwkn1xi.png)
Бокс для зарядки будет сделан из алюминиевого профиля, крепежной фурнитуры и алюминиевых сендвич-панелей. В нем будут установлены роутер, компьютер, погодные датчики и камера с видом на посадочную зону. Я решил сделать покатую крышу из двух створок, чтобы зимой на ней не скапливался снег и не мешал открыванию. Механизм открывания створок до конца еще не продуман, а также не определена система зарядки (нуждаюсь в подсказках).
![](https://habrastorage.org/webt/ax/h6/br/axh6br9yvco70eqxenmssqwkn4u.jpeg)
В следующей статье я расскажу как настроить и запустить дрон через интернет с помощью GUI или командной строки, про варианты систем зарядки из которых я сейчас выбираю, ПО для управления коптером и анализа снимков и почему мой первый полет через интернет продлился так недолго:
![](https://habrastorage.org/webt/p-/mt/7g/p-mt7gpa002tzwk1fsfyyjdufsu.jpeg)
Часть 2 про ПО.