Пару месяцев назад я здесь писал про свой тяжелый квад: раз, два. Спасибо всем, кто читал и комментировал — я нe ожидал, что мои скромные труды привлекут такое количество читателей. Нo раз данная тема, судя по всему, интересует аудиторию Хабра, то поведаю вам о своем последнем проекте: легком FPV-трикоптере, который я завершил буквально на днях.
Поставленная задача
Для этого коптера я поставил себe следующие задачи:
- Высокая маневренность: хотя мой квад неповоротливым назвать не получается, но тем не менее, при весе в 2.2кг и с дорогой камерой на относительно хрупком подвесе спереди исполнять на нем фигуры высшего пилотажа как-то рука не поднимается. Хотелось коптер, на котором можно будет крутить бочки и петли вокруг деревьев без задних мыслей.
- Удароустойчивость: требование непосредственно связано с первым. Долго чинить коптер после каждой неожиданной посадки в дерево — не дело, аппарат должен держать удар.
- Время полета: хотя бы 10-15 минут, менять аккумуляторы чаще — ужe неинтересно.
- Легкий вес: данное требование исходит из трех предыдущих. Чем легче коптер, тем проще ему менять направление полета, тем меньше энергия столкновения с чем-либо, и тем дольше он провисит в воздухе на одной батарейке.
- Компактность: хотелось аппарат, который помещается в рюкзак, чтобы можно было его без проблем брать с собой в общественном транспорте и при пеших походах.
Исходя из этих требований, я опять сел за LibreCad, и нарисовал вот что:
Размеры: расстояние между передними моторами — 27см, диаметр пропеллеров — 8".
Почему трикоптер?
Трикоптер — достаточно редкая разновидность мультироторов. Имея всего три пропеллера, невозможно компенсировать крутящий момент с помощью пар, вращающихся в противоположном направлении, как это делается на квадро-, гекса-, окто- и других коптерах. В трикоптерах вместо этого используется механизм наклона заднего ротора, позволяющий отклонять его вектор тяги от вертикали и таким образом управлять рысканьем. Преимущества данной схемы для моего проекта:
- Повышенная маневренность по оси рысканья, которая у обычных коптеров является самой медленной и неточной
- Понижение веса за счет использования всего трех моторов
- Большое расстояние между передними роторами позволяет разместить камеру так, что пропеллеры не будут попадать в поле зрения, не вынося ее далеко от центра коптера
Недостаток — повышенная механическая сложность, необходим шарнир для крепления заднего мотора, и сервопривод для управления им.
Техника
Раму я решил собирать из алюминиевого профиля и стеклопластиковых пластин, вырезанных на фрезеровочном станке. Алюминий дает абсолютно достаточную жесткость на коптере этого размера, и весит такая конструкция очень немного. Дальше я подобрал следующие электронные компоненты:
Моторы: | Suppo A2208/17 1100KV | 3x €13,95 |
---|---|---|
Пропеллеры: | Flyduino HQ 8x5 CF-reinforced (клоны Graupner E-Prop) | €7,80 |
Регуляторы: | Blue Series 12A | 3x $10,02 |
Аккумулятор: | Zippy Compact 3S 2200mAh 25C | $13,17 |
Сервопривод: | Turnigy TGY-9025MG | $5,04 |
FPV камера: | Sony Super HAD II 600TVL | ~45$ |
FPV передатчик: | Iftrontech Nano Stinger 5.8G 25mw | ~100$ |
OSD: | MinimOSD | ~20$ |
Регуляторы я перепрошил прошивкой SimonK — она намного улучшает скорость реакции мотора на изменение заданных оборотов контроллером, поддерживает высокую частоту обновления входного сигнала, и вообще считается must-have для коптеров нa регулях, которые еe поддерживают.
Механику наклона я подходящую в продаже нигде не нашел, и решил делать сам — благо не так давно образовался доступ к 3D-принтеру. Разобравшись за вечер с FreeCAD, нарисовал следующие детали:
Получился шарнир с креплением на 10мм квадратную трубу, отверстием под 3мм ось, и креплением для мотора со стандартными отверстиями.
Контроллер
Мой выбор контроллера для этого коптера также пал на достаточно редкий вариант — Naze32.
(изображен использованный мной клон Flyduino MW32)
Naze32 — по сути порт MultiWii на современное железо. Используется 32-битный процессор STM32F103, гироскоп и акселерометр MPU6050 (также установлен дополнительный акселерометр MMA8452, некоторые версии ПО используют его вместо MPU), барометр MS5611 и магнетометр HMC5883L. Почему я выбрал именно этот вариант:
- Вычислительная мощность — большинство контроллеров основаны на 8-битных чипах ATMega, их мощности уже перестает хватать для многих продвинутых функций, в будущем легче не станет. Хотелось контроллер, который будет получать обновления софта с новыми функциями в будущем, не будучи при этом ограниченным устаревшим железом.
- Открытый софт на основе MultiWii — я решил использовать форк базового софта Naze32 (BaseFlight) под названием Harakiri, который пишется на немецком форуме FPV-Treff. Будучи основан на MultiWii, он прекрасно подходит для легкого высокоманевренного коптера, но при этом не требует возни в коде (вся конфигурация делается через командную строку и стандартный GUI от MultiWii) и отлично поддерживает GPS-функции типа возврата домой.
- Поддержка открытых протоколов связи MultiWii и MAVLink — важно для использования MinimOSD.
- Не в последнюю очередь — размер контроллера. Все сенсоры расположены на плате размером 35x35мм, при этом присутствует абсолютный минимум необходимых разъемов — экономия места и веса на и без того небольшом коптере.
Приемник GPS я взял обычный uBlox CN-06 (~50$). Можно былo ограничиться на 10г болеe легким модулем Mediatek, но он значительно медленнее и нe настолько точен — для хорошей жe работы функций типа return-to-home точность и скорость обновления критична, поэтому везде рекомендуют использовать uBlox.
Подготовка деталей
В первую очередь я изготовил пластины для рамы и механику наклона заднего мотора.
Рама
Фрезеровочный станок вырезает пластины по контуру. Внизу — первая неудачная попытка. Совет: если в ПО станка выбрана 2-мм фреза, удостоверьтесь, что она же и установлена в станке :)
Основные детали вырезаны
Всe детали готовы к сборке. Алюминиевые трубки распилены на нужную длину, всe необходимые отверстия просверлены.
Собранная рама с контроллером.
Механика
MakerBot Replicator 2 печатает деталь из PLA. В сумме печать обеих половинок заняла где-то 30 минут, с толщиной слоя 0.2мм.
Готовые половинки шарнира. Отверстия пришлось пересверлить вручную, и место стыка обработать напильником — но после этого детали стыкуются прекрасно, практически без люфта, и поворачиваются без усилия.
Регуляторы
Регуляторы Blue Series я, как сказано выше, перепрошил ПО SimonK. Для этогo пришлось снять с них заводскую термоусадку, и с помощью программатора USBAsp, адаптера для чипов Atmega и программы kkflashtool их перепрогаммировать. Так как на тот момент я еще не собрал раму и не распаял кабеля, то тест регуляторов после прошивки выглядел так:
После этого регуляторы я изолировал белой термоусадкой — раз уж рама у меня вся белая.
Сборка
Итоговая сборка коптера в картинках:
Передние моторы, их регуляторы и FPV-камера установлены.
Вся электроника установлена на верхней полураме: спереди видеопередатчик, дальше контроллер, за ним GPS и сзади регулятор и (пока еще жестко прикрученный) третий мотор. Сбоку лежит сервопривод.
Вид снизу: посередине MinimOSD в белой термоусадке, вокруг куча проводов.
Куча проводов слегка упорядочена, припаян коннектор для аккумулятора (обычный желтый XT60). Чем хороши 3S аккумуляторы — их напряжением в 11-12,6В можно напрямую питать 12-вольтовые девайсы, в данном случае камеру и передатчик. Не нужны отдельные BEC'и, экономится вес.
Установлена механика заднего мотора, сервопривод и собственно мотор. В качестве оси шарнира я взял 3мм карбоновый стержень, он очень легкий и прочный. Отверстия под него рассверлены таким образом, что в верхней половинке шарнира он сидит плотно, а в нижней свободно вращается. Для спокойствия он также закрепен каплей клея возле мотора. Снизу висит приемник д/у Graupner GR-16.
Готовый коптер на кухонных весах. Старые аккумуляторы Turnigy на 20 грамм тяжелее новых Zippy Compact, на которых я сейчас летаю — таким образом итоговый вес сейчас 550 грамм, в четыре раза меньше моего квада.
Однако сборка коптера — это еще нe все.
Прошивка Naze32
Начнем с самого важного — прошивки ПО контроллера. С чипами STM32 все слегка сложнее, чем с Arduino-совместимыми MultiWii-контроллерами, но ненамного. Замыкаем припоем два контакта на обратной стороне контроллера, подключаем через USB и запускаем Flash Loader Demo:
Выставляем 115200 бод, нужный порт, и поехали. Выбираем «Next» несколько раз, потом выбираем «Download», отмечаем «Jump to User Program» и «Global Erase», выбираем загруженный hex-файл выбранной прошивки (BaseFlight или Harakiri), и жмем еще раз Next. После прошивки контроллер перезагружается, готово. Отключаем, убираем перемычку между контактами на обратной стороне (иначе контроллер будет каждый раз грузиться в режим прошивки).
Конфигурация BaseFlight/Harakiri
Конфигурация ПО делается в два шага — сначала основные параметры настраиваются через командную строку, а потом используется стандартный интерфейс от MultiWii для настройки PID-контроллеров, AUX-каналов и иже с ними. Вооружаемся Putty или любым другим терминальным клиентом, вновь подключаем контроллер к USB, открываем подключение к последовательному порту и сразу жмем "#", чтобы контроллер вошел в интерактивный режим:
Выполняем основную конфигурацию — задаем тип коптера (трикоптер), включаем функции GPS и PPM (если используем — PPM это режим вывода сигнала из приемника д/у, при котором всe каналы передаются через один кабель), задаем карту каналов (порядок каналов д/у, ответственных за четыре оси управления и AUX — он разный у разных д/у систем). Сохраняем, контроллер перезагружается.
mixer tri
feature gps
feature ppm
map TAER1234
save
Закрываем терминал, и открываем MultiWii GUI 2.1. Там, как и с любым обыкновенным MultiWii-контроллером, задаем функции AUX-каналов, проверяем диапазоны каналов д/у и настраиваем их так, чтобы границы были как можно ближе к 1000/2000, а середина к 1500, проводим калибровку акселерометра и магнетометра.
Все, можно лететь. Первый тест с коптером такого веса и размера можно легко выполнить сразу на месте, крепко удерживая его в руке (вообще эту процедуру рекомендовать я бы не стал, но при 550г веса и ~1.4кг максимальной тяги его достаточно легко удержать): запустить моторы на минимальный газ и покрутить коптер вокруг всех осей, проверив, что он правильно реагирует (противится движению). Если сервомотор наклоняет задний мотор не в ту сторону, это можно поменять в командной строке:
set yaw_direction = -1
Еще одна деталь, из-за которой мне пришлось поковыряться в параметрах: USB-порт на контроллере Naze32 находится сзади. При установке на моем коптере, однако, там находится GPS, и порт оказывается закрыт. Поэтому я решил повернуть контроллер на 90°. Этo возможно — необходимо лишь поменять оси сенсоров в параметрах; чтобы не было слишком просто, оси у гироскопа, акселерометра и магнетометра все разные (даже несмотря на то, что гироскоп и аксемерометр объединены в одном чипе). С помощью форума FPV-Treff удалось найти правильные команды для поворота на 90° по часовой стрелке:
set align_mag_z = -2
set align_mag_y = -3
set align_mag_x = -1
set align_acc_z = 3
set align_acc_y = -2
set align_acc_x = -1
set align_gyro_z = -3
set align_gyro_y = 1
set align_gyro_x = -2
Выполнять их надо именно в этом порядке, иначе контроллер может зависнуть — видимо, где-то спрятан хитрый баг. После сохранения и перезагрузки обязательно проверяем правильность данных в интерфейсе MultiWii — справа показаны угол крена и тангажа, они должны теперь соответствовать положению повернутого контроллера.
Конфигурация OSD
Раз мы уже делаем полноценный FPV-коптер, то не обойтись без OSD, который показывает информацию из контроллера на видео. С Naze32 прекрасно работает MinimOSD, с Harakiri даже со стандартной прошивкой, так как в отличие от BaseFlight Harakiri поддерживает протокол MAVLink. Однако существует ещe такая прекрасная прошивка для MinimOSD под названием KV-Team-OSD. Она вообще предназначена для работы с MultiWii-контроллерами, но прекрасно работает с Naze32, и в отличие от стандартной и других прошивок позволяет изменять PID-параметры контроллера с помощью пульта д/у через экранное меню. Это сильно сокращает время на настройку этих самых параметров, которые обычно меняются только через GUI на компьютере.
MinimOSD — это миниатюрная плата с OSD чипом MAX7456 и процессором ATmega 328p, совместимая с Arduino. Для прошивки и настройки необходим лишь FTDI-адаптер, так как на плате нет разъема USB.
Сначала подключаем MinimOSD через FTDI в USB-порт и открываем Arduino. Открываем стандартный скетч EEPROM Clear, выбираем нужный COM-порт, выставляем плату Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega 328, заливаем. Ждем пару секунд пока загорится светодиод на плате — память старой прошивки стерта. Качаем сорцы KV-Team-OSD версии r345 или r370, открываем и добавляем следующие строки в config.h:
Компилируем, заливаем. Закрываем Arduino, подключаем питание к OSD-стороне платы (там нужны 12В, иначе чип MAX7456 не получает питания; альтернативно на некоторых версиях можно соединить несколько контактов припоем и запитать MAX7456 от 5В, тогда ни в коем случае нельзя подключать + со стороны камеры и передатчика), и открываем GUI от KV-Team-OSD. Сделан он на том же Processing, что и MultiWii GUI, и выглядит соответственно похоже. Заливаем шрифт на чип MAX7456, нажав Upload, дожидаемся окончания процесса. Выставяем параметры: плата Minim, не показывать RSSI и прочую фигню, показывать напряжение из данных MultiWii (если у нас подлючен соответствующий кабель на контроллере), показывать данные GPS кроме координат, ну и все остальное по желанию.
Если в этот момент уже подключены и запитаны камера и передатчик, то на видео сразу по нажатию Write видны изменения в настройках. Для полного удовлетворения можно включить симулятор внизу в GUI и поиграться с симуляцией, посмотрев, как будет изменяться картинка OSD в полете.
По завершению всех настроек не забываем нажать Write, отключаем адаптер FTDI и подключаем MinimOSD к Naze32 — пины TX и RX находятся в середине контроллера, +5В и землю можно взять напрямую с одного из BEC-ов регуляторов, или со свободного разъема на контроллере.
Полетели!
За качество видео прошу извинить заранее. Так как на коптере имеется только FPV-камера, то запись ведется простеньким рекордером на базовой станции — таким образом качество записи чуть хуже того, что я вижу в очках при управлении. Зато, в отличие от записи с помощью GoPrо, видны данные OSD.
Первый мой полет с дешевой сервой HXT900 и неидеальными PID-ами — уже совсем неплохо, но слегка нервно. В середине видео видно, как я приземляюсь и меняю PID-параметры через экранное меню, после этого полет намного плавнее. OSD работает не полностью — я забыл один из параметров в config.h (boxnames), из-за этого не работает статус активных сенсоров, режим полета, статус Armed/Disarmed и скорость по GPS.
Полет после установки сервы TGY-9025MG и перенастройки PID-ов. Плюс OSD работает полностью. Намного лучше :)
Итоги
Подведу итоги. Все задачи, поставленные для коптера, выполнены:
- Маневренность: см. видео.
- Удароустойчивость: присутствует. Я ужe пару раз садил его в деревья на скорости (гифка — осторожно, 10 метров), пока тьфу-тьфу-тьфу все цело, даже пропеллера еще ни одного не сломал.
- Время полета: на полном заряде Zippy Compact 2200 получается около 15 минут активного полета. Вполне.
- Вес: 550г, в четыре раза меньше моего квада, тоже вполне.
- Компактность: коптер вместе с пультом и пачкой аккумуляторов влазит в рюкзак. С сожалению, у меня еще нет видеоочков со встроенным приемником, базовая станция на штативе вынуждает тащить с собой вторую сумку — но и это уже на порядок лучше большого квада.
Аппаратом я доволен чуть больше чем полностью. Летать на нем — одно удовольствие; Naze32 с софтом Harakiri летает великолепно, коптер очень стабильно лежит в воздухе и меняет направление полета как муха за счет легкого веса и достаточно мощной моторизации.
Поскольку я не эгоист, и оставить такое удовольствие себе одному считаю идеологически неправильным, то вот ссылки на чертежи рамы и файлы для 3D-печати шарнира для всех желающих:
- Рама: как на картинке в начале поста с декоративными элементами, только элементы для фрезеровки
- Шарнир: верхняя половина, низ под 10мм балку, низ под 15мм
Буду рад любым комментариям, критике и замечаниям. На вопросы постараюсь ответить.
Автор: leviathan