Инфоурок Информатика КонспектыМоделирование Квадрокоптера. Методический материал для 10-го класса

Моделирование Квадрокоптера. Методический материал для 10-го класса

Скачать материал

Моделирование Квадрокоптера.

Методический материал для 10-го класса

Настоящий методический материал используется  на уроках информатики в 10-м классе и предназначен для иллюстрации практического применения при моделировании реальных систем. Разработан в развитие темы «Модели оптимального планирования» (Параграф 20 И.Г. Семакин и др., Информатика. 10 класс,М.: Бином, Лаборатория  знаний, 2014)

 

 

 

 

Квадрокоптеры в наше время давно перестали быть чем-то из разряда диковинки. Сегодня это и игрушка, и инструмент для творчества, и средство зарабатывания денег. Казалось бы, есть 4 двигателя, 4 винта, плата в которой есть какая то готовая прошивка, батарейка, немного проводов и пульт – вот рецепт счастья. Что может быть проще? Все это правда, но мы попробуем взглянуть несколько дальше. Сегодня удешевление и миниатюризация технологий позволяет делать такие аппараты полностью автономными. А их разнообразие делает функционал подобных машин практически безграничным. А с повсеместным внедрением этих самых технологий, мы можем представить квадрокоптеры, как полноценную единицу нового интернета – Интернета вещей.

 

1         АППАРАТНАЯ ЧАСТЬ

1.1        Техническое устройство квадрокоптеров и математика полета

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

-          Управление;

-          Полетный контроллер и электроника;

-          Питание;

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

-          PID датчики.

         Вообще квадрокоптеров существует великое множество, но всех их объединяет одна вещь – четыре несущих винта.

Описание: https://habrastorage.org/getpro/habr/post_images/9a8/8e8/331/9a88e83311d45323b463c27b61bd21c3.png

Описание: https://habrastorage.org/getpro/habr/post_images/53c/748/9c4/53c7489c45995345b5d65f658742a233.png

Описание: https://habrastorage.org/getpro/habr/post_images/33e/6b1/d33/33e6b1d33a7c20a6154332340a546674.png

Описание: https://habrastorage.org/getpro/habr/post_images/690/205/4f9/6902054f93423197b7093bac17fe1de9.png

Описание: https://habrastorage.org/getpro/habr/post_images/946/53d/dad/94653ddad9e5dd8a3f0477f86e8f2ce5.png

Описание: https://habrastorage.org/getpro/habr/post_images/de5/415/362/de541536288b239ca72500177f8e5aee.png

Рисунок 1 – Варианты конструкции рам квадрокоптера

Не смотря на кажущуюся симметрию, пилоту очень важно различать, где у квадрокоптера перед (показан стрелкой). Вспомним радиоуправляемые машинки: нажимая на газ, автомобиль движется не туда куда смотрит оператор, а туда куда направлена его передняя часть. Тут то же самое: при команде вперед квадрокоптер устремляется в сторону своего воображаемого носа. Для удобства ориентации часто в конструкции применяют винты и лучи другого цвета, либо оснащают переднюю часть светодиодами. Но когда расстояние от пункта управления переходит за километр, то подобные решения становятся бесполезными – тут спасает видеокамера с трансляцией в реальном времени на смартфон или планшет.

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

https://habrastorage.org/getpro/habr/post_images/62b/019/4a5/62b0194a51d7507b7c9ba573fdc94e4c.png

Рисунок 2 – Схема ручного управления квадрокоптером    

  

1.1.1     Управление 

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

https://habrastorage.org/getpro/habr/post_images/cee/343/33d/cee34333da9ffa9431e699d42eb8ee10.gifhttps://habrastorage.org/getpro/habr/post_images/14f/b14/a73/14fb14a73d90543d287955f53eb127e5.gifhttps://habrastorage.org/getpro/habr/post_images/c9d/58f/ffe/c9d58fffe5d31afa35d443f77a948418.gif

Рисунок 3 – Углы Рысканья, Тангажа и Крена

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

       Газ квадрокоптера - среднее арифметическое между скоростями вращения всех моторов. Чем больше газ, тем больше суммарная тяга моторов, тем сильнее они тащат квадрокоптер вверх (не вперед, полный газ здесь обозначает наискорейший подъем). Обычно измеряется в процентах: 0% — моторы остановлены, 100% — вращаются с максимальной скоростью. Газ висения — минимальный уровень газа, который необходим, чтобы квадрокоптер не терял высоту.

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

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

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

https://habrastorage.org/getpro/habr/post_images/341/09c/feb/34109cfeb1325ec11a5925410416e84e.gif
       Рисунок 4 – Направления вращения винтов.

·         LFW — left front clockwise rotation (левый передний, вращение по часовой стрелке)

·         RFC — right front counter clockwise rotation (правый передний, вращение против часовой стрелке)

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

·         RBW — right back clockwise rotation (правый задний, вращение по часовой стрелке)

1.1.2     Полетный контроллер, электроника

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

https://habrastorage.org/getpro/habr/post_images/5d4/d29/571/5d4d29571c2e44ce85fdad821bdb8af0.png

Рисунок 5 - Виды полетных контроллеров

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

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

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

https://habrastorage.org/getpro/habr/post_images/64f/a68/967/64fa689675e9558e13fc530ce290080a.gif
Рисунок 6 – схема подключения регулятора скорости (ESC)

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

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

1.1.3     Питание

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

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

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

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

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

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

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

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

Описание: https://habrastorage.org/getpro/habr/post_images/987/fde/420/987fde420fd3a0854b9bac6d38e47465.png

Рисунок 7 – Квадрокоптер в двумерном пространстве


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

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

Описание: https://habrastorage.org/getpro/habr/post_images/519/6cf/2fe/5196cf2fefec6a552c78b23f7b839f35.gif
Описание: https://habrastorage.org/getpro/habr/post_images/850/bce/b9c/850bceb9ccc101bb79f2f796612f717b.gif

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

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


Описание: https://habrastorage.org/getpro/habr/post_images/3fa/8a1/71b/3fa8a171be4df8f91c95e8b35ca7f432.png

Рисунок 8 – Изображение ошибки между target roll и roll.


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

         Чем больше разность между желаемым углом крена и текущим, тем сильнее должна быть реакция, тем быстрее левый мотор должен закрутиться относительно правого. Если это записать с использованием наших обозначений:
Описание: https://habrastorage.org/getpro/habr/post_images/d75/b07/41d/d75b0741d4402ca24513df83d59b8ecc.gif

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

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

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

Описание: https://habrastorage.org/getpro/habr/post_images/d35/846/20f/d3584620f4b13dc128bbfffe67b87a35.gif

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

Описание: https://habrastorage.org/getpro/habr/post_images/af3/5dd/24c/af35dd24c7bca8b131420c365c650495.gif.

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

Описание: https://habrastorage.org/getpro/habr/post_images/1ef/92b/7f5/1ef92b7f57f69e694e600419713c1928.gif.

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

Описание: https://habrastorage.org/getpro/habr/post_images/516/061/81e/51606181e138d5e9505a66fa416e4554.gif.

        
Описание: https://habrastorage.org/getpro/habr/post_images/e59/acf/d82/e59acfd823451727672042a740be8c27.gif — период регулирования; error previous — значение ошибки с предыдущей итерации цикла регуляции. Кстати, эта формула — простейший способ численного дифференцирования, и он нам здесь вполне подойдет.

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

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

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

Описание: https://habrastorage.org/getpro/habr/post_images/d6b/8e4/715/d6b8e47154fb589a3d9d4234646f1cb9.gif
Эта формула — не что иное, как численный интеграл по времени функции 
error  в интервале от нуля до текущего момента. Именно поэтому слагаемое называется интегральным:

Описание: https://habrastorage.org/getpro/habr/post_images/c27/67c/6f9/c2767c6f9210431ee5c174080e81774d.gif,

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

Описание: https://habrastorage.org/getpro/habr/post_images/731/2ca/657/7312ca65766354c215a731d0896cc106.gif,

где 
Описание: https://habrastorage.org/getpro/habr/post_images/c32/64e/8b9/c3264e8b949f2e9430fa37dc1f7ce989.gif — один из настраиваемых параметров, которых теперь трое: P, I, D. Эта формула удобна в применении из программного кода, а вот формула, которая приводится в учебниках:

Описание: https://habrastorage.org/getpro/habr/post_images/d7c/a5e/337/d7ca5e3376c3263a381a9d2da0d32867.gif.

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

1.2             Анализ существующего оборудования, составление спецификации, варианты конструкторских решений

Основой любого квадрокоптера является рама. Так как наш аппарат не планируется запускать в помещении, создавать тяжелую машину с базой метр на метр, как минимум не безопасно, я остановился на популярном варианте размером 250 мм.

Описание: DSC_0374

Рисунок 9 – Один из вариантов рамы квадрокоптера(250 мм)

Полетный контроллер: Arduino Mega 2560 одна из самых мощных плат от Ардуино.

Гироскоп + Акселерометр MPU6050.

Зрением квадрокоптера станут 4 ультразвуковых дальномера с их помощью можно отслеживать препятствия в определенном диапазоне пространства.

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

Рисунок 10 – Ультразвуковой дальномер

Итак, полная спецификация:

·        Arduino Mega 2560 - контроллер

·        MPU6050 – гироскоп+акселерометр

·        Рама 250 мм

·        Бесколлекторный двигатель 1000 kv 4 шт.

·        ESC A10 4 шт.

·        Батарея 11.1 v

·        Винты 10 дюймов 4 шт.

·        Плата питания APM PX4

·        Пульт управления 4-х канальный + приемник

·        Провода, коннекторы, хомуты

 

Рисунок 11 - Схема расположения дальномеров

 

 


 

2         ПРОГРАММНАЯ ЧАСТЬ

Программирование контроллеров Arduino производится на языке программирования С++. В качестве среды программирования можно использовать родной компилятор Ардуино, однако его интерфейс не самый дружелюбный к пользователю, поэтому мы будем использовать Visual Studio 2015, а с помощью компилятора Ардуино только загружать прошивку на контроллер.

2.1        Программная структура прошивки полетного контроллера

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

·        Метод Setup

·        Метод Loop

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

Loop – выполняется циклично на бесконечное количество итераций на протяжении всей работы контроллера. Соответственно сюда заносятся все методы отслеживающие сигналы с датчиков и отдающие сигналы моторам. Нам необходимо непрерывно отслеживать показания гироскопа/акселерометра и давать сигналы моторам.

Исходя из вышеизложенного материала, основное тело прошивки будет выглядеть примерно так:

void setup() 
 {
 
      инициализация_моторов(); 
      инициализация_приемопередатчика(); 
      инициализация_ПИДдатчиков(); 
      подготовка_моторов(); 
      инициализация_WiFiмодуля();  
 }
 

void loop() 
{
 
      обновление_показаний_гироскопа/акселерометра();
 
      обновление_сигналов_управления();
 
}

Рассмотрим чуть подробней некоторые методы.

2.1.1     Инициализация моторов

         Для инициализации моторов нам необходимо привязать каждый из них к своему коннектору на плате. Это можно сделать с помощью конструкции  attach:

void инициализация_моторов()

{ 
      мотор0.
attach(Пин_мотора0); 
      мотор1.
attach(Пин_мотора1); 
      мотор2.
attach(Пин_мотора2); 
      мотор3.
attach(Пин_мотора3);

}

2.1.2     Инициализация ПИД-датчиков

         Для инициализации ПИД-датчиков нам нужно задать границы вывода на коннекторах к которым они присоединены с помощью конструкции SetOutputLimits, которая принимает 2 аргумента: минимальное и максимальное значение параметра регулируемого ПИД-датчиком. Далее необходимо включить непосредственно сами датчики с помощью метода SetMode, передав ему аргумент AUTOMATIC. А также задать интервал времени через который ПИД-датчик будет оценивать положение машины – SetSampleTime. Не забываем, что в зависимости от показаний ПИД-датчиков изменяются 3 параметра управления: тангаж, крен и рысканье. Соответственно, вышеописанные операции должны быть проделаны для каждого из этих параметров:


        
void Инициализация_ПИДдатчиков()

{ 
      контроллер_крена.
SetOutputLimits(Минимальное значение,максимальное значение); 
      контроллер_тангажа.
SetOutputLimits(Минимальное значение,максимальное значение); 
      контроллер_рысканья.
SetOutputLimits(Минимальное значение,максимальное значение); 
      контроллер_крена.
SetMode(AUTOMATIC); 
      контроллер_тангажа.
SetMode(AUTOMATIC); 
      контроллер_рысканья.
SetMode(AUTOMATIC); 
      контроллер_крена.
SetSampleTime(10); 
      контроллер_тангажа.
SetSampleTime(10); 
      контроллер_рысканья.
SetSampleTime(10); 
}

 

2.1.3     Подготовка моторов

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


void подготовка_моторов()

{ 
      мотор0.
writeMicroseconds(1000); 
      мотор1.
writeMicroseconds(1000); 
      мотор2.
writeMicroseconds(1000); 
      мотор3.
writeMicroseconds(1000); 
}

 

2.1.4     Инициализация приемопередатчика

         Приемопередатчик передает на контроллер 4 параметра, позволяющих нам управлять квадрокоптером, это Газ, Тангаж, Крен и Рысканье. Следовательно, нам нужно выделить 4 коннектора для его подключения. Для начала выполняются стандартные функции рinMode и digitalWrite чтобы задействовать необходимые пины. Далее нам нужно воспользоваться прерываниями. Прерывания позволяют одновременно исполнять некое действие в цикле и параллельно ожидать другого события, которое изменит исполняемое действие. В нашем случае, мы будем крутить двигатель с некой скоростью и ожидать команды изменения газа, тангажа, крена, рысканья, которые вызовут функции изменения скорости вращения всех или некоторых винтов. Прерывания вызываются с помощью метода attachInterrupt который принимает 3параметра: номер пина, функция вызываемая прерыванием и режим обработки прерывания (в нашем случае Rising т.к. нас интересует только смена значения на порту с Low на High)

void инициализация_приемопередатчика()

{ 
     
pinMode(пин_крена, INPUT);

digitalWrite(пин_крена, HIGH); 
     
attachInterrupt(пин_крена, функция, RISING); 

     
pinMode(пин_тангажа, INPUT);

digitalWrite(пин_тангажа, HIGH); 
     
attachInterrupt(пин_тангажа, функция, RISING); 

     
pinMode(пин_газа, INPUT);

digitalWrite(пин_газа, HIGH); 
     
attachInterrupt(пин_газа, функция, RISING); 

     
pinMode(пин_рысканья, INPUT);

digitalWrite(пин_рысканья, HIGH); 
     
attachInterrupt(пин_рысканья, функция, RISING); 
}
 

2.1.5     Обновление сигналов управления

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

·        Узнать о наличии сигнала с пульта или инструкций от алгоритма

·        Обновить показания ПИД – датчиков

·        Высчитать необходимые корректировки с учетом предыдущих двух пунктов

·        Обновить сигналы на моторы

 

2.2        Алгоритмы обхода препятствий

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

 

2.2.1      Обзор существующих алгоритмов обхода препятствий

2.2.1.2 The Bug Algorithms

Простейшим алгоритмом обхода препятствий является The Bug Algorithm (Алгоритм-ошибка). Согласно ему, когда нашему роботу попадается препятствие, он полностью огибает объект ,чтобы найти точку находящуюся на минимальном расстоянии до цели и затем отправляется к цели с этой точки.

Рисунок 12 – Пример работы простого Bug Algorithm

Объективно, этот алгоритм крайне не эффективен и, естественно, к нему были предложены некоторые доработки.

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

Рисунок 13 – Пример работы модифицированного Bug Algorithm

Несмотря на то, что простота таких алгоритмов является их основным преимуществом, они имеют ряд существенных недостатков:

-       Они не учитывают кинематические параметры робота

-       Они рассматривают только самые последние показатели датчиков, следовательно, шумы будут серьезно влиять на деятельность робота.

-       Они медленны.

2.2.1.3 Алгоритм потенциала поля

     В то время как Bug-алгоритмы основаны исключительно на уклонении от текущего препятствия, алгоритмы потенциала поля склонны рассматривать уклонение от препятствий в качестве подзадачи планирования пути. Алгоритм потенциала поля, предполагает, что робот управляется некими виртуальными силами, которые ведут его к цели и в то же время отталкивают от препятствий. Фактический путь является равнодействующей этих виртуальных сил.

Рисунок 14 – Пример работы алгоритма потенциала поля.

Не смотря на красоту этого алгоритма, он все еще не компенсирует всех недостатков bug-алгоритмов, плохо работает в узких проходах, а также слабо приспособлен для real-time  приложений.

 

2.2.1.4 Алгоритм векторной гистограммы поля(VFH)

         Данный алгоритм решает проблему с шумом датчиков путем создания  гистограммы нескольких недавних показаний датчиков (Рис. 15). На графике ось Х представляет собой углы, связанные с показаниями ультразвуковых датчиков, а ось Y представляет вероятность Р, что на самом деле является препятствием в данном направлении движения. Вероятности вычисляются путем создания локальной карты окружающей среды вокруг робота.

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

Рисунок 15 – Пример работы алгоритма VFH и гистограмма вероятности появления препятствий

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

 

2.2.1.5 Техника пузырька

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

Рисунок 16 – Пример реализации техники пузырьков.

 

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

1.     PID Controller // бесплатная онлайн энциклопедия. URL: https://en.wikipedia.org/wiki/PID_controller

2.     Программируем квадрокоптер на Arduino // Интернет-публикации. URL: https://habrahabr.ru/post/227425

3.     Learning // Официальный сайт документации Arduino. URL: www.arduino.cc

4.     Справочник языка // Платформа Arduino. URL: http://arduino.ru

5.     Справочник по языку C++// URL: https://msdn.microsoft.com

6.      Lumelsky, V., Skewis, T., “Incorporating Range Sensing in the Robot Navigation Function.” IEEE Transactions on Systems, Man, and Cybernetics, 20:1990, pp. 1058–1068..

7.     Lumelsky, V., Stepanov, A., “Path-Planning Strategies for a Point Mobile Automaton Moving Amidst Unknown Obstacles of Arbitrary Shape,” in Autonomous Robot Vehicles. New York, SpingerVerlag, 1990

8.     Kamon, I., Rivlin, E., Rimon, E., “A New Range-Sensor Based Globally Convergent Navigation Algorithm for Mobile Robots,” in Proceedings of the IEEE International Conference on Robotics and Automation, Minneapolis, April 1996.

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Моделирование Квадрокоптера. Методический материал для 10-го класса"

Методические разработки к Вашему уроку:

Получите новую специальность за 3 месяца

Флорист

Получите профессию

Секретарь-администратор

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 661 515 материалов в базе

Материал подходит для УМК

Скачать материал

Другие материалы

Моделирование информационной системы школы танцев. Методический материал для 10-го класса
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
  • 02.01.2018
  • 864
  • 3
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Моделирование информационной системы учета посещаемости. Методический материал для 10-го класса
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
  • 02.01.2018
  • 1233
  • 0
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Моделирование информационной системы умного дома. Методический материал для 10-го класса.
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
  • 02.01.2018
  • 835
  • 1
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Моделирование информационной системы подбора сувенирной продукции по заявкам клиента. Методический материал для 10-го класса
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
  • 02.01.2018
  • 304
  • 0
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Моделирование информационной системы учета спецодежды. Методический материал для 10-го класса
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
  • 02.01.2018
  • 609
  • 1
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 02.01.2018 3647
    • DOCX 1.3 мбайт
    • 37 скачиваний
    • Рейтинг: 5 из 5
    • Оцените материал:
  • Настоящий материал опубликован пользователем Власов Алексей Петрович. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

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

    Удалить материал
  • Автор материала

    Власов Алексей Петрович
    Власов Алексей Петрович
    • На сайте: 8 лет и 9 месяцев
    • Подписчики: 1
    • Всего просмотров: 150313
    • Всего материалов: 97

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Бухгалтер

Бухгалтер

500/1000 ч.

Подать заявку О курсе
  • Сейчас обучается 22 человека из 16 регионов

Курс повышения квалификации

Особенности подготовки к сдаче ОГЭ по информатике и ИКТ в условиях реализации ФГОС ООО

36 ч. — 180 ч.

от 1700 руб. от 850 руб.
Подать заявку О курсе
  • Сейчас обучается 101 человек из 39 регионов
  • Этот курс уже прошли 805 человек

Курс повышения квалификации

Методика преподавания информатики в начальных классах

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Этот курс уже прошли 67 человек

Курс профессиональной переподготовки

Теория и методика обучения информатике в начальной школе

Учитель информатики в начальной школе

300/600 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Сейчас обучается 96 человек из 34 регионов
  • Этот курс уже прошли 222 человека

Мини-курс

Проведение и применение трансформационных игр

4 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 109 человек из 47 регионов
  • Этот курс уже прошли 52 человека

Мини-курс

Эффективное взаимодействие с детьми: стратегии общения и воспитания

4 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 662 человека из 74 регионов
  • Этот курс уже прошли 536 человек

Мини-курс

Управление проектами: концепции, практика и финансы

6 ч.

780 руб. 390 руб.
Подать заявку О курсе