Статья взята с habrahabr.ru
В последнее время среди авиамоделистов и им сочувствующих набирает популярность мультироторная схема летательного аппарата, так называемые мультикоптеры. Так как соответствующей статьи в Википедии еще нет, а на Хабре мелькали лишь упоминания этого забавного механизма, я решил поделиться опытом постройки своего собственного аппарата.
Забегая вперед, скажу, что ничем прекрасным это не закончилось, но тех, кому важен не результат, но процесс, приглашаю под кат, где уютно пахнет канифолью и разбросаны алюминиевые опилки.
Несколько лет назад в мою голову постучалась идея поснимать город с высоты птичьего полета. Бегло пройдясь по доступным вариантам вроде поднимания фотоаппарата на воздушном змее, на аэростате и даже голубями, я довольно быстро и закономерно пришел к мысли о радиоуправляемом вертолете, а возможно и новом и неизведанном механизме — мультикоптере.
Пару слов о конструкции
Чаще всего мультикоптер представляет из себя металлическую, или углепластиковую раму с парным количеством моторов (наиболее популярны квадро- и гексакоптеры, с 4 и 6 роторами соответственно). В центре расположена плата управления и батарея, остальные детали крепятся, куда кому вздумается.
Электрические трехфазные бесколлекторные моторы (стандартные для авиамоделистов) на 7000-25000 оборотов в минуту развивают тягу, достаточную для удержания в воздухе всей необходимой для съемок аппаратуры. В зависимости от количества и мощности моторов, эта тяга может быть от сотен грамм до десятков килограмм.
В большинстве случаев используется четное количество роторов для равномерной компенсации вращательного момента: половина пропеллеров крутится в одном направлении, половина — в обратном (для этих же целей у классического вертолета предусмотрен хвостовой винт), хотя есть и трикоптеры.
Таким образом, для наклонов аппарата вправо-влево и вперед-назад (крен и тангаж) достаточно уменьшить скорость вращения моторов с одной стороны, и увеличить — с другой, а если увеличить скорость моторов «через один», вращательный момент одних не будет скомпенсирован другими, и аппарата будет поворачиваться вокруг вертикальной оси вправо-влево (рысканье). У трикоптеров один из моторов может менять ось вращения, направляя свою тягу немного в сторону, однако для этого нужно преодолевать гироскопический эффект, поэтому я считаю трикоптеры неэффективными.
Мультикоптер имеет перед классической моделью вертолета некоторые преимущества:
-Стартовая цена. Аналогичный по подъемной силе вертолет обходится в два раза дороже.
-Простота конструкции. Рама собирается из говна и палок подручных материалов, прочность имеет второстепенное значение (некоторые детали традиционного вертолета должны выдерживать огромные нагрузки, чтобы обеспечить возможность резких маневров).
-Цена техобслуживания. Вертолет с необходимой подъемной силой (здесь и далее я подразумеваю, что мы хотим получить в итоге летательный аппарат, способный поднять, к примеру, среднюю зеркалку весом в полтора-два кг) может иметь только двигатель внутреннего сгорания, огромные лопасти и другие прелести больших моделек, со всеми соответствующими затратами на бензин+масло, разбитые лопасти и проч.
-Эксплуатация. Сюда можно отнести намного большую вибрацию и шум одного двс-мотора, чем шести электрических; большая маневренность мультикоптера, легкое управление с использованием автопилота.
Итак, мы загорелись идеей собрать для фотографических целей именно мультикоптер. Нас не устраивают готовые решения (о них позже), мы хотим создать что-то свое, большое, красивое, с соответствующими карточными играми и девицами легкого поведения. За дело!
Начнем с наброска проекта
Нам необходимо получить аппарат, который
-будет стабилизировать себя в воздухе (не ручное управление),
-с максимальной грузоподъемностью (но какой? Наверняка мы ограничены либо в бюджете, либо в технических возможностях),
-максимальным временем полета (опять-таки, зависит от грузоподъемности),
-максимальной дальностью связи
Совсем не похоже на тз, так как совсем неясно, чем же мы располагаем, но после некоторого гугления картина проясняется. Ассортимент бесколлекторных моторов радует глаз, но порой огорчает кошелек. Воспользуемся опытом заграничных коллег (к ним мы также еще вернемся), и определим, что наиболее удобными для нас являются моторы на 700kv и 860kv(kv это оборотов в минуту на вольт).
Все еще полагая, что обойдемся малой кровью, остановимся на более дешевой модели, которая дает 700 оборотов на вольт, а при пиковом потреблении в 15А на 10х4,7см лопастях ожидаем получить тягу чуть ли не в килограмм с каждого мотора. Таким образом, максимальная общая тяга предполагается в районе 4,8 кг, потребление тока — 90А. Сразу оговорюсь, я до этого дел с авиацией никаких не имел, поэтому основываюсь на обрывках фраз, вычитанных на просторах тематических форумов.
Также под руку попадается замечательная батарея на 5000мАч, на которой мы можем полетать целых 3,3 минуты. Нас это не очень устраивает, поэтому просто предположим, что потребление будет чуть меньше 90А Еще одна оговорка: расчеты проводились «пальцем в небо», ведь ничего нельзя было сказать с уверенностью, пока не потрогаешь все руками и тестером.
На остальных пунктах остановимся подробнее.
Схема аппарата
Рисуем свои соображения относительно того, из чего должен состоять наш комплекс:
Контроллеры моторов (они же регуляторы скорости) — стандартная для авиамоделистов схема, которая подает на двигатели подготовленное 3-фазное питание со сдвигом фаз, зависящим от ШИМ-сигнала задающего желаемую скорость вращения ротора. В дальнейшем мы снова воспользуемся опытом зарубежных коллег, которые модифицировали прошивку контроллера (а им оказалась всеми любимая АТмега) одного из регуляторов так, чтобы задавать скорость не ШИМ-сигналом, а байтом, записанным по определенному адресу в шину I2C. Такой способ управления дает нам возможность соединить все регуляторы скоростей и управляющий микроконтроллер всего тремя проводами.
Гирокуб — я так обозвал комплект из трех гироскопов и трех акселерометров, необходимый управляющей плате, чтобы отслеживать положение аппарата в пространстве.
Подвес камеры — еще одна важная для съемки деталь. В полете мультикоптер наклоняется в стороны, поэтому камеру необходимо наклонять в обратном направлении, чтобы относительно снимаемого объекта камера была более-менее в одной плоскости, и кадр не шатало. Конструкций подвеса существует большое количество, все они управляются сервомашинками (надежнее было бы повесить настоящий гироскоп, но это непозволительное расточительство драгоценной подъемной силы).
Главная плата (назовем ее автопилотом) — самая сложная часть аппарата. Используя данные, полученные от гироскопов и акселерометров, микроконтроллер вычисляет, на какой угол повернут мультикоптер вокруг каждой из осей, чтобы пересчитать необходимую скорость вращения каждого пропеллера и выровнять аппарат в изначальное положение.
Пульт – по нашему плану это ноутбук, который посылает главной плате сигналы через радиомодем и таким же образом получает данные о состоянии аппарата.
В этот момент нам казалось, что мы справимся со всем тем огромным объемом работ: предстояло разработать софт и хард, протоколы связи и схемы взаимодействия, почти все с нуля. Это было ошибкой, коих мы допустили множество, и будем допускать снова и снова, но мы приобрели опыт, который, быть может, пригодится кому-нибудь из вас. Ну, или хотя бы просто интересно будет почитать
Итак, мы полны энтузиазма и готовы тратить деньги-силы-время на эту прекрасную идею.
Начнем с сенсоров
Для того, чтобы определить углы наклона/поворота мультикоптера по трем осям (а это жизненно важная задача для стабилизации аппарата в воздухе), можно использовать разные сенсоры: оптические(обработка видео, поступающего с камеры), пирометрические (немного урезанный вариант оптического, по сигналам от четырех таких датчиков можно отслеживать линию горизонта), магнитные и инерционные. Идеальным вариантом было бы использование всех вместе, но мы располагаем крайне скудными вычислительными способностями микроконтроллера, так что остановимся на традиционных для воздушной навигации гироскопах.
Современные достижения микроэлектроники позволили собрать механический (точнее MEMS) гироскоп в корпусе 5х5 мм. Компании ST и Analog Devices предоставляют целую линейку микроскопических гироскопов и акселерометров на любой вкус и чувствительность.
Теоретически, для определения углов можно было бы использовать только гироскопы, но есть ряд проблем. Гироскопы показывают угловую скорость вращения (некоторым уровнем напряжения, пропорциональным этой скорости), однако у них есть такое явление, как дрейф: смещение нулевого значения в случайную сторону (в моих руках это проявлялось как остаточное «головокружение» сенсора после того, как я его переставал вращать). Быстрое накопление ошибок не позволит обойтись без других сенсоров.
Еще есть акселерометры, которые аналогичным образом предоставляют информацию о приложенном к ним ускорении. Важный момент: акселерометры показывают разницу фактически приложенного ускорения и привычного нам g, а поэтому, путем нехитрых вычислений, из сигналов от трех акселерометров, направленных вдоль разных осей, можно получить углы поворота системы остчёта нашего аппарата относительно системы остчёта земли (может я криво выразился, в оригинале это frame of reference). Но как только наш аппарат получит какое-нибудь ускорение, полученные значения углов будут неточными (а если ускорение большое — совсем неверными).
Для того, чтобы связать значения, полученные от обоих типов датчиков, традиционно используется фильтр Калмана, в котором долго разбираться, но он дает прекрасный результат, а примеров его реализаций полно в интернете.
Изготовление платы для сенсоров
В принципе, можно было сразу купить один из готовых модулей инерциальной навигации с уже написанным софтом, но это не спортивно, правда? Поэтому мы закупили пару цифровых (а зачем нам аналоговые? I2C рулит!) MEMS-деталек и принялись читать их спецификации, дабы спаять для них плату.
Однако, довольно быстро выяснилось, что разводить плату под неизвестное устройство (даже футпринты — шаблоны для пайки — рисовать надо с нуля) очень скучно и долго. Лучше уж попробовать реализовать готовый модуль сенсоров , для него уже и разводка есть, только бери и печатай (Купить? Неееет, зачем платить 70$ и ждать, пока его привезут!). Заодно освоим метод лазерного утюга, пригодится.
Печатаем шаблоны (не один раз, так как постоянно забываем отзеркалить)
Утюжим десяток раз, пока не добьемся четких дорожек без разрывов
Травим и оттираем тонер. Убеждаемся, что что-то не протравилось, повторяем вышеописанные шаги.
Параллельно напрягаем обленившиеся извилины тригонометрией и «изобретаем» алгоритм управления. Подключаем (хух, на этот раз хоть купленные) контроллеры двигателей к ардуине. Блок питания от компьютера не мог запитать один ненагруженный мотор на средней скорости. Сила.
Надо заметить, делалось это не день, и не неделю. Пока за детальками съездишь на рынок четыре раза (вечно что-то забудешь, или нет в наличии), пока привезут из Америки тот акселерометр, которого не было в наличии…
А потом внезапно пришло осознание того, что металлизацию отверстий в плате дома сделать не получится, потому как отверстия находятся прямо под брюхом гироскопов и акселерометров в QFN-корпусе, который прилегает прямо к плате. Мягко говоря, мы ощутили огорчение. Пришлось заказывать плату на производстве, что обошлось в 17$ за два десятка штук (минимальный заказ). Еще одно препятствие ждало нас при попытке припаять детальки в этих самых корпусах без ножек, так как паяльной станции у нас не оказалось. Впрочем, за символическую плату нам с этим помогли те, у кого она оказалась. Даже умолчу о том, что долго не мог заставить работать эту схему, потому что надо внимательнее читать спецификацию.
Похоже, правда?
Итак, у нас, наконец, есть готовая плата с акселерометрами и гироскопами, можно начинать писать софт. А еще в головы начинает закрадываться мысль, что электронику делать с непривычки — занятие довольно неблагодарное. Но только начинает.