18
VILNIAUS UNIVERSITETAS MATEMATIKOS IR INFORMATIKOS FAKULTETAS PROGRAMŲ SISTEMŲ KATEDRA Lėktuvo trajektorijos vizualizavimas MATLAB sistemoje Aeroplane path visualization using MATALB system Kursinis darbas Atliko: 3 kurso, 2 grupės studentas Domantas Nuobara (parašas) Darbo vadovas: doc. Kristina Lapin (parašas) Vilnius - 2010

Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

  • Upload
    lekhue

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

VILNIAUS UNIVERSITETAS

MATEMATIKOS IR INFORMATIKOS FAKULTETAS

PROGRAMŲ SISTEMŲ KATEDRA

Lėktuvo trajektorijos vizualizavimas MATLAB sistemoje

Aeroplane path visualization using MATALB system

Kursinis darbas

Atliko: 3 kurso, 2 grupės studentas

Domantas Nuobara (parašas)

Darbo vadovas: doc. Kristina Lapin (parašas)

Vilnius - 2010

Page 2: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

2

Turinys

Įvadas ..................................................................................................................................... 3

1. Virtualaus pasaulio pritaikymas Pescaros oro uostui .................................................... 4

1.1. SKY-Scanner projektas ............................................................................................. 4

1.2. Sukruto virtualaus pasaulio nagrinėjimas .................................................................. 4

1.3. Skrydţių trajektorijų vaizdavimas virtualiame pasaulyje .......................................... 4

1.4. Idealios trajektorijos atvaizdavimas .......................................................................... 5

1.5. Ovalų koordinačių nustatymas .................................................................................. 5

1.6. Iškilusi problema su ovalų koordinatėmis ................................................................. 6

2. MATLAB ir VRML suderinamumas ............................................................................ 7

2.1. MATLAB ir VRML koordinačių sistemos ............................................................... 7

2.2. Skrydţių trajektorijų koordinačių keitimas ............................................................... 8

3. Lėktuvų skrydţių trajektorijų vaizdavimas virtualiame pasaulyje .............................. 10

3.1. Trajektorijų atvaizdavimas ...................................................................................... 10

3.2. Skrydţių trajektorijų koordinatės ............................................................................ 10

3.3. Lėktuvo sukimas virtualioje erdvėje........................................................................ 10

3.4. Lėktuvo pasukimo kampo nustatymas .................................................................... 11

3.5. Lėktuvo pasukimo kampo apskaičiavimas .............................................................. 12

Išvados ................................................................................................................................. 14

Naudotų šaltinių sąrašas ....................................................................................................... 15

Priedai .................................................................................................................................. 16

Page 3: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

3

Įvadas

Pasirodţius naujiems matavimo prietaisams - lidarams (LIDARs – Light Detection And

Ranging systems) atsirado galimybė matavimus atlikti daug tiksliau negu naudojant radarus.

Projekte SKY-Scanner yra siekiama sukurti sistemą, padedančią oro uosto dispečeriui priimti

sprendimą. Nors lidarų išmatuoti duomenys yra šimtus kartų tikslesni nei radarų duomenys,

tačiau jie matavimus atlieka tik tuomet kai yra tiksliai nutaikyti į objektą. Be to, esant blogoms

oro sąlygomis (pvz.: rūkui, lyjant lietui ar sningant) lidarai neveikia, todėl juos galima naudoti

tik kaip pagalbinę priemonę tikslinant lėktuvo padėtį, kai radaras jau yra uţfiksavęs kurioje

padėtyje yra lėktuvas. Sistema turi būti tokia, kad jai pateikus lidarų ir radarų duomenis,

išvestyje būtų galimos rizikingos situacijos tikimybė bei patikslinta lėktuvo padėtis.

Italijoje, Pescaros mieste yra oro uostas, kuriam kuriama sprendimų priėmimo sistema

SKY-Scanner. Siekiant stebėti skrydţius, išanalizuoti jų duomenis, numatyti galimas problemas,

reikia tam tikro būdo skrydţiams atvaizduoti. Suprantamiausias ir realistiškiausias būdas

atvaizduoti lėktuvo skrydį – naudojant virtualią aplinką. Šio darbo tikslas – sukurti virtualią

aplinką (virtualų pasaulį), kurioje, pagal pateiktus skrydţių duomenis – koordinates, vaizduojami

įvykę skrydţiai ir būtų galima nustatyti ar lėktuvas skrenda nenukrypdamas nuo nustatytos

skrydţio trajektorijos.

Page 4: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

4

1. Virtualaus pasaulio pritaikymas Pescaros oro uostui

1.1. SKY-Scanner projektas

Šis projektas vykdomas ne pirmus metus – dalis jo jau padaryta ir yra plėtojama.

Sprendimo priėmimo sistema yra kuriama Pescaros oro uostui, tačiau nėra pateikta jokių šio oro

uosto radarų uţfiksuotų duomenų. Tam, kad projekto dalyviai galėtų sukurti tokią sistemą

reikalingi duomenys, su kuriais būtų galima atlikti testavimus. Todėl buvo pateikti kito Italijos

oro uosto – Neapolio, radarų uţfiksuoti duomenys, kuriais remiantis buvo sukurta prototipinė

sistema Neapolio oro uostui. Toliau vykdant projektą prototipas yra perdaromas ir tobulinamas

taip, kad tiktų Pescaros oro uostui. Taigi autoriui tenkanti uţduotis yra ne sukurti virtualų pasaulį

iš naujo, o esantį Neapolio oro uosto prototipą pakeisti ir pritaikyti Pescaros oro uostui.

1.2. Sukruto virtualaus pasaulio nagrinėjimas

Neapolio oro uosto prototipą kūrė Gediminas Šumskas. Neţinant kokiomis priemonėmis,

kas ir kokiu tikslu yra sukurta, būtų neįmanoma to darbo pratęsti ir tobulinti. Taigi visų pirma

reikėjo detaliai išsianalizuoti ir išsiaiškinti kaip buvo kuriamas Neapolio oro uosto virtuali

aplinka. Perskaičius Gedimino Šumsko kursinį darbą [1 priedas] buvo aišku, kad tinkamiausias

įrankis kurti virtualiam pasauliui yra 3ds MAX modeliavimui skirta programa. Įgauti pradinių

ţinių apie darbą šiuo įrankiu padėjo jame esantys vaizdo įrašai, skirti susipaţinti su

pagrindinėmis programos funkcijomis. Tokiu būdu buvo išanalizuotas sukurtas virtualus

pasaulis, jame esantys objektai ir suţinota, kad lėktuvų skrydţių vizualizavimas atliekamas ne

3ds MAX pagalba, o naudojantis MATLAB programine įranga.

1.3. Skrydžių trajektorijų vaizdavimas virtualiame pasaulyje

Pescaros, kaip ir Neapolio, oro uoste lėktuvai leidţiasi tik iš vienos nusileidimo tako pusės.

Kiekviename oro uoste yra vietą, kurią pasiekęs lėktuvas skrenda tiesiai, maţindamas skrydţio

aukštį ir greitį – atlieką nusileidimą. Norint ţinoti ar nusileidimas vyksta pagal nustatytus

standartus, virtualiame pasaulyje yra išdėstomi ovalai, pro kuriuos turi praskristi lėktuvas, jei

nėra nukrypimų nuo trajektorijos. MATLAB sistemai parašyta programa, kuriai pateikus

skrydţio trajektorijos bei ovalų koordinates, atlieka skrydţio vizualizaciją. Programa naudoja

sukurtą virtualų pasaulį – 3ds MAX modeliavimo įrankiu yra sukurtas virtualus trimatis pasaulis,

vaizduojantis Pescaros oro uostą iš viršaus, taip pat jame yra sukurtas trimatis lėktuvo objektas

bei ovalai ir išsaugotas WRL formatu. Šiuo formatu saugomas VRML (Virtual Reality

Modelling Language) kodas, kurį supranta MATLAB sistema. MATLAB sistemoje atliekamas

Page 5: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

5

šio virtualaus pasaulio vaizdavimas ir pagal pateiktas koordinates keičiama lėktuvo padėtis

virtualioje erdvėje – nustatomos naujos lėktuvo pozicijos koordinatės ir atnaujinamas virtualus

pasaulis, kur lėktuvas jau kitoje pozicijoje. Tai vyksta pakankamai greitai, priklauso nuo

kompiuterio vykdančio programą galingumą, todėl yra nurodomas parametras p, kuris reiškia

kokią sekundės dalį reikia uţlaikyti vaizdą, prieš atnaujinat lėktuvo padėtį, t.y. jeigu parametras

p yra labai maţas, o programą vykdantis kompiuteris greitas, tuomet skrydis gali būti

atvaizduojamas labai greitai ir ţmogus nespėtų pamatyti visos trajektorijos, todėl, parenkant

tinkamą uţlaikymą, skrydis atvaizduojamas norimu greičiu.

1.4. Idealios trajektorijos atvaizdavimas

Vienas pagrindinių projekto tikslų yra skrydţių nuokrypių vaizdavimas. Pescaros oro uosto

brėţiniuose [2 naudotas šaltinis] yra paţymėtas taškas FAF (Final Aproach Fix), kuris pasako

kokiomis aplinkybėmis lėktuvas turi leistis – yra nustatyta, kad lėktuvas turi būti 2000 pėdų

aukštyje, esant 7 jūrmylių atstumui iki nusileidimo tako ir turi leistis 4,8% nuoţulnumo kampu.

Šį tašką privalo pasiekti visi atskrendantys lėktuvai ir praskridę FAF būtinai turi leistis. Taip pat,

World Areo Data internetinėje svetainėje pateikti nusileidimo tako duomenys, išsiaiškinta, kad

Pescaros nusileidimo takas yra pasuktas 218 laipsnių kampu. Taigi dabar ţinomi visi reikalingi

duomenys, norint išdėstyti ovalus, į kuriuos telpa lėktuvas ir kurie sudaro tarsi tunelį,

vaizduojantį idealią nusileidimo trajektoriją nuo taško FAF.

1 pav. Ovalai, pro kurios skrenda lėktuvas

1.5. Ovalų koordinačių nustatymas

Virtualiame pasaulyje ovalai išdėstomi statiškai – sukuriant virtualų pasaulį MATLAB

aplinkoje. Todėl turime ţinote taškų, kuriuose turi būti ovalai, koordinates. Jų apskaičiavimui

Gedimino Šumsko kursiniame darbe buvo parašyta programa, kuriai pateikus nuolydţio ir

nusileidimo tako kampus, kaip pradinius duomenis, gaunamos taškų koordinatės. Be to, galima

Page 6: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

6

pasirinkti kas kokį atstumą ir kiek ovalų norime turėti. Kadangi yra ţinoma, kad taškas FAF yra

7 jūrmylių atstumu, o mūsų naudojamos 64 koordinatės prilygsta vienai jūrmylei, gauname

atkarpos, kurioje turi būti ovalai, ilgį lygų 448. Tarkime, kad norime išdėstyti 20 ovalų, tai

atstumas tarp jų turi būtų apie 22. Įvedę į programą tokius parametrus, gauname taškų, kuriuose

turi būti ovalai, koordinates.

1.6. Iškilusi problema su ovalų koordinatėmis

Sudėliojus ovalus, pagal sugeneruotas koordinates, buvo pastebėta, kad ovalų sudaromo

tunelio kryptis nesutampa su nusileidimo taku, t.y. pasukta kitu kampu. Padaryta išvada, kad

sugeneruojamos koordinatės yra nekorektiškos. Panagrinėjus programos, parašytos c# kalba,

kodą ir pagilinus c# programavimo kalbos ţinias, nustatyta, kad nusileidimo tako pasukimo

kampą reikia pateikti radianais, o ne laipsniais. Pakoregavus programą (2 priedas) buvo

sugeneruotos tinkamas nusileidimo takui ovalų koordinatės.

Page 7: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

7

2. MATLAB ir VRML suderinamumas

2.1. MATLAB ir VRML koordinačių sistemos

Atliekant skrydţių trajektorijų atvaizdavimo testavimus sukurtame pasaulyje buvo

pastebėta, kad nusileidimo tako kryptis nesutampa su kryptimi, kuria leidţiasi lėktuvai. Daugiau

pasidomėjus apie VRML paaiškėjo, kad šis formatas naudoja šiek tiek kitokią koordinačių

sistemą.

2 pav. MATLAB ir VRML koordinatės

Kaip matosi iš [2 pav. MATLAB ir VRML koordinatės] VRML koordinačių sistemoje

Y ašis sukeista su Z ašimi ir dar Z ašies kryptis yra pakeista. Trimatėje erdvėje aukščiu

atvaizduoti uţtenka sukeisti Y ir Z ašis, tuomet jokių problemų neiškyla, todėl nagrinėkime tik

dvimates koordinačių sistemas.

3 pav. Vektoriaus atvaizdavimas įprastoje ir VRML koordinačių sistemose

Page 8: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

8

Nusileidimo tako centro koordinatės yra 6012; -3422, jis pasuktas tam tikru kampu.

Nusileidimo takas pavaizduotas vektoriumi, kurio kryptis rodo į kurią pusę leidţiasi lėktuvai.

Paveikslėlyje [3 pav. Vektoriaus atvaizdavimas įprastoje ir VRML koordinačių sistemose]

atveju a) matome kaip sumodeliuojame virtualų pasaulį 3ds MAX modeliavimo įrankiu, ir

išsaugoję WRL formatu, gauname b) modelį. Kadangi modeliuojant ir išsaugant WRL formatu

pat koordinačių plokštuma nekinta, keičiasi tik ţymėjimas ant koordinačių ašių, todėl a)

nusileidimo tako centro koordinatės yra 6012; 3422, o išsaugojus WRL formatu – nusileidimo

tako centro koordinatės tokios, kokios buvo nustatytos (6012; -3422). Be to, modeliuojant

objektus yra

2.2. Skrydžių trajektorijų koordinačių keitimas

Tarkime skrydţio trajektorija yra tokia: D->C->B->A (iš taško D skrenda į tašką A, per

taškus C ir B). Paprastoje koordinačių sistemoje toks skrydis atrodytų kaip [4 pav. Trajektorijos

vaizdavimas įprastoje ir VRML koordinačių sistemose] a) variantas, bet sukurtas pasaulis yra

VRML standarto, kuriame naudojama kitokia koordinačių sistema, todėl skrydis iš taško D į

tašką A atvaizduojamas b) paveiksle. Akivaizdţiai matos simetrija X ašies atţvilgiu. Todėl reikia

modifikuoti skrydţio trajektorijos koordinates.

4 pav. Trajektorijos vaizdavimas įprastoje ir VRML koordinačių sistemose

Pirmuoju atveju lėktuvo trajektorija yra teisinga ir jis tariamai leidţiasi į nusileidimo taką,

jei BA vektorių laikysime nusileidimo taku. Antruoju atveju – nusileidimo takas lyg pasuktas -

90º laipsnių kampu. Todėl buvo mėginama visą virtualų pasaulį pasukti -90º laipsnių kampu, ir

taip skrydţio trajektorija turėtų sutapti su nusileidimo taku, bet iškilo tokia problema, kad

trajektorija tapo simetriška nusileidimo tako centrui. Taigi, problemos sprendimas buvo ne sukti

visą pasaulį kampu, o trajektoriją vaizduoti simetriškai nusileidimo takui. Paveiksle [4 pav.

Trajektorijos vaizdavimas įprastoje ir VRML koordinačių sistemose] a) raudonai

Page 9: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

9

pavaizduota modifikuota nusileidimo trajektorija D‘->C‘->B‘->A‘. Šiame pavyzdyje nusileidimo

tako centro koordinatės yra (6; -3), kiekvienas trajektorijos taško keičiama tik Y koordinatė:

nauja Y reikšmė gaunama iš dvigubos nusileidimo tako Y reikšmės atėmus seną Y reikšmę, t.y.

šiuo atveju A taško koordinatė 2*( 3) ( 4) 6 4 2naujaY . Tokiu būdu pakeitus

kiekvieno trajektorijos taško y koordinatę, gaunama nauja trajektorija, kurią VRML atvaizduoja

taip pat [4 pav. Trajektorijos vaizdavimas įprastoje ir VRML koordinačių sistemose]

(raudona trajektorija b) dalyje), kaip ji buvo atvaizduojama prieš modifikavimą a) dalyje. Taigi

suderinamumo problemos sprendimas yra surastas – reikia modifikuoti trajektorijų koordinates,

o ne sukti virtualų pasaulį. Trajektorijų koordinačių modifikavimas atliekamas MATLAB

programoje [5 pav. Koordinačių pakeitimas]. Nusileidimo tako centro Y koordinatė yra -3422,

todėl modifikuojant trajektorijos koordinates reikia iš dvigubos nusileidimo tako centro Y

koordinatės atimti trajektorijos Y koordinatę, t.y. -6488-Y(i). Programoje atimama z koordinatė,

nes ten Y reiškia aukštį, o Z – platumą.

5 pav. Koordinačių pakeitimas

Page 10: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

10

3. Lėktuvų skrydžių trajektorijų vaizdavimas virtualiame pasaulyje

3.1. Trajektorijų atvaizdavimas

Virtualus skrydţių trajektorijų atvaizdavimas MATLAB aplinkoje atliekamas

transformacijų principu. Keisdami virtualaus pasaulio objekto, lėktuvo, koordinates, keičiami ir

jo padėtį virtualioje erdvėje. Koordinatės pateikiamos faile, kurį nuskaito programa ir pagal jas

transformuoja lėktuvo objekto padėtį.

3.2. Skrydžių trajektorijų koordinatės

Kadangi nėra Pescaros oro uosto radarų uţfiksuotų duomenų, projekto dalyviams teko

patiems sugeneruoti tariamų skrydţių koordinates, kurias būtų galima panaudoti atliekant

testavimus.

Šią uţduotį SKY-Scanner projekte vienam dalyviui, kuris pagal Pescaros oro uosto

nusileidimo procedūras sugeneravo skrydţių be nukrypimų trajektorijų koordinates. Sugeneruoti

duomenys išsaugoti viename faile, nurodant kuriuo laiko momentu, kokio skrydţio lėktuvas

buvo tam tikroje pozicijoje. Problema buvo tame, kad pateikti duomenys nebuvo skirti šiam

virtualiam pasauliui. Šio kursinio darbo metu kuriamoje programoje vienu metu atvaizduojamas

tik vienas skrydis, todėl programai pateikti reikia taip pat tik vieno skrydţio trajektorijos

koordinates. Taigi iš pateikto kelių skrydţių duomenų failo reikėjo išskirti atskirus skrydţius ir

jų koordinates. Be to, sugeneruotų koordinačių vienetai atitiko jūrmyles, o sukurtame virtualiame

pasaulyje vieną jūrmylę atitinka 64 koordinatės. Vadinasi, sugeneruotų koordinačių failas

negalėjo būti tiesiogiai pateikiamas programai, reikėjo prieš tai duomenis apdoroti ir sutvarkyti

taip, kad atitiktų programos reikalavimus. Mėginti pačiam išrinkti kiekvieno atskiro skrydţio

koordinates, jas padauginti ir ranka surašyti atskiruose failuose uţimtų nemaţai laiko bei

atsirastų didelė tikimybė privelti klaidų, kadangi yra skrydţių trajektorijų sudarytų net iš daugiau

nei 650 taškų. Šio kursinio darbo autorius, norėdamas sutaupyti laiko ir išvengti klaidų, parašė

programą JAVA programavimo kalba, kuriai pateikus sugeneruotų duomenų failą, duomenys

apdorojami, išrenkami atskiri skrydţiai ir jų koordinatės uţrašomos atskiruose failuose. Tokiu

būdų gauta 12 failų su atskirų skrydţių trajektorijų koordinatėmis.

3.3. Lėktuvo sukimas virtualioje erdvėje

Lėktuvas yra tiesiog virtualaus pasaulio objektas, kuris juda MATLAB aplinkoje

veikiančiame pasaulyje transformuojant jo pozicijos koordinates. Tačiau lėktuvo judėjimas yra

ganėtinai statiškas, t.y. jis kaip objektas yra pasuktas tam tikru kampu ir transformuojant tik jo

Page 11: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

11

koordinates lėktuvas lieka pasuktas tuo pačiu kampu, nesvarbu kuria kryptimi vyksta judėjimas.

Siekiant, kad skrydţio atvaizdavimas atrodytų realistiškiau nutarta padaryti, kad vaizduojant

skrydţio trajektoriją lėktuvo priekis visada būtų nukreiptas judėjimo kryptimi, kitaip tariant,

lėktuvas suktųsi pagal skrydţio kryptį. Norint tai padaryti, reikia transformuoti ne tik lėktuvo

padėtį virtualioje erdvėje, bet ir pasukti jį kaip objektą z ašimi (prisiminkime, kad VRML

skirtingai atvaizduoja koordinačių ašis) tam tikru kampu.

3.4. Lėktuvo pasukimo kampo nustatymas

Pirminiame variante buvo bandoma nustatyti pasukimo kampą imant du trajektorijos

taškus, juos sujungiant gauname vektorių. Ţinant vektoriaus kryptį, galime nustatyti kokį kampą

jis sudaro su x ašimi. Kadangi testavimo trajektorijų koordinatės yra ţinomos iš anksto, tai

vektorius gaunamas imant dabartinės lėktuvo pozicijos taško koordinates ir sekančio taško

koordinates. Tačiau koordinatės yra fiksuojamas radarų, o kaip ţinoma, radarai nėra labai tikslūs.

Nors lėktuvo trajektorija yra beveik tiesi linija, bet koordinačių taškai yra šiek tiek nukrypę į

vieną ar kitą pusę, todėl vektorių kryptys irgi yra nukreiptos šiek tiek į šonus [6 pav. Kryptis į

kiekvieną tašką]. Atvaizduojant tokiu būdų apskaičiuotus pasukimo kampus lėktuvas

skrisdamas tiesiai smarkiai sukiojosi į šonus. Taigi, norint išspręsti šią problemą ir sumaţinti

bereikalingą lėktuvo sukiojimąsi į šonus, buvo nutarta lėktuvo priekį kreipti ne į sekantį

trajektorijos tašką, o į tašką esanti uţ 3 taškų nuo dabartinio [7 pav. Kryptis į trečia tašką ].

6 pav. Kryptis į kiekvieną tašką

7 pav. Kryptis į trečia tašką

Kaip matosi iš Error! Reference source not found. ir Error! Reference source not found.,

antruoju atveju trajektorija tiesesnė, nes pasukimo kampas nustatomas iš vektoriaus AD, o ne

sukiojama keletą kartų, kaip pirmuoju atveju.

Be to, buvo dirbama su iš anksto ţinomomis skrydţio trajektorijos koordinatėmis, o realiame

pasaulyje mes radaras pastoviai fiksuoja dabartinės lėktuvo pozicijos koordinates ir negalime

tiksliai ţinoti, kokiame taške lėktuvas bus po kelių sekundţių, tą galime tik numatyti, tačiau čia jau

visai kita SKY-Scanner projekto uţduotis. Todėl buvo nuspręsta lėktuvo pasukimo kampą

skaičiuoti ţiūrint ne į tašką esantį uţ kelių taškų į priekį, bet atsiţvelgiant į dabartinį tašką ir

Page 12: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

12

kokiame taške buvo prieš tai buvo prieš tai. Jei anksčiau lėktuvas būdavo taške A ir vektorių

brėţėm į sekantį tašką D [6 pav. Kryptis į kiekvieną tašką] ir pagal tai nustatėme kokiu kampu

turi būti pasisukęs, tai dabar traktuojame, kad lėktuvas jau yra taško D pozicijoje ir jame turi būti

pasisukęs kampu, kurį sudaro vektorius AD su x ašimi [7 pav. Kryptis į trečia tašką].

3.5. Lėktuvo pasukimo kampo apskaičiavimas

Pasukimo kampas visada skaičiuojamas arktangentu, tokia formule: arctan( )B A

B A

y y

x x . yra

galimos kelios lėktuvo skrydţio kryptis, todėl gautą kampą gali reikėti modifikuoti.

8 pav. Skrydimo kryptys

Virtualiame pasaulyje lėktuvo modelis yra nukreiptas į vakaras, t.y. lėktuvo priekis ţiūri –X

ašies kryptimi. Tarkime lėktuvas skrenda iš taško A į tašką B [8 pav. Skrydimo kryptys. Pagal

formulę, kampas atitinka CAB ir DBA kampus. Reikia atkreipti dėmesį į tai, kad a) atveju

kampas visada gaunasi neigiamas, todėl lėktuvą uţtenka pasukti kampu, kuris yra neigiamas,

ir jo kryptis sutampa su vektoriaus AB kryptimi. Atveju b) kampas visada gaunasi teigiamas,

todėl lėktuvą uţtenka pasukti tik kampu. Šie abu atvejai yra tuomet, kai B Ax x .

9 pav. Skrydimo kryptys

Page 13: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

13

Kitu atveju, kai B Ax x [Error! Reference source not found., kampas apskaičiavus a)

gaunasi neigiamas, o b) teigiamas. Pasukus tokiu kampu lėktuvo priekis yra nukreiptas į kitą pusę

nei vektoriaus AB, todėl prie kampo reikia pridėti 180º, tuomet lėktuvo ir vektoriaus kryptys

sutampa.

Dar galimi ir tokie atvejai kai trajektorijos taškų x arba z koordinatės yra lygios. Esant tokiai

situacijai, lėktuvas skrenda arba x, arba y ašies kryptimi. Lėktuvo pasukimo kampo skaičiavimo

programoje [10 pav. Lėktuvo pasukimo kampo skaičiavimo programos kodas] yra įtrauktos

tokios sąlygos.

10 pav. Lėktuvo pasukimo kampo skaičiavimo programos kodas

Kadangi kampas visada skaičiuojamas pagal x ašį, tai darant vis kitą lėktuvo pasukimą,

reikia iš pradţių jį atsukti į pradinę padėti. Todėl yra įsimenamas kiekvienas pasukimas, programoje

kintamasis rob. Kintamasis rot yra apskaičiuotas kampas . Paveiksle paţymėta I sąlyga, kai

skrydţio trajektorijos taškų x koordinatės sutampa, o dabartinio taško y koordinatė yra didesnė uţ

prieš tai buvusio taško y koordinatę, vadinasi lėktuvas skrido tiesiai į šiaurę, todėl turi būti pasuktas

-90º kampu, kad skrydimo kryptis sutaptų su lėktuvo kryptimi. Ţenklu II paţymėta sąlyga, kai x

koordinatės sutapo, o dabartinio taško y koordinatė maţesnė uţ prieš tai buvusio taško y koordinatę,

t.y. lėktuvas skrido pietų kryptimi, todėl lėktuvo objektą reikia pasukti 90º kampu. Situacijai kai

trajektorijos taškų y koordinatės yra lygios (lėktuvas skrenda į rytus arba vakarus) atskirai nagrinėti

nereikia, kadangi skrydţio kryptis priklausytų nuo dabartinio ir prieš tai buvusio taško x

koordinačių reikšmių, o tai programoje jau yra aprašyta.

Page 14: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

14

Išvados

Dalyvaujant SKY-Scanner projekte buvo įgyvendintas šio kursinio darbo tikslas - sukurti

virtualią Pescaros oro uosto erdvę, skirta vaizduoti lėktuvų trajektorijoms. Sukurtas virtualus

pasaulis realistiškai vaizduoja buvusius skrydţius, kadangi yra sudėti ovalai, rodantys tikslia

nusileidimo trajektoriją, galime aiškiai matyti ar lėktuvas skrenda teisinga trajektorija ar yra

nukrypimų nuo trajektorijos. Taigi tai padeda analizuoti skrydţio duomenis, nagrinėjant jų

trajektorijas.

Šio kursinio darbo įgyvendinimas reikalo įdiegti koordinačių sistemų suderinamumą tarp

VRML ir MATLAB ir išsiaiškinti kaip atrodo VRML koordinačių sistema. Padirbėjus su MATLAB

tapo aišku, jog tai puikus įrankis atlikti virtualaus pasaulio vizualizacijoms kai reikia atlikinėti

sudėtingus ar paprastus matematinius skaičiavimus ir atlikti tiriamuosius darbus. Naudojant

MATLAB būtų labai sunku sukurti galingą ir našų produktą, kadangi ji skirta primityvioms

virtualaus pasaulio simuliacijoms ir norint paleisti detalesnius virtualaus pasaulio objektus reikia

galingesnio kompiuterio, nes MATLAB reikalauja nemaţai kompiuterio resursų.

Page 15: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

15

Naudotų šaltinių sąrašas

1. Gedimino Šumsko kursinis darbas „Trimačių aplinkų kūrimo priemonės“

2. Pescaros oro uosto eismą reguliuojančios diagramos

http://uosis.mif.vu.lt/~moroz/SKY-Scanner/Francesco-Greco.rar

3. Pescaros oro uosto nusileidimo tako duomenys

http://worldaerodata.com/wad.cgi?runway=IT0726322

4. VRML ir MATLAB koordinačių sistemos

http://www.weizmann.ac.il/matlab/toolbox/vr/ch_int15.html

Page 16: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

16

Priedai

1 priedas. Trajektorijų koordinačių atskyrimo programa

public void convert(){ //Procedūra atliekanti visą darbą

try{

FileInputStream fstream = new FileInputStream("C:\\visi.csv"); //Nurodomas duomenų failas

DataInputStream in = new DataInputStream(fstream);

BufferedReader br = new BufferedReader(new InputStreamReader(in));

String strLine, procedure, coords;

while ((strLine = br.readLine()) != null){ //Nuskaitome po eilutę iš duomenų failo

procedure = strLine.substring(0, 10); //Paima skrydžio pavadinimą

coords = strLine.substring(strLine.indexOf(";;;;;;;")+7); //Paima skrydžio koordinates

addTo(procedure,coords); //Su pavadinimu ir koordinatėmis kreipiasi į procedūrą addTo

}

in.close();

}catch (Exception e){

System.err.println("Error: " + e.getMessage());

}

makeFile(x1, y1, z1, "ILS_S_49"); //----- Sukūriami failai koordinatėms įrašyti -----//

makeFile(x2, y2, z2, "ILS_P");

makeFile(x3, y3, z3, "ILS_S_59");

makeFile(x4, y4, z4, "ILS_STRA");

makeFile(x5, y5, z5, "VORD_P");

makeFile(x6, y6, z6, "VORD_S51");

makeFile(x7, y7, z7, "VORD_S63");

makeFile(x8, y8, z8, "VORD_STR");

makeFile(x9, y9, z9, "VOR_P");

makeFile(x10, y10, z10, "VOR_S_51");

makeFile(x11, y11, z11, "VOR_S_63");

makeFile(x12, y11, z12, "VOR_STRA"); //----- Sukūriami failai koordinatėms įrašyti -----//

}

private void addTo (String procedure, String coords){

/*

* Procedūra pagal pateiktą skrydžio pavadinimą nustato

* į kurį failą įrašyti koordinates, radus tinkamą failą

* kreipaisi į kitą procedūrą, kuri įrašo duomenis į tam

* tikro skrydžio koordinačių masyvą

*/

if (procedure.compareTo((char)34+"ILS_S_49"+(char)34) == 0){

add(x1, y1, z1, coords);

}else

if (procedure.compareTo((char)34+"ILS-P "+(char)34) == 0){

add(x2, y2, z2, coords);

}else

if (procedure.compareTo((char)34+"ILS-S-59"+(char)34) == 0){

add(x3, y3, z3, coords);

}else

if (procedure.compareTo((char)34+"ILS-STRA"+(char)34) == 0){

add(x4, y4, z4, coords);

}else

if (procedure.compareTo((char)34+"VORD-P "+(char)34) == 0){

add(x5, y5, z5, coords);

}else

if (procedure.compareTo((char)34+"VORD-S51"+(char)34) == 0){

add(x6, y6, z6, coords);

}else

if (procedure.compareTo((char)34+"VORD-S63"+(char)34) == 0){

add(x7, y7, z7, coords);

}else

if (procedure.compareTo((char)34+"VORD-STR"+(char)34) == 0){

add(x8, y8, z8, coords);

}else

if (procedure.compareTo((char)34+"VOR-P "+(char)34) == 0){

add(x9, y9, z9, coords);

}else

if (procedure.compareTo((char)34+"VOR-S-51"+(char)34) == 0){

add(x10, y10, z10, coords);

}else

if (procedure.compareTo((char)34+"VOR-S-63"+(char)34) == 0){

add(x11, y11, z11, coords);

}else

if (procedure.compareTo((char)34+"VOR-STRA"+(char)34) == 0){

Page 17: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

17

add(x12, y12, z12, coords);

}else

System.out.println("Procedure not found!!");

}

private void add (ArrayList<String> x, ArrayList<String> y, ArrayList<String> z, String

coords){

/*

* Procedūrai pateikiami masyvai ir

* skrydžio koordinatės. Atskiria x, y, z

* koordinates ir įrašo į masyvus

*/

x.add(coords.substring(0, coords.indexOf(';')));

coords = coords.substring(coords.indexOf(';')+1);

y.add(coords.substring(0, coords.indexOf(';')));

coords = coords.substring(coords.indexOf(';')+1);

z.add(coords.substring(0, coords.indexOf(';')));

}

private void makeFile(ArrayList<String> x, ArrayList<String> y, ArrayList<String> z, String

name){

/*

* Procedūrai paduodamas koordinačių

* masyvas ir skrydžio pavadinimas.

* Sukūriamas failas, tokių pavadinimu

* ir į jį surašomos koordinatės tam tikru

* formatu, kurio reikia MATLAB programai.

*/

Iterator<String> itr;

double dbl;

try{

FileWriter fstream = new FileWriter(name + ".m");

BufferedWriter out = new BufferedWriter(fstream);

out.write("x1 = [\n");

itr = x.iterator();

while (itr.hasNext()) {

String element = itr.next();

dbl = Double.parseDouble(element) * 64;

element = Integer.toString((int)dbl);

out.write(element + "\n");

}

out.write("];\n");

out.write("z1 = [\n");

itr = y.iterator();

while (itr.hasNext()) {

String element = itr.next();

dbl = Double.parseDouble(element) * 64;

element = Integer.toString((int)dbl);

out.write(element + "\n");

}

out.write("];\n");

out.write("y1 = [\n");

itr = z.iterator();

while (itr.hasNext()) {

String element = itr.next();

dbl = Double.parseDouble(element) / 100;

element = Integer.toString((int)dbl);

out.write(element + "\n");

}

out.write("];\n");

out.close();

}catch (Exception e){

System.err.println("Error: " + e.getMessage());

}

}

2 priedas. Ovalų koordinačių skaičiavimo programa

public static void run()

{

double alfa = 232;

while (alfa >= 180) alfa = alfa - 180;

alfa = Math.PI * alfa /180; //laipsniais ne radianais

double h_proc = 4.8; // nuolydis procentais

StreamWriter sw = new StreamWriter(@"C:\fly_plan.csv"); // sukuriamas failas, kur bus

įkeltos koordinatės

Console.WriteLine("Kas kiek išvesti?"); // kas kokį intervalą kurti koordinates

Page 18: Lėktuvo trajektorijos vizualizavimas MATLAB sistemojemoroz/SKY-Scanner/3D_Liudvikas...MATLAB_sistemoje.pdf · MATLAB sistemai parašyta programa, kuriai pateikus skrydţio trajektorijos

18

int periodas = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Kiek kartų išvesti?"); // kiek kartų skaičiuoti koordinates

int kartai = Convert.ToInt32(Console.ReadLine());

int l = 0;

for (int i = 0; i < kartai; i++)

{

l = l + periodas;

double y = (int)(-3422 - Math.Sin(alfa) * l); // -3422; 6012 oro uosto koordinatės

double x = (int)(6012 + Math.Cos(alfa) * l);

double h = (int)(l / 100 * h_proc);

sw.WriteLine(x + "; " + y + "; " + h + ";");

}

sw.Close();

}

}