Autopilotas lėktuvui

Beeksperimentuojant su GPS moduliu kilo mintis: kodėl gi nepadarius autopiloto lėktuvui? Būtų visai įdomu, jei lėktuvas galėtų skristi pats, nurodytu maršrutu. Apie tokio daikto pirkimą minties nebuvo, nes daug įdomiau yra pačiam sukurt. Taigi, pradžioje numačiau tokias autopiloto funkcijas:

1. Skrydžio maršrutas sudarinėjamas tiesiog google žemėlapyje. Tam reikia parašyti specialią programą, iš kurios maršrutas būtų perduodamas autopilotui.
2. Kiekvienas maršruto taškas tai koordinatės ir aukštis, kuriame lėktuvas turėtų būti, kai pasieks šį tašką. Taškų skaičius – tiek, kiek tilps į mikrokontrolerio atmintį.
3. Baigęs maršrutą, lėktuvas turi grįžti į pradinį tašką ir nurodytame aukštyje skristi ratu, kol nebus perjungta į rankinį valdymą.
4. Bet kuriuo metu turi būti galimybė įjungti režimą “grįžti namo”.
5. Autopilotas turėtų kontroliuoti posūkio ir aukščio vairus, taip pat lėktuvo skrydžio greitį.
6. Papildomas servo signalas fotografavimui.
7. Prisijungus kompiuterį, turėtų eiti keisti įvairius parametrus, tokius kaip servomechanizmų trimeriavimas, reversai, eigos, ir pan.

Kadangi jau anksčiau dariau eksperimentų su GPS moduliu, ir vienas iš jų buvo skrydžio logger’is, tai žinių jau buvo nemažai. Žinojau kaip “susikalbėti” su GPS moduliu, žinojau savo lėktuvo skrydžio minimalų ir maksimalų greičius, kas labai pagelbėjo kuriant autopilotą.

Nepuoliau taip jau visai išradinėt dviračio, pirmiausiai susipažinau ką šioje srityje sukūrė kiti. Pažiūrėjau kai kuriuos projektus, pasisėmiau kai kurių idėjų.

Aš niekada anksčiau neturėjau reikalų su atstumų ir krypčių skaičiavimu pagal koordinates, todėl čia buvo ką veikt, kol pavyko susigaudyt. Padėjo internetas, gerai paieškojus, galima rasti viską. Yra formulės. Teko paeksperimentuot, kol pradėjau gauti teisingus rezultatus, bet pagaliau tai pavyko.

Norint, kad lėktuvas skristų į nurodytą tašką, reikia apskaičiuoti kokia kryptimi skristi. GPS modulis duoda tokį parametrą kaip judėjimo kryptis. Pagal norimo taško koordinates apskaičiavus reikiamą kryptį galima apskaičiuoti krypties paklaidą. Pagal paklaidą galima atitinkamu kampu pasukti posūkio vairą, kad lėktuvas skristų ten, kur reikia.

Panašiai ir su aukščiu. GPS modulis duoda tokį parametrą kaip aukštis, reiškia, jei žinom į kokį aukštį reikia nuskrist, nesunku sužinot, reikia kilti, ar leistis. Atitinkamai dirbama su aukščio vairu. Tačiau čia to nepakanka. Paprastai, jei norim kilt, reikia ir gazo pridėt, o jei reikia leistis, kaip tik galima išjungti variklį. Reiškia atitinkamai reikia dirbt ir su gazu, atsižvelgiant dar ir į skrydžio greitį. Iš pradžių atrodė painu, bet visa tai sukontroliuojama.

Pradinis autopiloto variantas buvo padarytas simuliacijoje. Viskas buvo emuliuojama, net ir GPS. Neturint tokių priemonių, būtų daug sunkiau viską padaryt. Simuliacijoje viskas derinama be realaus skrydžio, simuliuojamas skrydis matomas google žemėlapyje. Tokiu būdu man pavyko suderinti viską visai be realaus skrydžio. Žinoma, reikia turėti omenyje, kad sąlygos idealios, nėra vėjo, reiškia skrydis ne visai atitinka realų, bet tai nelabai svarbu, bent jau pradžioje. Kai programa buvo atiderinta tiek, kad simuliacijoje buvo skraidoma pagal užduotus taškus be jokių klaidų, pradėjau galvot, kad reiktų pabandyt realiai. Reiškia reikia autopilotą realizuoti “geležyje”. Pati schema labai paprasta, visa esmė – programa.

Kaip atrodo autopilotas matosi nuotraukoje. Matosi ir kas yra viduje. Dariau kaip visada, ant montažinės plokštės, viską junginėjant laidais. Iš pirmo žvilgsnio atrodo, kad taip labai nepatikima. Bet daryti normalią plokštę vienetiniam egzemplioriui irgi neverta. Be to tai labai ilgas ir nuobodus darbas. Taigi atsisakiau tokio varianto ir padariau paprastai. Litavau labai rimtai, suprasdamas, kad mažiausios bėdos su kontaktais gali privesti prie avarijos.

Autopiloto bandymams naudojau tą patį lėktuvą kaip ir fotografavimui. Žinoma, pradžioje be fotoaparato. Lėktuve yra įmontuotas co-pilotas. Jį aš įdėjau ne tam, kad būtų reikalingas fotografavimui, bet būtent galvodamas apie autopilotą. Beje, jo veikimu esu labai patenkintas. Lėktuvas kaip ant bėgių, posūkius užtenka valdyt tik posūkio vairu, co-pilotas eleronais puikiai kompensuoja pasvirimą. Sakyčiau šitas daiktas veikia žymiai geriau nei aš tikėjausi.

Kaip žinia, tai rašoma ir co-piloto aprašyme, su kai kuriais imtuvais jis blogai dirba. Priežastis tame, kad servo signalai iš kai kurių imtuvų išeina vienu metu, t.y. jei žiūrėti išsidėstymą laike, galima matyti, kad kai kurie kanalai yra toje pačioje vietoje. Tokių co-pilotas negali suprast. Tam yra sukurtas servo buferis, kurį galima įsigyti atskirai. Aš jo neturiu, man jo ir nereikėjo, tačiau žinodamas šią problemą, numačiau, kad tai gali pasireikšti ir su mano autopilotu. Ir, kaip paaiškėjo, tikrai pasireiškė. Reikalas tame, kad mano atveju, servo signalai į co-pilotą ateina iš skirtingų šaltinių. Vienas tiesiai iš imtuvo (eleronai), kitas iš autopiloto (aukščio vairas). Reiškia teisingos padėties laike tikrai negalima garantuoti. Pasireiškia tai tuo, kad žiauriai dreba aukščio vairas. Pradžioje man tai sukėlė nemažą problemą, buvo neaišku ar išvis pavyks tai kažkaip sutvarkyti. Beje, čia reikia paminėt, kad tas atskirai parduodamas servo buferis čia niekuo nepadėtų. Tačiau, kadangi aš teisingai supratau to priežastį, tai pavyko išspręsti, sinchronizuojant servo signalų išsidėstymą laike. Teko nemažai pasukt galvą bet išsprendžiau tai grynai programiškai.

Tačiau pirmą skrydį bandžiau padaryt atjungęs aukščio kanalą nuo co-piloto. Paaiškėjo, kad labai neteisingai nustačiau aukščio vairo eigas, ir lėktuvas, gavęs komandą kilti aukštyn, net kilpą padarydavo. Be co-piloto aukščio vairas labai jautrus.

Kai pavyko išspręst co-piloto problemą, viskas susitvarkė. Antras skrydis parodė, kad visi taškai buvo pasiekti be jokių problemų. Įdomus vėjo poveikis. Kadangi antras bandymas buvo gana vėjuotą dieną, tai lėktuvo skrydis nurodytu maršrutu nebuvo idealus. Pasitaiko, kad lėktuvas praskrenda nurodytą tašką. Tada jis iš karto apsisuka, ir grįžta iki nurodytos vietos. Taškas vis tiek pasiekiamas ir toliau skrendama į sekantį tašką. Beje, pataikymo į tašką tikslumas pas mane keičiamas. Galiu nustatyti, kiek metrų galima nepataikyt. Įdomiai atrodo ir greičio valdymas, matosi kaip autopilotas didina variklio apsukas kai reikia kilti aukštyn, ir sumažina ar visai išjungia variklį, kai leidžiasi.

Tolimesni bandymai buvo ramesniu oru. Kai vėjo beveik nėra, skrydis artimas idealiam. Labai įdomu stebėt tokį skrydį – įjungi autopilotą ir gali žiūrėt kaip lėktuvas skrenda nurodytu maršrutu. Nė karto nebuvo, kad maršrutas nebūtų įvykdytas, tik vieną kartą, per apsižioplinimą, nepersirašė “namų” taškas, liko tas, kur skraidžiau anksčiau, o jis buvo už 8 km nuo skraidymo vietos, tai iš pradžių net nesupratau kas darosi, baigęs skristi nurodytu maršrutu, lėktuvas, vietoj to, kad grįžtų atgal, bandė nuskrist neaišku kur. Bet buvo greitai grąžintas atgal :) Namuose pasijungiau prie kompiuterio ir pasižiūrėjau maršrutą. Iš karto paaiškėjo kame reikalas. :) Peržiūrėdamas maršrutą galiu matyti kiekvieno taško koordinates, aukštį, ir atstumą iki sekančio taško. Atstumas apskaičiuojamas pagal koordinates.

Papildomo servo kanalas gali būti naudojamas fotografavimui. Šiuo metu padariau taip, kad jei įjungtas autopilotas, tai fotografuojama pastoviai kas 8 s. Jei perjungiu į rankinį režimą fotografavimas išjungiamas. Bet čia galima padaryt bet kaip, kiek tik fantazija leidžia. Pvz. fotografuoti tik pasiekus nurodytą tašką ir pan.

Dar reikėtų paminėt, kad čia yra toks minimalistinis autopiloto variantas. Funkcijų gali būti daug daugiau. Dažnai autopilote naudojami dar papildomi slėgio davikliai, kad nustatyti modelio greitį ne pagal GPS, o oro atžvilgiu. Man šitas dalykas kėlė nemažai abejonių, kas gausis, jei nustatinėsiu tik pagal GPS. Suprantama, kad kai yra vėjas, kaip ir neteisinga nustatinėti pagal GPS. Teoriškai galima ir nukrist, skrendant pavėjui. Juk variklio veikimas bus reguliuojamas neteisingai. Tačiau praktika parodė, kad tai nebūtina. Net ir prie nemažo vėjo viskas veikia puikiai. Turint omenyje, kad aš beveik visada skraidau arba kai vėjo beveik nėra, arba kai jis minimalus, tai man tas greičio nustatymas oro atžvilgiu visai nesvarbus. Buvo abejonių ir dėl aukščio tikslumo. Nežinau ant kiek jis tikslus, tačiau jei padarau kokių 2 km maršrutą su 10-15 taškų ir bandau jį praskrist vienodam aukštyje, iš akies niekaip negalėčiau pasakyt, kas aukštis pastebimai keičiasi.

Dar įdomus dalykas yra sudaryt maršrutą, kurio aukštis bent kokie 400 m. Iš akies neįmanoma pasakyt kokiam aukštyje modelis, o čia viskas labai akivaizdu. Aukštis nustatomas atsižvelgiant į aukštį virš jūros lygio, kuris buvo pakilimo vietoje. T.y. modelis skrenda užduotame aukštyje, atskaitos taškas ne jūros lygis o žemės paviršius.

Per keletą dienų spėjau išbandyt autopilotą apie 20 kartų. Viskas veikia puikiai. Kadangi vasara jau baigėsi, norėjau spėti išbandyt dar šiais metais, tai daug kas padaryta paprasčiau nei reikėtų. Pvz. įvairių nustatymų keitimas, pasijungus prie kompiuterio, veikia per terminalą. Tai nelabai patogu, bet iš kito pusės – labai paprasta. Nustatymai keičiami tiesiog spaudinėjant skirtingus klavišus. Čia yra kur tobulėt. Manau padarysiu nustatymų valdymui programą. Jei neužsiimsiu kokiu kitu projektu, nes tie nustatymai man pačiam nelabai reikalingi, visi nustatymai pagal nutylėjimą pritaikyti būtent mano lėktuvui. Reiktų keisti tik jei būtų kitas lėktuvas.

Kaip jau minėjau, maršrutas sudaromas specialia programa, kuri leidžia skrydžio taškus dėlioti tiesiog google žemėlapyje. Kiekvienas taškas atsiranda lentelėje, kur galima prie koordinačių parašyti norimą aukštį, kurį turi pasiekti modelis šiame taške. Paskui viskas perduodama į autopilotą. Taškų gali būti iki 40, saugomi mikrokontrolerio EEPROM atmintyje. Programa gana paprasta, bet kiek aš prie jos prasėdėjau… Teko susipažinti su google žemėlapiais artimiau…

Visos pradžioje minėtos funkcijos yra ir neblogai veikia. Kuo šis autopilotas geresnis už kitus? Gal tuo, kad programa mano, ir pakeisti kažką, pridėti kokią nors norimą funkciją, nesunku. Be to, jo kaina visai juokinga (gal kokie 25 Lt bus). Įvertinus darbą jis būtų labai brangus. Bet darbas gali būti ir malonumu, kai jis sutampa su hobiu. :)

This entry was posted in Elektronika, Programavimas, RC modeliai. Bookmark the permalink.

9 Responses to Autopilotas lėktuvui

  1. ironic says:

    Smagiai čia aprašyta, net ir visai nesusidūrus su lėtuvų modeliais kyla didelis noras išbandyti kažką pačiam :)
    Šiaip prie šis įrašas prašyte prašosi video medžiagos su įrašytu lėktuvo skrydžiu pagal trajektoriją google maps :)

  2. ReM says:

    Tam trūksta visai nedaug – tereikia prie autopiloto dar pasijungti radijo ryšio modulį, kad transliuotų koordinates. Gal čia ir bus sekantis autopiloto tobulinimo žingsnis… :)

  3. gintaras says:

    Šaunuolis! Puiki idėja panaudoti autopilotą kartu su co-pilot. Aš šiuo metu “žaidžiu” su OSD, tai man autopilotas irgi aktualu, kad grąžintų lėktuvą namo, jei ryšys nutrūksta. Tam žadu skrydžio stabilizavimo sistemą su giroskopais ir akselerometru daryt, bet dabar matau, kad galimas ir atsarginis variantas – co-pilot :)

  4. ReM says:

    Co-pilotas gerai, tačiau ne visada. Pvz. šiandien, kai diena gera, bet apniukusi, co-pilotas kalibruojant mostelėjo vieną kartą eleronais. O tai reiškia – “neskrisim”. :) Aš vis tiek pabandžiau – tikrai, co-pilotas praktiškai nedaro jokio poveikio lėktuvui. Autopilotas visgi įvykdė visą maršrutą, tačiau pabaigoje, kai lėktuvas iš 300 m aukščio turėjo grįžti į 60 m, rezultatas buvo nelabai malonus. Lėktuvas tiesiog smigo žemyn, be to dar ir maksimaliu greičiu. Vos spėjau autopilotą išjungt. Kodėl taip atsitiko aišku – programoje nenumačiau tokio dalyko kaip leidimąsis stačiai žemyn. Su co-pilotu tokio dalyko niekada nebūna. Tokiu atveju GPS rodo, kad greitis artimas 0, reiškia autopilotas bando padidint greitį, tačiau greitis nedidėja, gazas maksimalus, o greitis vis tiek nedidėja. :) Lekiam į žemę maksimaliu greičiu.
    Taigi, išaiškėjo, kad visgi reikėtų tokį atvejį numatyt algoritme. Principe galima pasielgt labai paprastai – jei leidžiamės žemyn, į greitį galima nekreipt dėmesio, tiesiog visai išjungt variklį. Gausis lėtas sklendimas žemyn…

  5. wattas says:

    Tai ką darai,vertas pagarbos,nes tai darai tyliai ir kukliai.Kitas jau rėktų,kad besąs pirmas ant visos Lietuvos.:)

  6. Juozas says:

    O gal galima plačiau apie simuliatorių, kuriame simuliavau skrydį pagal koordinates? Jis kaip nors susijęs su mikrovaldikliais? Gal galima būtų pavadinimą ar nuorodą?

    Smagu matyt, kad tai, ką seniai galvoji išbandyt tik niekaip “neprieina rankos”, kažkas ima ir padaro. :)

  7. arlandas says:

    labas kiek norietum pinigu jei paprayciau ymontuoti sia programa y mano liektuva?

  8. RQ says:

    Jei norėtum autopilotą parduoti – mielai paplepėčiau ;)

  9. ReM says:

    Autopilotas egzistuoja vieninteliame egzemplioriuje. Daryti kažkam dar vieną man neverta, kaina bus nelabai protinga, nes normalios plokštės aš nedariau. Ir neketinu daryt…

Leave a Reply

Your email address will not be published. Required fields are marked *