Пользователь
0,0
рейтинг
24 июня 2014 в 15:52

Разработка → Программируем квадрокоптер на Arduino (часть 1)



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

У нас впереди:
  1. Базовые понятия (для начинающих коптероводов).
  2. PID-регуляторы с интерактивной web-демонстрацией работы на виртуальном квадрокоптере.
  3. Собственно программа для Arduino и настроечная программа на Qt.
  4. Опасные тесты квадрокоптера на веревке. Первые полёты.
  5. Крушение и потеря в поле. Автоматический поиск с воздуха средствами Qt и OpenCV.
  6. Окончательные успешные тесты. Подведение итогов. Куда дальше?

Материал объемный, но постараюсь уложиться в 2-3 статьи.
Сегодня нас ожидает: спойлер с видео, как наш квадрокоптер полетел; базовые понятия; PID-регуляторы и практика подбора их коэффициентов.

Зачем все это?

Академический интерес, который, кстати, преследует не только меня (1, 2, 3). Ну и, конечно же, для души. Я получил огромное удовольствие во время работы и ощутил настоящее непередаваемое счастье, когда «ЭТО» полетело с моей программой :-)

Для кого?

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

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

НЕТ №1!

Не беритесь писать собственную программу для полетного контроллера, пока не попробуете готовые решения, которых сейчас достаточно много (Ardupilot, MegapirateNG, MiltiWii, AeroQuad и т.п.). Во-первых, это опасно! Чтобы управлять квадрокоптером без GPS и барометра нужна практика, а тем более, когда он глючит, переворачивается, летит не совсем туда, куда надо — а этого почти не избежать во время первых тестов. Во-вторых, вам будет во много раз легче программировать понимая, что нужно программировать и как оно должно работать в итоге. Поверьте: математика полета — лишь малая часть кода программы.

НЕТ №2!

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

Базовые понятия


Квадрокоптеры бывают разные, но всех их объединяют четыре несущих винта:
Не смотря на кажущуюся симметрию, пилоту очень важно различать, где у квадрокоптера перед (показан стрелкой). Здесь, как у радиоуправляемых моделей автомобилей: при команде «вперед» квадрокоптер летит не туда, куда смотрит пилот, а туда, куда направлен воображаемый нос квадрокоптера. Это таит в себе опасность: новичкам бывает трудно вернуть к себе подхваченный ветром аппарат, развернутый как-нибудь боком (мы, конечно, не говорим про полеты по камере от первого лица и про «умные» режимы полета с использованием компаса и GPS.) Решению этой проблемы частично могут помочь передние винты или лучи другого цвета, какой-нибудь шарик спереди или разноцветные светодиоды. Но все это оказывается бесполезным, когда пепелац стремительно превращается в точку над горизонтом.

Мы будем летать на раме квадрокоптера формы «X», потому что она мне больше нравится внешне. У каждой конструкции свои плюсы и свое предназначение. Кроме квадрокоптеров есть и другие мультикоптеры. Даже если не считать экзотические варианты, все равно их видов — целая куча!


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



Углы тангажа, крена и рыскания (pitch, roll, yaw) — углы, которыми принято определять и задавать ориентацию квадрокоптера в пространстве.


Иногда слово «угол» опускают и просто говорят: тангаж, крен, рыскание. Но согласно Википедии это не совсем точно. Полет квадрокоптера в необходимом направлении достигается изменением этих трех углов. Например, чтобы полететь вперед квадрокоптер должен наклониться за счет того, что задние моторы закрутятся чуть сильнее передних:

Газ квадрокоптера — среднее арифметическое между скоростями вращения всех моторов. Чем больше газ, тем больше суммарная тяга моторов, тем сильнее они тащат квадрокоптер вверх (НЕ ВПЕРЕД!!! «Тапок в пол» здесь означает наискорейший подъем). Обычно измеряется в процентах: 0% — моторы остановлены, 100% — вращаются с максимальной скоростью. Газ висения — минимальный уровень газа, который необходим, чтобы квадрокоптер не терял высоту.

Газ, тангаж, крен, рыскание — если вы можете управлять этими четырьмя параметрами, значит вы можете управлять квадрокоптером. Их еще иногда называют каналами управления. Если вы приобрели двухканальный пульт, с квадрокоптером вам не совладать. Трехканальный скорее подойдет для маленьких вертолетов: без управления креном летать можно, но на квадрокоптере — не удобно. Если вы хотите менять режимы полета, придется раскошелиться на пятиканальный пульт. Хотите управлять наклоном и поворотом камеры на борту — еще плюс два канала, хотя профессионалы используют для этого отдельный пульт.

Режимов полета существует много. Используется и GPS, и барометр, и дальномер. Но мы хотим реализовать базовый — режим стабилизации (stab, stabilize, летать в «стабе»), в котором квадрокоптер держит те углы, которые ему задаются с пульта не зависимо от внешних факторов. В этом режиме при отсутствии ветра квадрокоптер может висеть почти на месте. Ветер же придется компенсировать пилоту.

Направление вращения винтов выбирается не случайно. Если бы все моторы вращались в одну сторону, квадрокоптер вращался бы в противоположную из-за создаваемых моментов. Поэтому одна пара противостоящих моторов всегда вращается в одну сторону, а другая пара — в другую. Эффект возникновения моментов вращения используется, чтобы изменять угол рыскания: одна пара моторов начинает вращаться чуть быстрее другой, и вот уже квадрокоптер медленно поворачивается к нам лицом (ужас какой):



  • LFW — left front clockwise rotation (левый передний, вращение по часовой стрелке)
  • RFC — right front counter clockwise rotation (правый передний, вращение против часовой стрелке)
  • LBC — left back counter clockwise rotation (левый задний, вращение против часовой стрелке)
  • RBW — right back clockwise rotation (правый задний, вращение по часовой стрелке)

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



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

Различных видов датчиков, которые можно задействовать, очень много. Мы будем использовать ставшие уже почти обязательными во всех квадрокоптерах трехосевой гироскоп и трехосевой акселерометр. Акселлерометр измеряет ускорение, гироскоп измеряет угловую скорость. Благодаря им полетный контроллер узнает текущие углы тангажа, крена и рыскания. Эти датчики бывают встроенными в полетный контроллер, а бывают внешними. Процесс вычисления трех углов по показаниям датчиков — тема для отдельной статьи. Но нам этого здесь знать не надо: за нас все сделает MPU-6050. Это небольшая плата, проводящая необходимые вычисления и фильтрации у себя внутри и выдающая по протоколу i2c уже почти готовые углы. Нам останется их считать, обработать с остальными данными и выдать управляющие сигналы моторам.

Моторы на мультикоптерах потребляют большие токи, поэтому полетный контроллер управляет ими не напрямую, а через специальные аппаратные драйвера, называемые регуляторами скорости (ESC, ре́гуль, е́ска). Эти регуляторы питаются от основного бортового аккумулятора, управляющий сигнал получают от контроллера, а на выходе у них стоит по три провода (A, B, C), которые непосредственно идут к моторам (каждому мотору — свой регуль!)



«Протокол» общения между регулятором и мотором нам не так важен, как «протокол» общения между полетным контроллером и регулятором, ведь нам предстоит из контроллера программно управлять регулятором. Бывают регуляторы, управляемые по i2c, но наиболее распространенные управляются сигналом прямоугольной формы с минимумом 0 вольт и максимумом 3-5 вольт (его называют ШИМ или PWM, а некоторые утверждают, что правильнее — PPM. Подробнее, например, здесь).

«Протокол» — это громко сказано: чтобы дать команду мотору вращаться с максимальной скоростью контроллер должен отправлять импульсы длительностью 2 миллисекунды, перемежающиеся логическим нулем длительностью 10 — 20 миллисекунд. Длительности импульса в 1 миллисекунду соответствует остановка мотора, 1.1 мс — 10% от максимальной скорости, 1.2 мс — 20% и т.п. Практически длительность нуля не играет никакой роли, важна только длительность самого импульса.

При всей кажущейся простоте, здесь кроется засада: полетные контроллеры бывают разные с разными настройками, регуляторы бывают разные, и минимум (1 мс) и максимум (2 мс) — не универсальны. В зависимости от множества факторов диапазон 1-2 мс может на деле оказаться 1.1 — 1.9 мс. Для того, чтобы регулятор и контроллер говорили абсолютно на одном языке существует процедура калибровки регуляторов. В ходе этой процедуры диапазоны регуляторов изменяются и становятся равными диапазону контроллера. Процедура зашита в программу каждого регулятора и включает в себя несколько простых шагов (шаги могут отличаться в зависимости от производителя — читайте инструкции!):

  • Отключить питание регулятора.
  • Снять с мотора пропеллер.
  • Подать на вход регулятора сигнал, соответствующий максимальной скорости вращения.
  • Подать на регулятор питание. Мотор при этом должен сохранять неподвижность без посторонней помощи.
  • Сделать паузу 1-2 секунды, дождаться характерного писка.
  • Подать на вход регулятора сигнал, соответствующий минимальной скорости вращения.
  • Сделать паузу 1-2 секунды, дождаться характерного писка.
  • Отключить питание регулятора.

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

PWM с точно таким же принципом использует и бортовой приемник. Это небольшое устройство, получающая сигналы радиоуправления с земли и передающая их в полетный контроллер. Чаще всего в полетном контроллере для каждого канала управления (газ, тангаж, крен и т.п.) имеется свой вход на который поступает PWM. Логика взаимодействия проста: команда, например, «70% газ» непрерывно идет с земли на приемник, где преобразуется в PWM и по отдельному проводу поступает в полетный контроллер. Аналогично с тангажем, креном, рысканием.

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

  • Снять пропеллеры с моторов на всякий случай.
  • Каким-либо образом перевести контроллер в режим калибровки радио.
  • Контроллер запускает калибровку радио на несколько десятков секунд.
  • За отведенное время двигаем всеми стиками пульта во все стороны до упоров.
  • Контроллер запоминает максимумы и минимумы для всех каналов управления во внутреннюю память на века.
Итак: во время калибровки радио полетный контроллер запоминает диапазоны приемника по всем каналам управления; во время калибровки регуляторов диапазон полетного контроллера заносится во все регуляторы.

Помимо программы для полетного контроллера необходима еще одна программа: интерфейс настройки полетного контроллера. Чаще всего им является программа для PC, которая соединяется с полетным контроллером по USB и позволяет пользователю настраивать и проверять полетную программу, например: запускать калибровку радио, настраивать параметры стабилизации, проверять работу датчиков, задавать маршрут полета на карте, определять поведение мультикоптера при потере сигнала и многое другое. Мы свой интерфейс настройки будем писать на C++ и Qt в виде консольной утилиты. Вот она, если заглянуть в будущее:



Никто не застрахован от случайностей. Даже десятидюймовые пластиковые винты на маленьких моторах могут оставить кровавые синяки на коже, которые будут болеть еще неделю (проверено лично). Элементарно сделать себе новый макияж и прическу, если зацепить стик газа на пульте, пока несешь включенный квадрокоптер. Поэтому полетный контроллер должен обеспечивать хоть какую-то безопасность: механизм armed/disarmed. Состояние квадрокоптера «disarmed» означает, что моторы отключены и даже команда полного газа с пульта не имеет никакого эффекта, хотя питание подано. Состояние «armed» квадрокоптера означает, что команды с пульта выполняются полетным контроллером. В этом состоянии квадрокоптеры взлетают, летают и садятся. Квадрокоптер включается и должен сразу попасть в состояние disarmed на тот случай, если невнимальельный пилот включает его, когда стик газа на пульте находится не в нуле. Чтобы перевести коптер в состояние «armed» пилоту необхоимо сделать какой-то заранее оговоренный жест стиками пульта. Часто этим жестом является удержание левого стика в правом нижнем углу (газ = 0%, рыскание = 100%) втечении пары секунд. После этого полетный контроллер делает хотя бы минимальную самопроверку и при ее успешном прохождении "армится" (к полету готов!) Другим жестом (газ = 0%, рыскание = 0%) квадрокоптер "дизармится". Еще одна хорошая мера безопасности — автодизарм, если газ был на нуле втечении 2-3 секунд.

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

И все же для общего понимания полезно знать основные моменты.

Аккумуляторы


Среди любителей и профессионалов многороторных систем наиболее распространены литий-полимерные аккумуляторы, как основные источники питания бортовой электроники и моторов. Их различают по емкости, напряжению и максимальной токоотдаче. Емкость, как обычно, измеряется в ампер-часах или миллиампер-часах. Напряжение измеряется в количестве «банок» аккумулятора. Одна «банка» — в среднем 3.7 вольт. Полностью заряженая «банка» — 4.2 вольта. Наиболее распространеты аккумуляторы с количеством банок от трех до шести. Максимальная токоотдача измеряется в амперах, а маркируется, например вот так: 25C. C — емкость аккумулятора, 25 — множитель. Если емкость равна 5 амперам, то такой аккумулятор может отдавать 25 * 5 = 125 ампер. Конечно же параметр токоотдачи лучше брать с запасом, но, в основном, чем он больше, тем дороже аккумулятор. Пример маркировки: 25C 3S 4500mah.

Каждая банка является отдельным аккумулятором. Все они спаяны последовательно. Для того чтобы равномерно заряжать все банки предусматривается баллансировочный разъем с доступом к каждой банке отдельно, и использутся специальные зарядные устройства.

Моторы, пропеллеры, регуляторы


Основной параметр бесколлекторного мотора — его kv. Это количество оборотов в минуту на каждый вольт поданного напряжения. Наиболее распространены моторы с kv от 300 до 1100. Kv ближе к 1000 обычно выбирают для малых квадрокоптеров (1-2 килограмма плюс 500 граммов полезной нагрузки) и ставят на них пластиковые пропеллеры до 12 дюймов в диаметре. На больших мультикоптерах (для поднятия хорошей и тяжелой фото-видео техники) или на долголетах (для рекордов по времени полета) обычно стоят моторы с низким kv (300-500) и огромными карбоновыми пропеллерами (15 — 20 дюймов в диаметре). Kv — не единственный важный параметр мотора: часто можно встретить целые таблицы зависимости мощности мотора и тяги от подаваемого напряжения и типа установленного пропеллера. Кроме того, каждый мотор рассчитан на свой диапазон напряжений (количество банок аккумулятора) и на свой максимальный ток. Если производитель пишет 3-4S, не стоит использовать его с 5S аккумуляторами. Это же касается и регуляторов.

Если мотор рассчитан на ток до 30А, то регулятор стоит рассчитывать на ток до 30 + 10А, чтобы не допускать перегревов. Некачественные или неподходящие регуляторы могут вызвать так называемые «срывы синхронизации» и остановку мотора в полете, и вы узнаете еще один мультироторный термин: "поймал планету." Еще один важный момент — толщина и качество проводов. Неправильно рассчитанное сечение провода или плохой коннектор могут привести к пожару в воздухе.

Как видите, нюансов очень много. Я не перечислил даже половины, поэтому самому подобрать комплектующие для первого мультикоптера довольно трудно.


Математика стабилизации, ПИД-регуляторы (PID)


Если вы решили заняться мультикоптерами, то рано или поздно вам придется столкнуться с настройкой ПИД-регулятора, поскольку этот математический аппарат применяется почти во всех задачах стабилизации: стабилизация углов квадрокоптера в воздухе, полет и удержание позиции по GPS, удержание высоты по барометру, бесколлекторные механизмы стабилизации видеокамеры в полете (подвес камеры).

Вы приобретаете двухосевой подвес для камеры, ставите туда, например, GoPro, включаете и вместо стабилизации получаете конвульсии, вибрации и дергания, хотя все датчики откалиброваны и механические проблемы устранены. Причина — неверные параметры ПИД-регуляторов.

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

Для многих устройств использующих ПИД-регуляторы существуют инструкции по настройке, а то и несколько в добавок к многочисленным видеонструкциям от самих пользователей. Но чтобы легче ориентироваться в этом многообразии полезно понимать, как же внутри устроены эти регуляторы. Кроме того, мы же собираемся писать собственную систему стабилизации квадрокоптера! Предлагаю вместе со мной самим заново «изобрести» и «на пальцах» понять формулу ПИД-регулятора. Для тех, кому больше нравится сухой математический язык, я рекомендую Википедию, английскую статью, т.к. в русской пока не так подробно изложен материал.

Будем рассматривать квадрокоптер в двумерном пространстве, где у него есть только один угол — угол крена, и два мотора: левый и правый.



В полетный контроллер непрерывно поступают команды с земли: «крен 30 градусов», «крен -10 градусов», «крен 0 градусов (держать горизонт)»; его задача — как можно быстрее и точнее их выполнять с помощью моторов с учетом: ветра, неравномерного распределения веса квадрокоптера, неравномерного износа моторов, инерции квадрокоптера и т.п. Таким образом, полетный контроллер должен непрерывно решать задачу, какую скорость вращения подавать на каждый мотор с учетом текущего значения угла крена и требуемого. Непрерывно — это, конечно, громко сказано. Все зависит от вычислительных возможностей конкретного железа. На Adruino вполне можно одну итерацию цикла обработки и управления уместить в 10 миллисекунд. Это значит, что раз в 10 миллисекунд будут считываться показания углов квадрокоптера, и на их основе будут отправляться управляющие сигналы к моторам. Эти 10 миллисекунд называют периодом регулирования. Понятно, что чем он меньше, тем чаще и точнее происходит регулирование.

Уровень газа поступает из приемника в контроллер. Обозначим его . Напомню, что это среднее арифметическое между скоростями вращения всех моторов, выраженное в процентах от максимальной скорости вращения. Если и — скорости вращения левого и правого моторов, то:




где — реакция квадрокоптера (усилие), которое создает момент вращения за счет того, что левый мотор вращается на быстрее, чем газ, а правый — на столько же медленнее. может принимать и отрицательные значения, тогда правый мотор закрутится быстрее. Если мы научимся вычислять эту величину на каждой итерации цикла обработки, значит мы сможем управлять квадрокоптером. Понятно, что как минимум должно зависеть от текущего угла крена () и желаемого угла крена (), который поступает с пульта управления.

Представим ситуацию: поступает команда «держать горизонт» ( = 0), а квадрокоптер имеет крен влево:



— разность (ошибка) между и , которую контроллер стремится минимизировать.

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



Здесь P — коэффициент пропорциональности. Чем он больше, тем сильнее будет реакция, тем резче квадрокоптер будет реагировать на отклонение от требуемого угла крена. Эта интуитивно понятная и простая формула описывает работу пропорционального регулятора. Суть элементарна: чем сильнее квадрокоптер отклонился от требуемого положения, тем сильнее надо пытаться его вернуть. К сожалению, эту формулу придется усложнить. Главная причина — перерегулирование.

За несколько десятков миллисекунд (несколько итераций цикла обработки) под воздействием пропорционального регулятора квадрокоптер вернется в требуемое (в данном случае горизонтальное) положение. Все это время ошибка и усилие будут иметь один и тот же знак, хоть и становиться все меньше по модулю. Набрав какую-то скорость поворота (угловую скорость) квадрокоптер просто перевалится на другой бок, ведь никто его не остановит в требуемом положении. Все равно что пружина, которая всегда стремится вернуться в начальное положение, но если ее оттянуть и отпустить — будет колебаться, пока трение не возьмет верх. Конечно, на квадрокоптер тоже будет действовать трение, но практика показывает, что его не достаточно.

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



где D — настраиваемый коэффициент: чем он больше, тем сильнее останавливающее усилие. Из школьного курса физики всплывают смутные воспоминания, что скорость изменения любой величины — производная этой величины по времени:

.

И вот пропорциональный регулятор превращается в пропорционально-дифференциальный (пропорциональное слагаемое и дифференциальное):

.

Ошибку вычислить легко, ведь на каждой итерации мы знаем и ; P и D — настраиваемые перед запуском параметры. Для вычисления производной (скорости изменения ) необходимо хранить предыдущее значение, знать текущее значение и знать время, которое прошло между измерениями (период регулирования). И вот она — физика шестого класса школы (скорость = расстояние / время):

.

— период регулирования; — значение ошибки с предыдущей итерации цикла регуляции. Кстати, эта формула — простейший способ численного дифференцирования, и он нам здесь вполне подойдет.

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

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

Тут есть нюанс. Предположим равна 1 градусу, цикл регулирования — 0.1с. Тогда за одну секунду сумма ошибок примет значение 10 градусов. А если цикл обработки — 0.01с, то сумма наберет аж 100 градусов. Чтобы за одно и тоже время интегральное слагаемое набирало одно и тоже значение при разных периодах регулирования, полученную сумму будем умножать на сам период регулирования. Легко посчитать, что в обоих случаях из примера получается сумма в 1 градус. Вот оно — интегральное слагаемое (пока без настраиваемого коэффициента):

.

Эта формула — не что иное, как численный интеграл по времени функции в интервале от нуля до текущего момента. Именно поэтому слагаемое называется интегральным:

,

где T — текущий момент времени.
Пришло время записать окончательную формулу пропорционально-интергрально-дифференциального регулятора:

,

где — один из настраиваемых параметров, которых теперь трое: . Эта формула удобна в применении из программного кода, а вот формула, которая приводится в учебниках:

.

Существует несколько ее вариаций, например, можно ограничить модуль интегрального слагаемого, чтобы он не превысил определенный допустимый порог (мы так и будем делать).

Практика

Ну а теперь пришло время для практики подбора коэффициентов. Читателям предлагается JavaScript-страничка с виртуальным квадрокоптером, который он уже видел на картинках: подбор параметров PID-регулятора для квадрокоптера (JSFiddle). При первом запуске сразу видно перерегулирование — колебания вокруг требуемого положения. Когда колебания останавливаются, можно наблюдать эффект, что пропорциональный коэффициент не справляется с ошибкой из-за «несимметричного» квадрокоптера (задается галочкой «Asymmetry»). Для настройки доступны параметры P, I, D. Теперь вы знаете что с ними делать. «Скролом» под квадрокоптером можно управлять требуемым значением крена. «Interval (ms):» — интервал регулирования. Уменьшать его — «читерство», но посмотреть как он влияет на качество стабилизации — очень полезно.

Для любителей «чистой» математики можно предложить настроить абстрактный ПИД-регулятор

Введенные параметры автоматически не применяются: нужно жмакать «Apply». Пара небольших советов: если вам кажется, что квадрокоптер слишком медленно реагирует на управление — можно увеличить P, но слишком большое значение P может привести к перерегулированию. С перерегулированием поможет справиться параметр D, но слишком большие значения приведут к частым колебаниям, или опять к перерегулированию. Параметр I, обычно, в 10 — 100 раз меньше, чем параметр P т.к. его сила в накоплении во времени, а не в быстром реагировании.

Ручная настройка ПИД-параметров требует практики. Существуют аналитические методы их вычисления, но они требуют хорошей подготовки и точного знания многих параметров конкретной настраиваемой системы. Как среднее между ручным подбором и аналитическим вычислением есть широкий ряд эмпирических методов, предложенных различными исследователями.

В нашем 2D квадрокоптере меняется только один угол — угол крена. В настроящем 3D квадрокоптере потребуется три независимых ПИД-регулятора для каждого из углов, а управление конкретным мотором будет представлять сумму усилий по всем регуляторам.

Заключение первой части

В этой статье мы познакомились с базовыми понятиями: квадрокоптер и принцип полета, тангаж, крен, рыскание, газ, газ висения, режим полета stabilize, полетный контроллер, гироскоп, акселерометр, регулятор скорости, ШИМ, калибровка регуляторов, калибровка радио, бортовой приемник, интерфейс настройки полетного контроллера, состояния armed/disarmed, автодизарм.

После этого мы заново изобрели формулу ПИД-регулятора немного каснувшись численного дифференцирования и интегрирования, и на своей шкуре испытали, как настраивать параметры P, I, D на виртуальном квадрокоптере.

Теперь, если вы владеете световым мечем-программированием, вы можете приступать к своей программе стабилизации квадрокоптера, или, еще лучше, присоединиться со свежими идеями к существующими open source проектам. Ну а я через неделю-другую, когда появятся силы и время, чтобы соответствовать качеству, продолжу рассказ, как это все программировалось, тестировалось, падало, резало мне пальцы и вовсе улетало в неизвестном направлении. Если вам очень захотелось продолжения — можете напнуть меня здесь или, например, Вконтакте: это немного придает стимула.

В заключении этой части я просто обязан упомянуть человека, который помогал мне в выборе комплектующих и настройке самого сложного (первого!) квадрокоптера на прошивке MegapirateNG и терпеливо отвечал на сотни вопросов по этим самым базовым понятиям: SovGVD, спасибо тебе! :-)

В награду тем, кто смог промотать всю эту простыню, выкладываю обещанное маленькое видео, как наш квадрокоптер с нашими «изобретенными» ПИД-регуляторами, на нашей программе для Arduino Mega 2560 летает:



Конечно, ему не хватает GPS, как в коммерческих и массовых продуктах, немного не хватает устойчивости, но зато — НАШ, и мы знаем его вдоль и поперек до последнего множителя при интегральном коэффициенте! И это действительно круто, что сегодня нам доступны такие технологии.

Разве не в прекрасное время мы живем?!

В какое время мы живем?

Проголосовал 1531 человек. Воздержалось 223 человека.

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

Иван Ефимов @limon_spb
карма
78,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (87)

  • +4
    Кстати у автора на главной фотографии поста есть гео теги, можно посмотреть, где он запускал квадракоптер
    image
    • +2
      Какие-то они СОВСЕМ не точные. Там летать я бы не стал — люди, машины, провода.
      А дело, на самом деле, было тут maps.yandex.ru/-/CVrfy8JE
      • +1
        До боли знакомые места!
        image

        А на Парнасе Вы случаем во дворах не летаете, а то с окна иногда наблюдаю?
        • 0
          Да! Я в вашей статье комментировал уже, что летаем над одними полями :-) Как раз, когда вы тестировали HD FPV, я там чуть подальше подбирал параметры PID :-)

          На Парнасе не летаю… А там есть, где развернуться без риска для окружающих?
          • +3
            Если что то небольшое и недалеко надо потестить, то летаем перед домом там пока пустырь и стройка.

            Да и жена из окна может посмотреть, как оно там все у нас хитро устроено.

            Я собственно почему и интересовался, т.к. очень похожий коптер регулярно наблюдаю из окна.
  • +7
    В опроснике надо было поставить чекбоксы, т.к. оба ответа верны.
  • 0
    Скажите, а как изменяется характер летательного наджета от изменения кол-ва пропеллеров? (трикоптер, квадро-, гекса-) Что больше подходит для новичка?
    • 0
      Для новичка больше всего подходит квадро, т.к. его проще собрать, настроить. Если вас интересует управляемость: я собирал еще гексакоптер и гексакоптер на раме Y6 — разницы никакой. Трикоптер не пробовал, но, некоторые говорят, что управлять им приятнее.
      • 0
        Не приятнее, трешка просто вертлявее по yaw ну и складывается прикольно, хотя сейчас квадрики не хуже складываются.
        • 0
          Квадрик на MultiWii у меня и правда по YAW крутится очень плохо.
          Но на вот этой моей самописной прошивке — на видео в конце видно, что он довольно шустр по YAW :-)

          Еще, когда управлял Y6 — было удобнее определять, где у него перед т.к. всего три варианта.
          • 0
            Делай бикоптер, всего 2 варианта. На трехе кстаии видно что один луч отличается (серва) и направление проще определять.
            • 0
              Бикоптер как-то ближе к вертолету уже: не так модно :-) А вот за твоей трехой понаблюдаю, может и сам решусь собрать.
              • 0
                Со скоростью работы почты Малайзии я еще не скоро полечу, жду пульт, зарядник, серву и аккумы, без них как то не очень летается =) Кстати если что, билд лог и подборка деталей тут.
  • +1
    Статья хорошая (правда, про Adruino), но не понятно, что мешает тупо взять четыре древних коллекторных движка (подходящие по мощности и напряжению), навесить на оси пропеллеры, и подключить их к 4 радиоуправляемым ШИМ модуляторам и не ставить все эти контроллеры и датчики?
    • +2
      Спасибо! (Arduino уже поправили :-) )
      Практически вашим квадрокоптером невозможно будет управлять: пилоту придется рулить непосредственно каждым мотором отдельно. Представьте: пепелац висит к вам боком, его начинает заваливать на один борт и крутить по углу рыскания, например. Быстро ли вы сообразите, какими моторами надо работать больше, а какими меньше? Наверное научиться можно, но скольких квадрокоптеров это будет стоить?
      • +1
        Допустим, пульт собран на джойстике и микроконтроллере. М/к на ходу переводит положение джойстика в значения скважности ШИМ. Вопрос закрыт? Или появляется проблема с устойчивостью к ветру?
        • +1
          В таком варианте уже проще, но все равно, ОООЧЕНЬ сложное управление. Допустим, вы все джойстики отпустили на середине. Квадрокоптер не станет висеть на месте — его начнет довольно БЫСТРО переворачивать и довольно быстро крутить по рысканию. Причина — не идеально ровные моторы, не идеально ровные пропеллеры, ветерок, не идеально распределенный вес. Я пробовал летать в вашем варианте, причем все углы были стабилизированы, кроме YAW: не смотря на то, что на моторы шли одинаковые команды, коптер вертелся как угорелый. Легко представить, если коптер будет вертеться как угорелый по ROLL :-))

          Даже супер специалисты руления квадрокоптерами, которые крутят ими фигуры высшего пилотажа, чаще всего используют какую-никакую стабилизацию углов с датчиками и контроллером.
          • 0
            Всё ясно. Либо аппаратно корректировать чувствительность оборотов моторов на команды, что практически нереально, либо обвесить коптер кучей датчиков и эту коррекцию делать автоматически «на лету» (и в правду же на лету). То есть, из подручных деталей собрать сколь либо управляемый *коптер малореально.
          • 0
            Ещё вопрос возник, чем бесколлекторные двигатели лучше коллекторных именно в квадрокоптерах (кроме веса)?
            • +1
              Как пессимистично вы написали :-) Ардуино — это ведь уже подручный материал в наш век :-)

              На сколько мне известно, у БК моторов в среднем выше КПД, они надежнее, выше обороты из-за отсутствия щеток, а, кроме того, даже открытые БК моторы не боятся влаги в разумных пределах.
              • 0
                Подручный материал — это залежи транзисторов МП-42, паяльник 65 ватт и фанера с помойки :-)
                • 0
                  «Подручный материал» и «хлам» — это немного разные понятия )
              • 0
                Сейчас снова почитал про БК двигатели, но толком не понял, вот нашёл в продаже некий «brushless motor — xxV xxA xxKV xxG». Как узнать схему соединения обмоток и наличие датчика Холла?
                • 0
                  Вы, наверное, относитесь к числу маньяков, которые готовы разбирать и перематывать моторы самостоятельно, или паять свои регуляторы :-) Здесь я вам, к сожалению, не помогу: в регуляторы и моторы залезал только пощупать осциллографом (жив/не жив)

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

                  Могу сказать одно: свой регулятор — дело тонкое и сложное. Уже сколько времени производят БК моторы и регули, а все еще не решены некоторые проблемы. И даже на популярных прошивках происходят отказы в определенных комбинациях мотор/регуль, особенно с плоскими многополюсниками.
                  • 0
                    Нет, речь о том, как понять, пойдёт двигатель для коптера или это дешёвый мусор для настольных вентиляторов. А насчёт «маяньячизма» — да, я не брезгую переборкой электродвигателей, уже приходилось шуруповёрты восстанавливать в почти полевых условиях.
                    • +1
                      Хорошо, если для этого двигателя вы найдете таблицу, в которой показаны:
                      потребляемый ток, процент скорости вращения, количество вольт, тип и размер пропеллера, создаваемое усилие. Такие таблицы есть для многих моторов. Если все-таки ее нет, остается полагаться на опыт предшественников (отзывы на самом сайте, на форумах, иногда на Ютубе можно внезапно найти коптер с выбранными моторами).
                      Коптер из статьи и его братья отлично себя чувствуют на моторах за 10$, но тяжести больше 1кг им не под силу.
                      • +1
                        Всё понятно, то есть исключительно силами коллективного разума. Без опыта лучше не эксперементировать. :-) Спасибо за ответы.
                    • 0
                      Не сравнивайте шуруповёрт и движки коптера. В шуруповёрте нет никаких требований по весу, например.
                      Все «бытовые» движки, которые вы можете найти — для авиамоделизма — мусор. Кроме движков привода диска из DVD-ROMов. Но они по сути те же бесколлекторники.
                      А коллекторные движки применяют на микрокоптерах, типа такого например. Они применяются, где нет возможности городить 4 сложных регуля, и цена первична — коллекторные движки значительно дешевле.

                      И забудьте про сборку коптера из хлама. Оно не полетит, сил и нервов истратится более чем достаточно.
                      • 0
                        А какие движки в Ar Drone? По виду вроде коллекторные, но к ним три провода идет.
                        • 0
                          В первом ардроне вроде как коллекторные, во втором — бесколлекторные инраннеры.
                      • 0
                        Всё понятно. А какая в среднем мощность и kv у двигателей CD/DVD приводов?
                        • 0
                          По их виду — если заменить кольцевой «резиновый» магнит на мощные редкоземельные, и перемотать под нужное напряжение — ну ватт 100 край, а то и 80.
                          • 0
                            В общем, применить их как есть практически нереально. Понятно.
                            • 0
                              Именно так. Неудобно, тупо и тяжело.
                              Бесколлекторники значительно лучшего качества можно просто купить. Стоят они недорого, начинаются чуть не с 8 долларов. И это будет 100% лучше, чем двигло из двд-привода.
                              • 0
                                Спасибо за развёрнутые ответы!
                  • +1
                    Верно, у нас разработка своих регулей заняла более 3 лет. И проблема с плоскими многополюсниками решена. Заодно решили и другие проблемы и задачи.
    • +1
      Радиоуправляемым — в смысле, с земли? Ну тогда представьте себе, что получится, если у такого аппарата пропадёт один канал (помеха, например). Пропал канал — считайте, нету движка (или движок на максимум). Рухнет камнем с дикими фигурами. Контроллеры нужны, КМК, для того, чтобы сосредоточить управление аппаратом на нём самом, сведя к минимуму зависимость от ненадёжного канала связи.
      • 0
        С земли или по интернету, не важно. В общем, без автопилота, с ручным управлением.
  • +6
    Неплохо излагаете. Жду продолжения.
  • 0
    А где можно найти серийные Б/У коптеры на продажу? Мб есть какой-то крупный форум
    • 0
      Можно сказать «Альма-матер» моделизма вот. Там есть и барахолка. На Авито тоже видел коптеры несколько раз.
  • 0
    P=0.2
    I=0.005
    D=0.1

    , а у вас какие, limon_spb?
    • 0
      Один в один с вами. Но колебания все равно есть, хотя они у меня уходят, если выставить interval = 5 :-)
      На самом деле, на разных компьютерах могут получаться немного разные значения: таймер физики установлен на 5мс. Но не все браузеры и компьютеры будут так часто считать.
      • 0
        А у меня
        P=0.3
        I=0.05
        D=0.1
        • 0
          На мой вкус большеват I: на вашей картинке его заметно под конец. А так — супер! На самом деле в реальных условиях колебаний быть не должно совсем: график ошибки должен плавно вставать в ноль. Но здесь этого добиться почти не возможно — нужно сильно уменьшать P и D — тогда регулирование будет плавным и без перерегулирования, но ошибка «asymmetry» в программе сделана уж слишком большой и при малых I медленно компенсируется. Но ее можно убрать галочкой :-)
        • 0
          vvzvlad,
          для коэфф. усиления, что 0.1, что 0.2, что 0.3 тут не сильно заметно…
          Ну а коэфф. интегрирования в 10-100 раз меньше Kp — думаю нормально… не вижу разницы сильной. Но я со своей колокольни…

          И у меня примерно на таких котельная работает ))))
  • +1
    вместо ПИД использую метод обратного хода интегратора (integral backstepping), подбирать нужно всего один параметр, коптер стоит как вкопанный
    • 0
      Очень интересно, что это за метод. Есть что почитать по нему в максимально доступной форме?
    • +1
      Поддерживаю предыдущего оратора. Будет супер, если кто-нибудь про него напишет доступным языком с картинками и примерами.
      • +1
        можно успешно и ПИД пользовать, только с «нюансами», т.к. чистый теор-й ПИД регулятор не совсем хорош применительно к коптерам…
        вот тут писал на примере multiwii-го регуля про некоторые «рецепты» forum.rcdesign.ru/f123/thread224458-41.html#post4063913
  • +2
    Прочтите книгу автора Samir BOUABDALLAH «design and control of quadrotors
    with application to autonomous flying»
    Там как раз есть исследование и сравнение разных регуляторов, применимых к мультикоптерам и вывод уравнений для обратного хода интегратора.
    • +1
      сор, не туда ответил
      • 0
        Спасибо, скачал. Эпическое произведение, тем кто серьезно увлекается летающей техникой, будет полезно прочитать.
  • +3
    Приятно, что автор поста держит марку хабра по стилю и качеству представления материала. Респект)
  • 0
    Я как бы совсем не в теме, но почему все стараются сделать квадракоптер? В чём у них плюсы по сравнению с вертолётом? Я вроде бы где-то читал, что вертолётом сложнее управлять.
    • 0
      Квадрокоптер сделать проще, чем вертолет: ему не нужен переменный угол атаки лопастей. Если же говорить о вертолетах соосной схемы без переменного угла атаки, то небольшие модели на ветру практически не держатся, а переворачиваются. Еще, вертолет способный поднять килограмм должен иметь большие и опасные лопасти. Конечно, такой квадрик тоже опасен, но меньше. Про управление — если на вертолете стоят «умные мозги», то разницы в управлении нет.
  • 0
    Большое спасибо за статью. Как раз планирую уже подходить к этапу программирования. Все железо собрали уже :)
    • 0
      А какое железо получилось, и какую цель преследуете вы, занимаясь написанием собственной прошивки?
      • 0
        Набор самых бюджетных китайских элементов. По большей части это составные части H107L. Хотелось бы понять что да как, прежде чем вкладываться в нечто более крупное
  • 0
    А данные с датчиков вы тоже сами собираете? Как организованна фильтрация?
    • 0
      О конкретных деталях планирую поведать в следующей статье. Кратко могу сказать, что в качестве датчиков использую MPU-6050 — это плата со встроенной обработкой и фильтрацией данных. Т.е. нужно только настроить, да считывать квантерионы и углы по i2c, и даже для этого есть библиотека, которая начинает сносно работать после небольшого напильника. Внутри самой платы MPU-6050 есть какие-то фильтры нижних частот и скорее всего что-то вроде фильтров Калмана, но разбор ее алгоритмов тянет на хорошее исследование и несколько статей.
      • 0
        Эх, именно на несколько статей я и надеялся… :)
        • 0
          Про алгоритм получения углов из показаний датчиков очень хорошо написано тут (несколько статей):
          tom.pycke.be/mav/69/accelerometer-to-attitude
          на английском, правда. Можете взяться за перевод — будет очень востребованный материал :-) на самом деле :-)
          • 0
            Да-да, эта статья мне отлично знакома! :)
            Думаете будет востребованн? Ведь даже на хабрахабре есть штук 5, если не больше статей по фильтру Калмана. Не стану утверждать что полностью доволен ими, но это субъективное мнение. Стоит ли заново поднимать тему…
            • 0
              Тут же будет идти фильтр Калмана в самом конце, а до него: гироскопы, акселерометры. Т.е., получается, что-то вроде конкретного применения фильтра. По моему субъективному мнению вот здесь в этих статьях про саму фильтрацию объяснено очень кратко в сравнении с тем, как до этого разжеваны элементарные вещи. Может, можно как-то это исправить, сделав перевод с хорошими пояснениями от переводчика :-) Но я фантазирую.
              • +1
                Согласен с вами, про фильтр Калмана в этой статье не всё раскрыто, а под конец так вообще как-то скомкано, как по мне. По этому поводу спешу поделиться другой ссылкой, которая мне куда больше пришлась по вкусу: www.linushelgesson.se/2012/04/pitch-and-roll-estimating-kalman-filter-for-stabilizing-quadrocopters/
                А что касается статьи — то, пожалуй, может действительно возьмусь. В конце концов, попытаться кому-то что-то объяснить — это неплохой способ и самому в этом разобраться! :)
                • 0
                  Это правильный подход! У меня во время написания статьи многое разложилось по полочкам гораздо аккуратнее, что, казалось, и так хорошо знал. В любом случае, если народ не протестует против 10 статей «что-то там во сколько-то строчек кода на чем-то там», то уж очередной взгляд и объяснение фильтра Калмана точно лишним не будет: все зависит от вас.
  • +2
    Спасибо за статью.
    Когда с текущими проектами подразберусь начну свой коптер делать. Планирую полетный контроллер на FPGA реализовать. Цель сборки ученическая. Имхо использовать готовые прошивки это как готовый коптер купить. Если нужен чисто коптер на полетать то годный способ, если кайф от правильного применения рук и мозгов то не очень.
    Жду продолжения.
    • +1
      Спасибо за отзыв!
      По поводу сборки — тут вы не совсем правы: заказать детали из китайских магазинов и собрать из них коптер — дело хлопотное и требующее не слишком кривых рук и немного инженерной мысли. Не могу не поддержать ваше желание самому писать прошивку, но советую сначала полетать на готовых: поверьте, трудностей будет прилично. Да, свой тестовый коптер я собрал за пол дня, но он был у меня далеко не первый, а первый я собирал почти неделю и 4 выходных дня: огромная куча вопросов, голова опухала, в мозгу все мешалось в кучу :-)
      • +1
        Раму с моторами уже собрал давно, спасибо авторам предыдущих статей по коптерам. У меня есть китайский вертолетик, летаю вроде нормально :), думаю в зачет летных часов пойдет. Есть еще мелкий коптер (на ладони помещается) на нем еще полетаю.
        • 0
          Как вы смогли собрать раму и до сих пор терпеть, ни разу на ней не взлететь? :-) Возьмите хоть мозги NanoWii за 20$ чисто попробовать :-) Вертолетик помогает, да. Но обычно они трехканальные, и стики у коптеров принято иначе назначать, чем у них, так что некоторое время на переучивание уйдет.
          • 0
            Это моя боль :) Слишком много всего интересного на все просто времени не хватает. Я еще софт пишу, учусь чинить и собираю ретрокомпы. Строю дачу.
            По поводу сборки из заказанных комплектующих вы правы, дело хлопотное, но можно экономить время покупая набор рама\двиги\пропеллеры\эски.
            Еще причина почему не летал — никак не могу выбрать зарядку, которая бы понравилась.
            По поводу управления еще вопрос — вы пробовали игровым джойстиком управлять? Это разве не удобнее?
            • 0
              Честно говоря джойстик не пробовал. Но к пульту обычному уже привык так, что он кажется продолжением рук :-)
  • +1
    Спасибо не только за интересный фидбэк, но и отличный ликбез по авионике, добавил в избранное, пригодится.
  • 0
    Обычно каналы модулируются одной несущей, с разделением по времени. Так что если связь пропадает (помеха, слабый сигнал и т.п.) то пропадают все каналы. На этот случай могут быть предусмотрены разные режимы. Самый простой — так называемый Fail Safe отключит все моторы и квадрик камнем падает. Либо может включиться автопилот, возврат на базу и т.п. в зависимости от настроек и установленного оборудования.
  • 0
    автодизарм, если газ был на нуле в течении 2-3 секунд.
    На мультикоптере вполне понятное поведение, на вертолете же достаточно холда (который оставляет управление шагом и выводит газ в 0 на электрике и на холостые на ДВС).
    • 0
      Интересно. Скажите, а автоматический холд вертолетчики не используют? Как же вероятность того, что пилот забудет его выставить?
      • 0
        Защита в рамках приемника (иногда) и ESC на ненулевое значение газа при подаче питания обычно есть. Часть прошивок ESC, например, используют максимальный газ при подаче питания, как маркер для входа в режим конфигурации. Но варианта, описываемого вами, не встречал.

        Холд выносится на отдельный переключатель, это позволяет использовать его как самостоятельный режим (для авторотации, штатной посадки, проверки механики). На передатчике холд обычно маппится так, чтобы его включить было проще, чем выключить. Это, ко всему прочему, помогает спасти больше механики при падении (если успеть щелкнуть холд, конечно).

        С точки зрения безопасности — сначала включается передатчик, проверяется режим (выставляется normal, включается hold) и только потом — борт (плюс многие современные приемники уходят в failsafe до появления сигнала). Проверка режима естественна, т. к. взлетать на idle-1 (обычно минимум газа около 80-90% в районе 1-3°) — опасно.
        • +1
          А как же: полетал, сел быстро подправить камеру, забыл поставить холд и порубил щщи?
          • +1
            Правильные рефлексы тренируются естественным отбором ,)
  • 0
    Ждем продолжения или все затухло?
    • 0
      Статью начинал делать с заключения, где писал:
      Ну а я через неделю-другую продолжу рассказ...

      и потом не поправил. А на самом деле получилось, что работа над первой частью закончилась через ТРИ недели после начала (почти каждый день по несколько часов) :-) Она выжала у меня просто все соки. Конечно, хоть тот коптер уже давно разобран, но видео есть, программа есть: я должен побороть себя и написать вторую часть.
      • 0
        Понимаю вас, обычное дело. Сам попадал в такую ситуацию, наобещаешь, а силы не рассчитал или «перегорел». Таких «серий» статей на хабре масса, к сожалению. Убеждаюсь, что лучше ничего не обещать вообще. Если, все таки, удастся продолжить работу люди сами придут и скажут спасибо. Или еще подход, пишем кратко «по верхам» и уже после посмотреть какие вопросы будут и написать развернуто делая упор на места с большим непониманием аудитории.
        В любом случае спасибо за проделанную работу. Надеюсь к вам вернется «вдохновение».
      • 0
        И еще, сайт вы свой по тематике забросили так же? ;)
        • 0
          Сайт потихоньку живет. Друзья помогают с ним по web-части. Бложик переезжает на поддомен blog.kopterovod.ru/. Планов много, всему свое время :-) Есть еще группа ВК vk.com/kopterovod

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