
Один из тестовых полётов нашего коптера
При создании роботов, автономных на высоком поведенческом уровне, надо работать со всеми более низкими уровнями автономности, начиная со стабилизации в заданном положении. Поэтому мы начали с создания собственной платы стабилизации.
Определение автономности
Автономность определяется относительно поставленной задачи. Если задача в том, чтобы робот следовал заданным изначально координатам GPS (допустим, огибая препятствия на своём пути), то под автономностью мы понимаем самостоятельное принятие решений роботом с момента получения маршрута и задания. Автономность на более высоком уровне — это, например, самостоятельный выбор маршрута при «патрулировании» некоторой территории. Начальными данными будет информация об этой территории.
ПИД
Простейшая задача стабилизации — контролировать угол наклона, но из законов динамики вращательного движения следует, что непосредственно управлять можно лишь его второй производной. Самый легкий способ повлиять на нужную величину — использовать ПИД.
MEMS — в нашем случае это гироскоп, акселерометр и магнитометр; DMP — Digital Motion Processor; ESC — контроллер оборотов бесколлекторных моторов.
На вход регулятора подаётся обобщённая координата (в нашем случае угол), на выходе мы получаем момент сил (вторая производная угла). Каждый ПИД-регулятор стабилизирует значение одной обобщённой координаты. Мы используем три ПИД с постоянными коэффициентами, по одному на каждый угол Таита-Брайана.
Матчасть
Определим невязку — разницу между требуемым и реальным значением некоторой величины:
Зададим момент сил для угла
где
Знак минус говорит о том, что при положительных
В чём смысл этой формулы? Напишем уравнение динамики, положив
Для простоты уберём интегральную составляющую (
где
Т. е. чем больше пропорциональная составляющая, тем более «резкой» будет реакция на воздействие (больше амплитуда). Чем больше дифференциальная составляющая, тем быстрее будет происходить затухание (больше декремент).
Из модели затухающих колебаний получаем выражение для коэффициента затухания:
Из возможных решений уравнения нам подходит режим, близкий к критическому (граница апериодичности,
Интегральная составляющая устраняет статическую ошибку. Пусть невязка
Более подробный анализ уравнения ПИД-регулятора можно найти в других статьях: раз, два.
Первая авария
Слишком большая дифференциальная составляющая на практике приводит к автоколебаниям, чего не должно быть в теории. Почему? Уберём все составляющие, кроме дифференциальной, и решим уравнение:
Причина такого эффекта в большом времени реакции системы (и вообще из-за того, что оно ненулевое). Из-за сдвига фаз, вызванного задержкой системы, аргумент функции
т. е. величина
Также результат работы составляющих ПИД приходится ограничивать по модулю. Иначе значение
Компромиссом является установка не слишком маленьких коэффициентов в совокупности с введением ограничения сверху на все три составляющие: пропорциональную, интегральную и дифференциальную.
Стоит сказать, что реальная коррекция в почти горизонтальном положении — около 1–2
Рассмотрим решение уравнения второго порядка (1), которое в одном из случаев является затухающей синусоидой.
На практике действительно получается что-то похожее (пример справа). Для демонстрации коэффициенты специально ухудшены для увеличения времени затухания. Оригинальную прошивку ESC пришлось заменить, т. к. она вносила существенную задержку, из-за которой математическая модель плохо описывала реальную систему.
Поскольку
Калибровка ПИД
По поведению системы (real-time графики составляющих) можно оценить, какой именно коэффициент приводит к возникновению нежелательного эффекта. Поэтому их удаётся легко подобрать вручную (или угадать), для чего мы использовали стенд с гибким подвесом.



Для углов
Хотя такой подход не самый эффективный (мы не знаем «срок годности» коэффициентов количественно и считаем их константами), на практике задача стабилизации коптера в полёте была нами решена. Правда, возникла проблема с управлением, но об этом позднее.
Величины, от которых зависит поведение аппарата
Мы получили экспериментальное подтверждение того, что коэффициенты ПИД-регулятора существенно зависят от внутренних факторов системы. В будущем есть смысл провести ряд опытов по выявлению зависимости коэффициентов от следующих факторов.
Внутренние факторы
Параметры пропеллеров (диаметр X шаг) | Чем больше пропеллеры, тем плавнее поведение коптера |
Размеры коптера (расстояние между центром рамы и осями моторов) | Чем больше размеры, тем плавнее поведение коптера |
Масса полностью укомплектованного коптера | Чем выше масса, тем плавнее поведение коптера |
Заряд аккумулятора (Вольтаж) | Чем выше заряд, тем более динамичное поведение потенциально достижимо у коптера |
Внешние факторы
Температура воздуха |
Чем теплее воздух, тем ниже плотность. Как следствие, плавность повышается |
Атмосферное давление | Чем больше давление, тем выше плотность. Как следствие, плавность понижается |
Относительная влажность воздуха |
Чем больше влажность, тем выше давление водяного пара (и плотность воздуха). Как следствие, плавность понижается |
Cила ветра в терминах модели |
Модуль |
Грабли
В случае с корректировкой мощностей моторов необходимо не допускать слишком низких и слишком высоких мощностей, при которых стабилизация работает неверно.
С одной стороны, существует минимальная мощность, которую уменьшить нельзя, или моторы просто остановятся. С другой, уменьшение мощности может быть необходимо для правильной работы алгоритма. Если мощность (throttle) уменьшить слишком сильно, ПИД может «зашкаливать» в нижнюю сторону. Чтобы решить эту проблему, мы ограничиваем доступные пилоту мощности.
Другая опасность — влияние побочных вибраций от моторов на
Третий подводный камень в том, что применение интегрального члена ПИД может помешать при взлёте с наклонной поверхности. Составляющая
Программное обеспечение
В качестве динамического датчика мы использовали MPU-6050 из-за его вычислительных возможностей. Встроенный процессор (DMP) способен частично обрабатывать данные с датчиков, что позволяет разгрузить центральный контроллер. Но оказалось, что надёжных библиотек для работы с этим устройством под Arduino не существует. Решение jrowberg'а привело к проблемам при использовании на сильно загруженном микроконтроллере. Код в примере опирается на синхронность считывания данных. FIFO-буфер датчика, в который записываются посчитанные величины, переполняется в случае несвоевременного считывания. Поскольку всегда считывается первый элемент из FIFO, то при частичной заполненности появляется задержка между помещением новых данных в FIFO и их обработкой на Arduino. В свою очередь, эта задержка приводит к возникновению автоколебаний. При переполнении буфер приходится очищать: его размер 1024, что не делится на 42 — размер пакета. Поэтому, когда буфер переполняется, в начале FIFO находится часть какого-то постороннего пакета. Иными словами, начиная с определенного момента структура нарушается: начало FIFO не совпадает с началом пакета, и считать корректные данные невозможно.
Кроме этого, понадобилось изменить в библиотеке формулу для преобразования «кватернион ↦ углы» для того, чтобы результат был из полного диапазона углов. Подробности этой проблемы описаны на трекере проекта: https://github.com/it-workshop/Quadrocopter/issues/18.
Бортовая электроника
Основной компонент, который мы разрабатывали самостоятельно, — плата стабилизации. Изначально она была основана на платформе Arduino Uno, потом заменили на более мощную Due, что позволило увеличить частоту ПИД-регуляторов с 40Гц до 66.(6)Гц.
Пропеллеры коптера приводятся в движение компактными бесколлекторными двигателями в связке со стандартными контроллерами оборотов — ESC. Мы используем ESC с изменённой прошивкой.
Подробнее об ESC
Стандарт контроллеров ESC использует в качестве управляющего сигнала меандр, управляющим параметром является скважность. В нашем случае сигнал с пульта ДУ изначально получает контроллер стабилизации, который на выходе вынужденно генерирует требуемый для ESC сигнал. Если отказаться от подобного интерфейса (ШИМ), из-за которого приходится преобразовывать дополнительные данные, можно уменьшить время отклика системы. Но проектирование собственного контроллера двигателей — отдельная задача, которая нами пока не рассматривалась.
Для питания всей системы используется литий-полимерный аккумулятор (3S). Из соображений безопасности мы решили сделать систему мониторинга напряжения на аккумуляторе. В штатном режиме использования аккумуляторов система ведёт себя достаточно стабильно. Однако на начальных этапах работы мы наблюдали эффекты, вызванные неоптимальным использованием батарей:
- Вздувшиеся аккумуляторы. Причина в перезаряде и длительном хранении разряженных аккумуляторов. Производители рекомендуют не разряжать силовые аккумуляторы ниже значения 3,3В на каждую банку батареи, что в нашем случае даёт минимальное допустимое напряжение в 9,9В.
- Выключение моторов при низком напряжении. Это особенность реакции большинства прошивок ESC на низкое напряжение, которая может привести к серьёзной аварии — в первый момент выключается только один мотор, остальные продолжают работать.
Для наших целей ESC было решено перепрограммировать. Благодаря использованию прошивки tgy (от SimonK) мы добились уменьшения задержки системы на пути от центрального контроллера до двигателей. В результате компоненты ПИД и угловая скорость стали более синусоидальными, а поведение всей системы приблизилось к поведению математической модели.
Для измерения динамических параметров используются следующие датчики:
- 6-осевой акселерометр-гироскоп InvenSense MPU-6050
- 3-осевой компас Honeywell HMC5883L
Телеметрия
Дистанционное управление реализовано в двух режимах (для обеспечения более гибкого процесса разработки):
- С помощью модулей xBee Pro в конфигурации «коптер ПК».
- С помощью выделенной радиочастоты (2.4ГГц) в конфигурации «пульт ДУ ↦ коптер».
Помимо управления через пульт ДУ происходит пересылка критических данных между коптером и ПК в режиме реального времени, для чего используются xBee Pro и приложение собственной разработки (см. скриншот). На компьютере можно видеть значение углов и угловой скорости, напряжение на аккумуляторе, мощность двигателей. Возможно настраивать коэффициенты ПИД в режиме реального времени. Программа сохраняет все поступающие данные и поддерживает последующее воспроизведение записанных файлов, что помогает при отладке. В случае ЧП мы можем остановить моторы с компьютера.

Данные, пересылаемые между коптером и ПК:
- ПК ↦ Коптер: канал управления (ПК/пульт ДУ), мощность моторов, настройка для включения/выключения стабилизации, коэффициенты ПИД и ограничения;
- Коптер ↦ ПК: углы, угловая скорость, компоненты
,
,
, данные с джойстика (мощность + 3 угла), мощности моторов, напряжение на аккумуляторе.
Благодаря датчику от InvenSense, начальная обработка данных с датчиков происходит на встроенном процессоре (DMP). Мы разгружаем плату стабилизации, которая может использовать в качестве вычислителя даже маломощный AVR-микроконтроллер.
Воспроизводимость результатов
Чтобы создать такое устройство, нужно собрать аналогичную механическую конструкцию, эквивалентную электронную схему и использовать наше ПО.
Код проекта: github.com/it-workshop/Quadrocopter/tree/MPU-6050-Compass (распространяется на условиях лицензии MIT).
Дополнительная инфа про то, из чего мы делали наш коптер и каков был бюджет
Дизайн рамы сильно влияет на полётные характеристики. Поэксперементировав с материалами, пришли к следующему.
- Пенопластовый каркас позволяет построить крайне лёгкую, но не жесткую систему. У коптера появляется существенная парусность. Из этого материала есть смысл делать небольшие системы (микрокоптеры), которые будут летать в помещении.
- Каркас из фанерных ферм — наименее удачное решение. Много времени на сборку из-за большого числа мелких деталей. Жёсткость системы можно обеспечить с помощью дополнительной проклейки узлов рамы, но тогда она становится неразборной. Надёжная рама получается массивной и обладает заметной парусностью. Прочность низкая, обычно после жёсткой посадки нужно хорошо проклеивать трещины или менять несущие детали. Из плюсов стоит отметить крайне низкую цену.
- Один из самых удачных материалов — алюминий. Мы использовали популярную модель X-525. Жёсткость достаточно высока, раму можно повредить разве что в результате серьёзной аварии. Парусность и масса — оптимально низкие. Недостаток — неустранимый небольшой люфт в местах сочленений деталей рамы.
- Композитное углеволокно обладает крайне высокой прочностью при довольно низкой плотности. Мы использовали модель Talon. Поскольку карбон крайне сложно обрабатывать без специального оборудования, пришлось заказывать готовые детали и применять их без каких-либо модификаций. Из-за того, что связующие узлы в карбоновых каркасах обычно выполнены из пластика или алюминия, на стыках образуются сложные для юстировки места, т. е. возникают частые проблемы при работе с круглым карбоновым профилем: плохая соосность двигателей и люфт в точках соединения.
Список деталей
Компонент | Цена | Количество | Ссылка |
---|---|---|---|
Рама Talon | 1100 руб. | 1 | HobbyKing |
Аккумулятор 3S, 11.1V | 475 руб. | 1 | HobbyKing |
Пропеллеры 10x4.5, 10x4.5R | 150 руб. | 4 | ToyHobby |
Моторы Turnigy Brushless | 330 руб. | 4 | HobbyKing |
ESC | 290 руб. | 4 | HobbyKing |
Пульт ДУ 2.4GHz, 4 канала, с ресивером | 875 руб. | 1 | HobbyKing |
Arduino Due | 2590 руб. | 1 | amperka.ru |
Arduino Wireless Shield | 790 руб. | 1 | amperka.ru |
Датчик InvenSence 6050 | 2335 руб. | 1 | www.lawicel-shop.se |
Цифровой компас HMC5883L | 1290 руб. | 1 | amperka.ru |
XBee Pro | 2290 руб. | 2 | amperka.ru |
Антенна для xBee Pro | 704 руб. | 2 | wifimag.ru |
Итого | 18523 руб. |
Направления для развития
- Процесс тестирования системы стабилизации можно упростить, используя более совершенный стенд. Верёвочный вариант — скорее одноразовое решение, более подходящим был бы жёсткий карданов подвес с тремя степенями свободы.
- Существуют методики автоматизации подбора коэффициентов ПИД-регулятора. Например, основанные на двоичном поиске (метод ветвей и границ). В нашем проекте коэффициенты подбирались вручную.
- Приложение для ПК, используемое для мониторинга и управления, было бы удобнее использовать на планшетном компьютере. В планах портировать приложение на Android или IOS.
Итоги
Главное достижение — отличная команда энтузиастов, способных работать над сложными робототехническими проектами. Мы верим, что всё дело в творческом подходе, возможности для самореализации, а также бесценном практическом опыте, которого всегда не хватает.
Мы создали новый проект системы стабилизации для мультикоптеров. Сейчас мы можем пилотировать квадрокоптер на открытом пространстве. Такие внешние факторы, как ветер, дождь и снег компенсируются автоматически благодаря ПИД-регулятору.
В настоящий момент мы усовершенствуем то, что сделали, и разрабатываем новые функции автоматизации.
Полёт коптера с нашей системой стабилизации
лето 2013.
зима 2014.
весна 2014
О нас
Мы — студенты МФТИ (в своём большинстве), которые в свободное время занимаются проектом на мастерской TechnoWorks. Кроме коптера у нас живут и другие проекты: железные и программные. О них мы расскажем как-нибудь потом. А еще у нас можно придумать и реализовать свою идею (а мы поможем найти людей).
Если есть желание присоединиться к нашей команде, свяжитесь с нами! Мастерская активно расширяется, для новых участников у нас полно творческой и технической работы. И печенек.
technoworks.ru