Пројекат Дрон

Дизајн и имплементација контролног система квадкоптер дрона

Пројектни тим: Никола Најић, Андрија Крстић

Ментори: Никола Ристановић, Петар Марковић, Никола Дракулић

Датум: Септембар 2025.

Апстракт

Овај рад описује развој квадкоптер дрона, од хардверске интеграције (ESP32 S3 Zero, ИМУ, BLDC мотори) до имплементације МИМО ПИД контролера за стабилизацију. Кључни резултат била је модификација ултразвучног сензора за I²C комуникацију, што је растеретило процесор. Иако је хардвер успешно завршен, контролисани лет није постигнут. Анализа је открила две критичне грешке: нелинеарност тест-постоља и алгоритамску грешку у Roll контроли која је нарушила принцип константног укупног потиска. Пројекат пружа драгоцено искуство и дефинише смернице за будући рад, фокусирајући се на робуснију тест-конструкцију и боље филтрирање сензорских података.

1. Увод

Квадкоптер дрон представља изванредан пример динамичког инжењерског система. Овај рад има за циљ да детаљно прикаже процес дизајна, склапања и програмирања сопствене летелице, са фокусом на развој робусног контролног система неопходног за аутономну стабилизацију.

1.1. Мотивација и значај пројекта

Беспилотне летелице су постале незаменљиви алати у разним областима почев од војних употреба, преко филмске, пољопривредне и спасилачке индустрије, па све до цивилних употреба. Данас чак и особа без предзнања или обуке може управљати дроном.

Главна подела ових летелица је на оне са фиксираним крилима и мулти-роторе. Међу мулти-роторима, најпопуларнија и практичнија конфигурација је квадкоптер (четири ротора). Оваква летелица може да полеће и слеће вертикално као хеликоптер, али је природно стабилна по Yaw ротацији и не захтева комплексан механизам променљиве геометрије елиса ради стабилизације.

1.2. Циљеви пројекта

Пројекат је поставио следеће кључне циљеве:

  1. Састављање и оптимизација хардвера: Избор, састављање и повезивање компоненти, дизајнирање и 3Д штампање носача како би сензори били постављени на оптималним позицијама.

  2. Развој комуникације: Успостављање стабилне комуникације са контролном станицом преко микроконтролера.

  3. Имплементација контролног система: Пројектовање и подешавање МИМО ПИД контролера за одржавање стабилности летелице по Pitch, Roll и Yaw оси.

  4. Постизање стабилног лета: Тестирање и подешавање параметара контролера за постизање контролисаног ховеринга.

2. Теоретска Основа Контроле

Контрола квадкоптера је комплексна јер је то динамички систем са више улаза и излаза (MIMO), који је природно нестабилан. За постизање контролисаног и стабилног лета неопходна је примена робусног алгоритма који може прецизно да управља ротацијама летелице по три осе (Pitch, Roll и Yaw). Ово поглавље детаљно описује математички модел квадкоптера и изабрану методологију контроле, засновану на ПИД контролеру.

2.1. Модел квадкоптера

Квадкоптер је систем са шест степени слободе кретања (3 транслаторна и 3 ротациона) и четири независна актуатора (мотора). Контрола кретања се постиже променом брзине обртања појединачних пропелера:

  • Висина (Altitude) - Контролише се променом снаге сва четири мотора.

  • Roll: Контролише се променом снаге мотора на левој и десној страни.

  • Pitch: Контролише се променом снаге мотора на предњој и задњој страни.

  • Yaw (ротација око вертикалне осе) - Контролише се разликом у обртном моменту пропелера који се окрећу у супротним смеровима.

2.2. ПИД Контрола

За стабилизацију ротације коришћен је ПИД (Proportional-Integral-Derivative) контролни алгоритам. ПИД контролер рачуна излазну вредност (корекцију брзине мотора) на основу грешке (e) између жељене и стварне вредности угла, користећи три компоненте:

  1. Пропорционална (P): Реагује на грешку јачином која је директно пропорционална грешци.

  2. Интегрална (I): Смањује грешку у стабилном стању.

  3. Деривативна (D): Реагује на брзину промене грешке, чиме смањује пребачаје и осцилације.

2.3. МИМО (Multiple Input, Multiple Output) Систем

Квадкоптер је типичан МИМО систем. У овом пројекту, три улаза (мерење Pitch, Roll и Yaw угла) управљају са четири излаза (брзина мотора M1​,M2​,M3​,M4​), где је излазна снага мотора одређена помоћу формуле:

M[i]​ = Throttle ± Pitch ± Roll ± Yaw

За успешну контролу, збир снаге на моторима мора бити константан како би се одржала константна укупна снага.

3. Методологија и Дизајн Система

У овом поглављу је описан процес развоја система од избора, интеграције хардверских компоненти и тестирања, до програмирања система. Циљ је да се прикаже сваки део система потребан за постизање аутономне стабилизације летелице.

3.1. Избор и интеграција хардверских компоненти

У овој фази било је потребно изабрати хардверске елементе који ће омогућити стабилан рад дрона. Свака компонента, као и њена функција, детаљно је описана.

3.1.1. Микроконтролер

Микроконтролер представља централни део управљачког система. Он извршава све функције лета. Прима податке са ИМУ сензора и ултразвучног сензора које користи за стабилизацију и одржавање у ваздуху, мери напон батерије и спречава њено пражњење испод безбедног опсега и помоћу уграђеног БЛЕ модула константно комуницира са контролном станицом.

3.1.2. ИМУ Сензор

ИМУ (IMU - Inertial Measurement Unit) је сензор који мери линеарно убрзање и угаону брзину. Коришћен је за одређивање углова у којим се летелица налази. Сензор се састоји од две јединице, акцелометра и жироскопа, индивидуалним мерењем могуће је одредити угао летелице, али не са великом прецизношћу. Зато је коришћен алгоритам за фузију сензора, користећи мерења са обе јединице добијамо већу прецизност.

3.1.3. Ултразвучни сензор

Ултразвучни сензор се користи за мерење раздаљине између дрона и подлоге. Стандардна комуникација користи окидач (Trigger) и ехо (Echo). Слањем сигнала на окидач сензор генерише ултразвучни сигнал помоћу предајника (Transmitter) и мери време док се сигнал не одбије од подлоге и пријемник (Receiver) га не региструје. Уместо овога искоришћена опција комуникације помоћу I²C (Inter-Integrated Circuit) протокола. Овиме је постигнуто повезивање ИМУ и ултразвучног сензора помоћу само две жице, односно искоришћена су само два пина на микроконтролеру уместо четири. Такође је растерећен процесор и не мора да се паузира петљу док чека ехо сигнала.

3.1.4. Мотори

Мотори су BLDC (BrushLess - Direct Current) типа. Имају одличну снагу, ефикасност, дуже трају, греју се мање и тиши су, али то долази по другој цени. Пошто имају три фазе и снага потребна лако превазилази ограничења микроконтролера, потребни су електронски контролери брзине (ESC - Electronic Speed Controller) који паметно мењају стања фаза.

3.1.5. Електронски контролери брзине

Електронски контролери брзине покрећу моторе. Да би се мотори окретали одговарајућом брзином, електронски контролери брзине добијају PWM (Pulse Width Modulation) сигнал од микроконтролера. Овај сигнал ради тако што дужина High state стања варира од 1000 до 2000 микросекунди (µs). Хиљаду микросекунди представља 0% снаге мотора, а две хиљаде 100% снаге мотора. Затим контролер пали или гаси транзисторе чиме се мења стање фаза. Уколико се мотор врти у погрешном смеру, потребно је заменити две фазе. Контролери снагу црпе директно из батерије, али се између њих и батерије се налази ПДБ.

3.1.6. Плоча за дистрибуцију снаге

Плоча за дистрибуцију снаге (PDB - Power Distribution Board) олакшава повезивање више контролера на једну батерију. На плочи је залемљен кондензатор да ублажи насумичне скокове и падове напона.

3.1.7. Батерија

Батерија је извор енергије. Коришћена је литијум полимерска (LiPO - Lithium Polymer) хемија. Овај тип хемије има велику густину енергије и може да ослободи велику јачину струје. Номинални напон ћелија је 3,7V, а коришћена је батерија са три ћелије серијски везане, односно коначан напон је 11,1V. Капацитет ове батерије је 2200mAh и максимална стопа пражњења је 70C.

3.1.8. Регулатор напона

Регулатор напона служи да напон батерије смањи на 5V, којим се напајају микроконтролер, ИМУ и ултразвучни сензор. Електронски контролери брзине имају уграђени регулатор, али је свакако стављен спољашњи.

3.1.9. Разделник напона

Микроконтролер може да мери напон до 3,3V што је знатно мање од батерије,

зато је направљен једноставан разделник напона за мерење напона. Ово је веома битно зато што није безбедно црпети батерију испод 9V. Контролер константно проверава напон и зауставља рад дрона уколико дође до прекорачења ове границе.

3.1.10. Рам

Рам или конструкција мора да буде крута да би смањила савијање приликом вибрација. Одличан материјал за ову употребу је карбон. Карбон је лаган, чврст и крут. Осим основне конструкције коришћени су 3Д штампани носачи са ИМУ и ултразвучни сензор.

3.2. Тестови хардвера

Пре финалне интеграције контролног софтвера, извршени су следећи тестови:

  • Тест потиска: Измерен је потисак свих мотора са елисама како би се осигурало да је укупни потисак летелице знатно већи од укупне пројектоване тежине. Тест је одрађен уз помоћ екстерног лабораторијског напајања. Након завршеног мерења било је могуће закључити колико тешка батерија може да напаја цео систем.

  • Тест напајања: Услед константног рада, регулатор напона (18V на 5V) је почео да се значајно загрева. Због тога смо одлучили да проверимо граничну вредност до које је могуће да се регулатор загреје током рада. тестиран је под оптерећењем. Температура стабилизације је била 52°C, што је у прихватљивом опсегу.

3.3. Програмирање система

Комплексност самог пројекта утицала је на то да се за рад употреби велики број имплементираних библиотека. Библиотеке које су коришћене су следеће:

  • IMU_Fusion_SYC - коришћено за обраду информација са акцелерометра и жироскопа

  • BLEDevice, BLEServer, BLEUtils и BLE2902 - библиотеке за комуникацију са телефоном преко блутута

  • ESP32Servo - коришћено за слање сигнала за контролу снаге мотора

  • Wire - коришћено за комуникацију са сензорима

Као јако битан део система, брига о батерији је била неопходна. Имплементирана је функција која мери напон на батеријама и тиме проверава да ли је све под контролом. Функција се константно позивала како бисмо у реалном времену знали све потребне информације.

Комуникација између дрона и телефона одрађена је преко блутута (Bluetooth). Било је потребно имплементирати пар функција које ту комуникацију чине лакшом. Једна од функција била је намењена за слање података преко блутут канала комуникације, док је друга функција била посвећена примању података. У функцији која је служила за обраду долазних података, рађена је и обрада и подела долазног текста на бројчане вредности. Функције које су могле бити послате преко блутут комуникације биле су следеће:

  • “a” - функција која пали или гаси све пропелере

  • “t”X - функција која гас (throttle) поставља на вредност X

  • “p”X - функција која параметар P поставља на вредност X

  • “i”X - функција која параметар I поставља на вредност X

  • “d”X - функција која параметар D поставља на вредност X

Преко блутут комуникације, у другом смеру, слати су подаци као повратне информације о стању система. Функција је направљена да шаље разне податке одвојене зарезом. Подаци који су слати од контролера ка телефону:

  • input_pitch - обрађена вредност тренутног помераја у “pitch” оси који се користи за ПИД анализу

  • voltage - информација колико је батерија напуњена у тренутном моменту

  • Kp_pitch, Ki_pitch и Kd_pitch - константе које су постављене за ПИД контролу по “pitch” оси

  • input_pitch_raw - не филтрирано стање помераја у “pitch” оси

  • vrednosti[0], vrednosti[1], vrednosti[2] и vrednosti[3] - проценти јачина сваког од мотора

Најбитнија функција која се налази у коду је функција за рачунање ПИД контроле. Та функција је конципирана на тај начин да се сваки од параметара рачуна засебно након чега се све заједно сабира и одређује се јачина на сваком од мотора формулом која је горе у текст описана. У оквиру функције је одрађена ПИД контрола за сваку од 3 осе. На тај начин је цела контрола састављена у једној функцији.

Постоји група од 3 једноставне функције које су направљене у сврху естетског сређивања кода. Функције су направљене за иницијализацију различитих делова пројекта и намењене су за позивање само једном. Те 3 функције су:

  • Функција за иницијализацију блутут комуникације

  • Функција за иницијализацију мотора

  • Функција за иницијализацију сензора за рачунање тренутног стања система

Такође, направљене су и две једноставне функције које су неопходне за несметани рад. То су функције за онеспособљавање рада мотора у случају нужде и функција за калибрацију мотора која служи да управљачи мотора сазнају распон сигнала са којим раде подешавање и даље рачунање снаге која треба да се проследи даље до мотора.

Функције “setup” и “loop” су изузетно једноставно направљене тако да се у њима само позивају остале функције за контролу система.

4. Резултати и Анализа Проблема

Након завршетка процеса израде и програмирања дрона, приступило се анализи добијених резултата и идентификацији главних потешкоћа током рада. Циљ овог поглавља је да прикаже шта је успешно реализовано, али и да укаже на проблеме који су се појавили током тестирања и финалног подешавања система.

4.1. Постигнути резултати

Пројекат је успешно довео до физички комплетног квадкоптера, спремног за лет. Постигнута је ефективна комуникација између ESP32 S3 Zero микроконтролера и свих сензора, укључујући решење за I²C комуникацију ултразвучног сензора.

4.2. Изазови и Анализа Грешака у Контролном Коду

Највећи изазови настали су током фазе подешавања ПИД контролера. Постоје многе методе за одређивање ПИД параметра, као што је Зиглер-Николс (Ziegler-Nichols), али зато што постоље за подешавање параметара није било идеално, коришћена је неименована итеративна метода. Интегралном параметару је дата вредност нула, док је пропорционалном и деривативном параметру дата насумична почетна вредност. Вредност пропорционалног параметра се смањује све док се не отклоне осцилације око задате вредности стања система и пребачаји исте. Постизањем тога, наставља се подизањем пропорционалног и деривативног параметра у једнакој мери све док се осцилације и пребачаји опет не појаве. Затим се те вредности смање тако да се опет отклоне осцилације и пребачаји, али да време потребно за исправљање грешке буде минимално. Последње је подесити интегрални параметар. Његову вредност треба подизати све док се не појаве осцилације, али не треба бити ни превише мала зато што ће требати много времена за уклањање статичке грешке.

Услед кратког временског оквира и комплексности МИМО система, није успешно реализовано филтрирање сензорских података. Идеја о коришћењу Калмановог филтера је одбачена као превише захтевна.

Коначни неуспех у постизању стабилног лета проистекао је из две критичне грешке:

А) Грешка на Pitch и Roll оси

Током debug-овања, утврђено је да су неправилности у конструкцији постоља за подешавањe параметра спречавале успешно подешавање Pitch и Roll осе. У покушају да се елиминишу осцилације у систему, смањивање вредности P компоненте и повећање D компоненте није дало резултате. Овај проблем указује на нелинеарност постоља.

Б) Нарушавање принципа одређивања снаге на моторима

Најфундаменталнији проблем настао је током експериментисања око формуле за израчунавање снаге мотора на Roll оси. Оригинална, коректна формула је дизајнирана тако да збир снаге на моторима увек остане константан како би дошло до што мањег померања приликом исправљања грешке. Ова промена доводи до спорије стабилизације дрона и израженијег транслационог померања.

Оригинална (Коректна) Формула (пример):

M[i] ​= Throttle ± Pitch​ ± Roll​ ± Yaw

Експериментална (Неисправна) Формула (пример):

M[i] ​= Throttle ± Pitch​ - Roll​ ± Yaw

У формулама снаге мотора који корекцији Roll осе доприносе повећавањем снаге на мотору уклоњено је додавање грешке на Roll оси, тј. приликом корекције исте ови мотори не учествују.

5. Закључак и Будући Рад

Пројекат квадкоптер дрона на ПФЕ семинару био је важан корак у стицању практичног искуства у роботским и контролним системима. Иако је остварен напредак у хардверској изградњи и разумевању МИМО ПИД контроле, циљ стабилног лета ипак није остварен.

Радом на овом пројекту установљено је да, због нелинеарности система, захтевнији део израде представља теоретска и софтверска имплементација, више него физичко склапање целог система.

Предлози за будући рад:

  1. Завршетак стабилизације целог система: Примарни фокус мора бити на томе да се заврши стабилизација по свим осама ротације. За то је неопходно прво изградити добру конструкцију за фиксирање дрона. Ту је кључ направити довољно ограничавајући систем како би дрон био под контролом али ипак довољно слободан систем како би се испитала заправо стабилност корекције грешке и прецизност ПИД контроле у реалним условима.

  2. Имплементација одржавања позиције у простору: Помоћу акцелометра могуће је израчунати линеарне векторе убрзања помоћу којих је могуће направити систем који ће одржавати позицију у простору. Ово је вероватно могуће урадити помоћу три додатна ПИД контролера (напред-назад, лево-десно, горе-доле)

  3. Аутономни модули: Након постизања стабилног лета, може се прећи на интеграцију додатних модула као што су LiDAR и Optical Flow за прецизније мерење висине и хоризонталног померања, што је у складу са оригиналним предлогом пројекта.

6. Литература

  1. [1] Build and program this Arduino drone yourself! (онлајн туторијал коришћен као референца за изградњу). Доступно на: https://youtube.com/playlist?list=PLeuMA6tJBPKsAfRfFuGrEljpBow5hPVD4&si=lNIVM29ql7p_9U8G

  2. [2] Building a sub 250g Autonomous Drone with Ardupilot and ExpressLRS. Доступно на: https://www.youtube.com/watch?v=u_ArriXbrR0&t=357s