Dizajn i implementacija kontrolnog sistema kvadkopter drona
Projektni tim: Nikola Najić, Andrija Krstić
Mentori:
Nikola Ristanović, student, Elektrotehnički fakultet u Beogradu
Petar Marković, Fakultet tehničkih nauka u Novom Sadu
Nikola Drakulić, student, Elektrotehnički fakultet u Beogradu
Datum: Septembar 2025.
Apstrakt
Ovaj rad opisuje razvoj kvadkopter drona, od hardverske integracije (ESP32 S3 Zero, IMU, BLDC motori) do implementacije MIMO PID kontrolera za stabilizaciju. Ključni rezultat bila je modifikacija ultrazvučnog senzora za I²C komunikaciju, što je rasteretilo procesor. Iako je hardver uspešno završen, kontrolisani let nije postignut. Analiza je otkrila dve kritične greške: nelinearnost test-postolja i algoritamsku grešku u Roll kontroli koja je narušila princip konstantnog ukupnog potiska. Projekat pruža dragoceno iskustvo i definiše smernice za budući rad, fokusirajući se na robusniju test-konstrukciju i bolje filtriranje senzorskih podataka.
1. Uvod
Kvadkopter dron predstavlja izvanredan primer dinamičkog inženjerskog sistema. Ovaj rad ima za cilj da detaljno prikaže proces dizajna, sklapanja i programiranja sopstvene letelice, sa fokusom na razvoj robusnog kontrolnog sistema neophodnog za autonomnu stabilizaciju.
1.1. Motivacija i značaj projekta
Bespilotne letelice su postale nezamenljivi alati u raznim oblastima počev od vojnih upotreba, preko filmske, poljoprivredne i spasilačke industrije, pa sve do civilnih upotreba. Danas čak i osoba bez predznanja ili obuke može upravljati dronom.
Glavna podela ovih letelica je na one sa fiksiranim krilima i multi-rotore. Među multi-rotorima, najpopularnija i praktičnija konfiguracija je kvadkopter (četiri rotora). Ovakva letelica može da poleće i sleće vertikalno kao helikopter, ali je prirodno stabilna po Yaw rotaciji i ne zahteva kompleksan mehanizam promenljive geometrije elisa radi stabilizacije.
1.2. Ciljevi projekta
Projekat je postavio sledeće ključne ciljeve:
-
Sastavljanje i optimizacija hardvera: Izbor, sastavljanje i povezivanje komponenti, dizajniranje i 3D štampanje nosača kako bi senzori bili postavljeni na optimalnim pozicijama.
-
Razvoj komunikacije: Uspostavljanje stabilne komunikacije sa kontrolnom stanicom preko mikrokontrolera.
-
Implementacija kontrolnog sistema: Projektovanje i podešavanje MIMO PID kontrolera za održavanje stabilnosti letelice po Pitch, Roll i Yaw osi.
-
Postizanje stabilnog leta: Testiranje i podešavanje parametara kontrolera za postizanje kontrolisanog hoveringa.
2. Teoretska Osnova Kontrole
Kontrola kvadkoptera je kompleksna jer je to dinamički sistem sa više ulaza i izlaza (MIMO), koji je prirodno nestabilan. Za postizanje kontrolisanog i stabilnog leta neophodna je primena robusnog algoritma koji može precizno da upravlja rotacijama letelice po tri ose (Pitch, Roll i Yaw). Ovo poglavlje detaljno opisuje matematički model kvadkoptera i izabranu metodologiju kontrole, zasnovanu na PID kontroleru.
2.1. Model kvadkoptera
Kvadkopter je sistem sa šest stepeni slobode kretanja (3 translatorna i 3 rotaciona) i četiri nezavisna aktuatora (motora). Kontrola kretanja se postiže promenom brzine obrtanja pojedinačnih propelera:
-
Visina (Altitude) - Kontroliše se promenom snage sva četiri motora.
-
Roll: Kontroliše se promenom snage motora na levoj i desnoj strani.
-
Pitch: Kontroliše se promenom snage motora na prednjoj i zadnjoj strani.
-
Yaw (rotacija oko vertikalne ose) - Kontroliše se razlikom u obrtnom momentu propelera koji se okreću u suprotnim smerovima.
2.2. PID Kontrola
Za stabilizaciju rotacije korišćen je PID (Proportional-Integral-Derivative) kontrolni algoritam. PID kontroler računa izlaznu vrednost (korekciju brzine motora) na osnovu greške (e) između željene i stvarne vrednosti ugla, koristeći tri komponente:
-
Proporcionalna (P): Reaguje na grešku jačinom koja je direktno proporcionalna grešci.
-
Integralna (I): Smanjuje grešku u stabilnom stanju.
-
Derivativna (D): Reaguje na brzinu promene greške, čime smanjuje prebačaje i oscilacije.
2.3. MIMO (Multiple Input, Multiple Output) Sistem
Kvadkopter je tipičan MIMO sistem. U ovom projektu, tri ulaza (merenje Pitch, Roll i Yaw ugla) upravljaju sa četiri izlaza (brzina motora M1,M2,M3,M4), gde je izlazna snaga motora određena pomoću formule:
M[i] = Throttle ± Pitch ± Roll ± Yaw
Za uspešnu kontrolu, zbir snage na motorima mora biti konstantan kako bi se održala konstantna ukupna snaga.
3. Metodologija i Dizajn Sistema
U ovom poglavlju je opisan proces razvoja sistema od izbora, integracije hardverskih komponenti i testiranja, do programiranja sistema. Cilj je da se prikaže svaki deo sistema potreban za postizanje autonomne stabilizacije letelice.
3.1. Izbor i integracija hardverskih komponenti
U ovoj fazi bilo je potrebno izabrati hardverske elemente koji će omogućiti stabilan rad drona. Svaka komponenta, kao i njena funkcija, detaljno je opisana.
3.1.1. Mikrokontroler
Mikrokontroler predstavlja centralni deo upravljačkog sistema. On izvršava sve funkcije leta. Prima podatke sa IMU senzora i ultrazvučnog senzora koje koristi za stabilizaciju i održavanje u vazduhu, meri napon baterije i sprečava njeno pražnjenje ispod bezbednog opsega i pomoću ugrađenog BLE modula konstantno komunicira sa kontrolnom stanicom.
3.1.2. IMU Senzor
IMU (IMU - Inertial Measurement Unit) je senzor koji meri linearno ubrzanje i ugaonu brzinu. Korišćen je za određivanje uglova u kojim se letelica nalazi. Senzor se sastoji od dve jedinice, akcelometra i žiroskopa, individualnim merenjem moguće je odrediti ugao letelice, ali ne sa velikom preciznošću. Zato je korišćen algoritam za fuziju senzora, koristeći merenja sa obe jedinice dobijamo veću preciznost.
3.1.3. Ultrazvučni senzor
Ultrazvučni senzor se koristi za merenje razdaljine između drona i podloge. Standardna komunikacija koristi okidač (Trigger) i eho (Echo). Slanjem signala na okidač senzor generiše ultrazvučni signal pomoću predajnika (Transmitter) i meri vreme dok se signal ne odbije od podloge i prijemnik (Receiver) ga ne registruje. Umesto ovoga iskorišćena opcija komunikacije pomoću I²C (Inter-Integrated Circuit) protokola. Ovime je postignuto povezivanje IMU i ultrazvučnog senzora pomoću samo dve žice, odnosno iskorišćena su samo dva pina na mikrokontroleru umesto četiri. Takođe je rasterećen procesor i ne mora da se pauzira petlju dok čeka eho signala.
3.1.4. Motori
Motori su BLDC (BrushLess - Direct Current) tipa. Imaju odličnu snagu, efikasnost, duže traju, greju se manje i tiši su, ali to dolazi po drugoj ceni. Pošto imaju tri faze i snaga potrebna lako prevazilazi ograničenja mikrokontrolera, potrebni su elektronski kontroleri brzine (ESC - Electronic Speed Controller) koji pametno menjaju stanja faza.
3.1.5. Elektronski kontroleri brzine
Elektronski kontroleri brzine pokreću motore. Da bi se motori okretali odgovarajućom brzinom, elektronski kontroleri brzine dobijaju PWM (Pulse Width Modulation) signal od mikrokontrolera. Ovaj signal radi tako što dužina High state stanja varira od 1000 do 2000 mikrosekundi (µs). Hiljadu mikrosekundi predstavlja 0% snage motora, a dve hiljade 100% snage motora. Zatim kontroler pali ili gasi tranzistore čime se menja stanje faza. Ukoliko se motor vrti u pogrešnom smeru, potrebno je zameniti dve faze. Kontroleri snagu crpe direktno iz baterije, ali se između njih i baterije se nalazi PDB.
3.1.6. Ploča za distribuciju snage
Ploča za distribuciju snage (PDB - Power Distribution Board) olakšava povezivanje više kontrolera na jednu bateriju. Na ploči je zalemljen kondenzator da ublaži nasumične skokove i padove napona.
3.1.7. Baterija
Baterija je izvor energije. Korišćena je litijum polimerska (LiPO - Lithium Polymer) hemija. Ovaj tip hemije ima veliku gustinu energije i može da oslobodi veliku jačinu struje. Nominalni napon ćelija je 3,7V, a korišćena je baterija sa tri ćelije serijski vezane, odnosno konačan napon je 11,1V. Kapacitet ove baterije je 2200mAh i maksimalna stopa pražnjenja je 70C.
3.1.8. Regulator napona
Regulator napona služi da napon baterije smanji na 5V, kojim se napajaju mikrokontroler, IMU i ultrazvučni senzor. Elektronski kontroleri brzine imaju ugrađeni regulator, ali je svakako stavljen spoljašnji.
3.1.9. Razdelnik napona
Mikrokontroler može da meri napon do 3,3V što je znatno manje od baterije,
zato je napravljen jednostavan razdelnik napona za merenje napona. Ovo je veoma bitno zato što nije bezbedno crpeti bateriju ispod 9V. Kontroler konstantno proverava napon i zaustavlja rad drona ukoliko dođe do prekoračenja ove granice.
3.1.10. Ram
Ram ili konstrukcija mora da bude kruta da bi smanjila savijanje prilikom vibracija. Odličan materijal za ovu upotrebu je karbon. Karbon je lagan, čvrst i krut. Osim osnovne konstrukcije korišćeni su 3D štampani nosači sa IMU i ultrazvučni senzor.
3.2. Testovi hardvera
Pre finalne integracije kontrolnog softvera, izvršeni su sledeći testovi:
-
Test potiska: Izmeren je potisak svih motora sa elisama kako bi se osiguralo da je ukupni potisak letelice znatno veći od ukupne projektovane težine. Test je odrađen uz pomoć eksternog laboratorijskog napajanja. Nakon završenog merenja bilo je moguće zaključiti koliko teška baterija može da napaja ceo sistem.
-
Test napajanja: Usled konstantnog rada, regulator napona (18V na 5V) je počeo da se značajno zagreva. Zbog toga smo odlučili da proverimo graničnu vrednost do koje je moguće da se regulator zagreje tokom rada. testiran je pod opterećenjem. Temperatura stabilizacije je bila 52°C, što je u prihvatljivom opsegu.
3.3. Programiranje sistema
Kompleksnost samog projekta uticala je na to da se za rad upotrebi veliki broj implementiranih biblioteka. Biblioteke koje su korišćene su sledeće:
-
IMU_Fusion_SYC - korišćeno za obradu informacija sa akcelerometra i žiroskopa
-
BLEDevice, BLEServer, BLEUtils i BLE2902 - biblioteke za komunikaciju sa telefonom preko blututa
-
ESP32Servo - korišćeno za slanje signala za kontrolu snage motora
-
Wire - korišćeno za komunikaciju sa senzorima
Kao jako bitan deo sistema, briga o bateriji je bila neophodna. Implementirana je funkcija koja meri napon na baterijama i time proverava da li je sve pod kontrolom. Funkcija se konstantno pozivala kako bismo u realnom vremenu znali sve potrebne informacije.
Komunikacija između drona i telefona odrađena je preko blututa (Bluetooth). Bilo je potrebno implementirati par funkcija koje tu komunikaciju čine lakšom. Jedna od funkcija bila je namenjena za slanje podataka preko blutut kanala komunikacije, dok je druga funkcija bila posvećena primanju podataka. U funkciji koja je služila za obradu dolaznih podataka, rađena je i obrada i podela dolaznog teksta na brojčane vrednosti. Funkcije koje su mogle biti poslate preko blutut komunikacije bile su sledeće:
-
“a” - funkcija koja pali ili gasi sve propelere
-
“t”X - funkcija koja gas (throttle) postavlja na vrednost X
-
“p”X - funkcija koja parametar P postavlja na vrednost X
-
“i”X - funkcija koja parametar I postavlja na vrednost X
-
“d”X - funkcija koja parametar D postavlja na vrednost X
Preko blutut komunikacije, u drugom smeru, slati su podaci kao povratne informacije o stanju sistema. Funkcija je napravljena da šalje razne podatke odvojene zarezom. Podaci koji su slati od kontrolera ka telefonu:
-
input_pitch - obrađena vrednost trenutnog pomeraja u “pitch” osi koji se koristi za PID analizu
-
voltage - informacija koliko je baterija napunjena u trenutnom momentu
-
Kp_pitch, Ki_pitch i Kd_pitch - konstante koje su postavljene za PID kontrolu po “pitch” osi
-
input_pitch_raw - ne filtrirano stanje pomeraja u “pitch” osi
-
vrednosti[0], vrednosti[1], vrednosti[2] i vrednosti[3] - procenti jačina svakog od motora
Najbitnija funkcija koja se nalazi u kodu je funkcija za računanje PID kontrole. Ta funkcija je koncipirana na taj način da se svaki od parametara računa zasebno nakon čega se sve zajedno sabira i određuje se jačina na svakom od motora formulom koja je gore u tekst opisana. U okviru funkcije je odrađena PID kontrola za svaku od 3 ose. Na taj način je cela kontrola sastavljena u jednoj funkciji.
Postoji grupa od 3 jednostavne funkcije koje su napravljene u svrhu estetskog sređivanja koda. Funkcije su napravljene za inicijalizaciju različitih delova projekta i namenjene su za pozivanje samo jednom. Te 3 funkcije su:
-
Funkcija za inicijalizaciju blutut komunikacije
-
Funkcija za inicijalizaciju motora
-
Funkcija za inicijalizaciju senzora za računanje trenutnog stanja sistema
Takođe, napravljene su i dve jednostavne funkcije koje su neophodne za nesmetani rad. To su funkcije za onesposobljavanje rada motora u slučaju nužde i funkcija za kalibraciju motora koja služi da upravljači motora saznaju raspon signala sa kojim rade podešavanje i dalje računanje snage koja treba da se prosledi dalje do motora.
Funkcije “setup” i “loop” su izuzetno jednostavno napravljene tako da se u njima samo pozivaju ostale funkcije za kontrolu sistema.
4. Rezultati i Analiza Problema
Nakon završetka procesa izrade i programiranja drona, pristupilo se analizi dobijenih rezultata i identifikaciji glavnih poteškoća tokom rada. Cilj ovog poglavlja je da prikaže šta je uspešno realizovano, ali i da ukaže na probleme koji su se pojavili tokom testiranja i finalnog podešavanja sistema.
4.1. Postignuti rezultati
Projekat je uspešno doveo do fizički kompletnog kvadkoptera, spremnog za let. Postignuta je efektivna komunikacija između ESP32 S3 Zero mikrokontrolera i svih senzora, uključujući rešenje za I²C komunikaciju ultrazvučnog senzora.

4.2. Izazovi i Analiza Grešaka u Kontrolnom Kodu
Najveći izazovi nastali su tokom faze podešavanja PID kontrolera. Postoje mnoge metode za određivanje PID parametra, kao što je Zigler-Nikols (Ziegler-Nichols), ali zato što postolje za podešavanje parametara nije bilo idealno, korišćena je neimenovana iterativna metoda. Integralnom parametaru je data vrednost nula, dok je proporcionalnom i derivativnom parametru data nasumična početna vrednost. Vrednost proporcionalnog parametra se smanjuje sve dok se ne otklone oscilacije oko zadate vrednosti stanja sistema i prebačaji iste. Postizanjem toga, nastavlja se podizanjem proporcionalnog i derivativnog parametra u jednakoj meri sve dok se oscilacije i prebačaji opet ne pojave. Zatim se te vrednosti smanje tako da se opet otklone oscilacije i prebačaji, ali da vreme potrebno za ispravljanje greške bude minimalno. Poslednje je podesiti integralni parametar. Njegovu vrednost treba podizati sve dok se ne pojave oscilacije, ali ne treba biti ni previše mala zato što će trebati mnogo vremena za uklanjanje statičke greške.
Usled kratkog vremenskog okvira i kompleksnosti MIMO sistema, nije uspešno realizovano filtriranje senzorskih podataka. Ideja o korišćenju Kalmanovog filtera je odbačena kao previše zahtevna.
Konačni neuspeh u postizanju stabilnog leta proistekao je iz dve kritične greške:
A) Greška na Pitch i Roll osi
Tokom debug-ovanja, utvrđeno je da su nepravilnosti u konstrukciji postolja za podešavanje parametra sprečavale uspešno podešavanje Pitch i Roll ose. U pokušaju da se eliminišu oscilacije u sistemu, smanjivanje vrednosti P komponente i povećanje D komponente nije dalo rezultate. Ovaj problem ukazuje na nelinearnost postolja.
B) Narušavanje principa određivanja snage na motorima
Najfundamentalniji problem nastao je tokom eksperimentisanja oko formule za izračunavanje snage motora na Roll osi. Originalna, korektna formula je dizajnirana tako da zbir snage na motorima uvek ostane konstantan kako bi došlo do što manjeg pomeranja prilikom ispravljanja greške. Ova promena dovodi do sporije stabilizacije drona i izraženijeg translacionog pomeranja.
Originalna (Korektna) Formula (primer):
M[i] = Throttle ± Pitch ± Roll ± Yaw
Eksperimentalna (Neispravna) Formula (primer):
M[i] = Throttle ± Pitch - Roll ± Yaw
U formulama snage motora koji korekciji Roll ose doprinose povećavanjem snage na motoru uklonjeno je dodavanje greške na Roll osi, tj. prilikom korekcije iste ovi motori ne učestvuju.
5. Zaključak i Budući Rad
Projekat kvadkopter drona na PFE seminaru bio je važan korak u sticanju praktičnog iskustva u robotskim i kontrolnim sistemima. Iako je ostvaren napredak u hardverskoj izgradnji i razumevanju MIMO PID kontrole, cilj stabilnog leta ipak nije ostvaren.
Radom na ovom projektu ustanovljeno je da, zbog nelinearnosti sistema, zahtevniji deo izrade predstavlja teoretska i softverska implementacija, više nego fizičko sklapanje celog sistema.
Predlozi za budući rad:
-
Završetak stabilizacije celog sistema: Primarni fokus mora biti na tome da se završi stabilizacija po svim osama rotacije. Za to je neophodno prvo izgraditi dobru konstrukciju za fiksiranje drona. Tu je ključ napraviti dovoljno ograničavajući sistem kako bi dron bio pod kontrolom ali ipak dovoljno slobodan sistem kako bi se ispitala zapravo stabilnost korekcije greške i preciznost PID kontrole u realnim uslovima.
-
Implementacija održavanja pozicije u prostoru: Pomoću akcelometra moguće je izračunati linearne vektore ubrzanja pomoću kojih je moguće napraviti sistem koji će održavati poziciju u prostoru. Ovo je verovatno moguće uraditi pomoću tri dodatna PID kontrolera (napred-nazad, levo-desno, gore-dole)
-
Autonomni moduli: Nakon postizanja stabilnog leta, može se preći na integraciju dodatnih modula kao što su LiDAR i Optical Flow za preciznije merenje visine i horizontalnog pomeranja, što je u skladu sa originalnim predlogom projekta.
6. Literatura
-
[1] Build and program this Arduino drone yourself! (onlajn tutorijal korišćen kao referenca za izgradnju). Dostupno na: https://youtube.com/playlist?list=PLeuMA6tJBPKsAfRfFuGrEljpBow5hPVD4&si=lNIVM29ql7p_9U8G
-
[2] Building a sub 250g Autonomous Drone with Ardupilot and ExpressLRS. Dostupno na: https://www.youtube.com/watch?v=u_ArriXbrR0&t=357s