tnm085 modelleringsprojekt flygsimulator

TNM085 M ODELLERINGSPROJEKT
F LYGSIMULATOR
Albin Törnqvist, Emil Rydkvist, Oskar Krantz
15 mars 2013
Linköpings Tekniska Högskola
Sammanfattning
Syftet med detta projekt var att ta fram en matematisk modell för ett verkligt fysikaliskt förlopp och sedan visualisera förloppet på datorskärmen via simulering. I denna rapport redovisas
ett projekt där valet av modell var ett radiostyrt flygplan. Tanken med projektet var att göra
en flygsimulator med realistisk flygplansfysik implementerad i 3d-grafik. Simuleringen riktades i huvudsak mot att simulera ett radiostyrt modellflygplan som förvisso har stora likheter
med ett fullstort flygplan. Ett flygplan påverkas fysikaliskt på flera olika sätt av luftmotstånd,
vingarnas lyftkraft, propellerns framdrivning, kroppens tröghetsmoment och gravitation. För
demonstrationen var tanken att simuleringen skulle ske interaktivt, styras med en spelkontroll
och ge känslan av att flyga ett modellflygplan. Fysiken implementerades i Microsofts plattform
för spelutveckling, XNA 4.0 i språket C#. För att få en exakt simulering krävs experimentell
uppmätning av vissa konstanter och värden. Därför har en del förenklingar gjorts.
Innehåll
1
Inledning
1.1 Syfte och mål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Metod och källor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
1
1
2
Fysik
2.1 Lyftkraft . . . . . .
2.2 Framdrivning . . .
2.3 Tröghetsmoment .
2.4 Kollision med mark
.
.
.
.
2
2
3
4
5
.
.
.
.
.
.
.
.
.
6
6
6
6
6
7
7
8
8
8
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Implementering
3.1 Förenklingar . . . . . . . . . . . . . .
3.1.1 Lyftkraftskoefficient . . . . .
3.1.2 Framdrivning . . . . . . . . .
3.1.3 Koefficienter för luftmotstånd
3.1.4 Tröghetsmoment . . . . . . .
3.1.5 Kollisionsmodell . . . . . . .
3.2 Simulering . . . . . . . . . . . . . . .
3.2.1 Struktur . . . . . . . . . . . .
3.2.2 Simuleringsloopen . . . . . .
4
Resultat
5
Avslutning
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
11
Litteraturförteckning
12
A Kod
13
B Flödesschema av implementering
17
Figurer
2.1
2.2
2.3
2.4
Krafter som verkar på ett flygplan. . . . . . . . . . . . . . .
Krafter som verkar på en vinge under rörelse. . . . . . . . .
Lyftkraftskoefficientens värde som funktion av attackvinkeln.
Skillnaden i lufthastighet vid en propeller. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
3
4
3.1
Flygplan approximerad med rätblock. . . . . . . . . . . . . . . . . . . . . . .
7
4.1
4.2
Ögonblicksbild från flygsimulatorn med krafter visualiserade. . . . . . . . . . 9
Flygplan approximerat med rätblock med utmärkt tyngdpunkt. . . . . . . . . . 10
Tabeller
4.1
Tabell över flygplanets egenskaper. . . . . . . . . . . . . . . . . . . . . . . . .
9
1. Inledning
Idag är det populärt att visualisera fysikaliska förlopp på datorskärmen. För att få en sådan
visualisering att se trovärdig ut krävs kunskap om hur varje del av förloppet fungerar och ska
räknas ut. Aerodynamikens delar är många och till stor del avancerade. I denna rapport behandlas fysiken för ett aerodynamiskt förlopp och hur det implementeras grafiskt.
1.1
Syfte och mål
Projektets syfte var att en grupp studenter skulle ta fram en matematisk modell över ett fysikaliskt förlopp och visualisera detta grafiskt på datorskärmen. Detta skulle göras genom att
använda kunskaper från tidigare lästa kurser inom modellbygge och simuering. Valet av fysikaliskt förlopp för projekt var ett radiostyrt modellflygplan. Målet var att bygga en flygsimulator
med realisitisk flygplansfysik och ge möjligheten att styra det interaktivt med en handkontroll.
I mån av tid skulle även en autopilot simuleras, ljud implementeras och visuella effekter läggas
till. Om möjligheten uppstod var ambitionen även att implementera flygsimulatorn i grafikmotorn WebGL för att kunna köra den som applikation i webbläsaren.
1.2
Metod och källor
Fysiken för ett modellflygplan innehåller flera olika delmoment. Stort fokus lades på att studera delmomenten noga innan implementering kunde göras. För flygplansfysiken fanns flera
artiklar på NASAs webbsida att tillgå men flera, mer allmänna delmoment, studerades i Principles of Physics och Modellbygge och Simulering, se referenser. Samtliga i gruppen kände sig
sedan tidigare bekväma med Microsofts utvecklingsplattform XNA. Det var därför lämpligt att
implementera och prova att visualisera momenten i XNA. Applikationen växte sedan till en
komplett applikation där alla delmoment ingick.
1.3
Struktur
Rapporten inleds med ett kapitel om flygplansfysik och dess olika delmoment. Därefter beskrivs implementeringen i två steg. Först vilka förenklingar och antaganden som har gjorts
sedan beskrivs simuleringsprocessen i XNA. Avslutningsvis redovisas projektets resultat så
gott det går utan att köra applikationen, sedan evalueras resultatet och jämförs med det tänkta
målet.
1
2. Fysik
Det är många olika krafter som verkar på en kropp som färdas i luft. För att få en realistiskt
simulering av ett flygplan behöver var och en av dem studeras. I detta projekt var modellen för
simuleringen ett högvingat modellflygplan likt modellen i Figur 2.1. I detta kapitel tas relevant
fysik för ett sånt flygplan upp.
Figur 2.1: Krafter som verkar på ett flygplan.
2.1
Lyftkraft
När ett flygplan drivs framåt finns det en kraft som är essentiell för att planet ska kunna hålla
höjd och inte störta rakt ner mot marken. Denna kraft kallas lyftkraft och är nödvändig för
att motverka jordens tyngdkraft. Lyftkraft uppstår när en vinge accelereras mot luft, då luften
verkar mot vingen med samma kraft som vingen verkar mot luften. Med rätt vinkel på vingen
mot färdriktningen kan alltså en stor lyftkraft åstadkommas. Det går att beskriva lyftkraftens
samband enligt (2.1) där L är lyftkraft, CL är lyftkraftskoefficienten, ρ är luftdensiteten, v är
lufthastigheten över vingen och A är vingarean [1].
CL ρAv 2
(2.1)
2
Alla konstanter i 2.1 är relativt enkla att ta reda på förutom lyftkraftskoefficienten CL , här är
lämpligt att göra en förenkling. Lyftkraftskoefficientens storlek beror nämligen på vingens profil och hur lufttryck och luftflöde formas kring vingen. Koefficienten blir olika för olika sorters
vingprofil och mäts vanligtvis experimentellt på riktiga flygplan i vindtunnel. För ett flygplan
L=
2
Figur 2.2: Krafter som verkar på en vinge under rörelse.
med rundad vingprofil, som ger mycket lyftkraft, finns en kurva som beskriver lyftkraftskoefficientens värde i förhållande till vingens attackvinkel i Figur 2.3.
Figur 2.3: Lyftkraftskoefficientens värde som funktion av attackvinkeln.
2.2
Framdrivning
För att ett flygplan ska kunna komma framåt behövs en kraft som accelererar det framåt. Detta
kan lösas på flera sätt, men i detta projekt simulerades ett propellerplan och därför är det relevant att studera framdrivningen för ett sådant. Dragkraften som bildas när en motor vrider runt
en propeller kan beskrivas enligt 2.2.
ρA(ve2 − v02 )
(2.2)
2
Här beskrivs propellerarean med A och luftens densitet med ρ, detta multipliceras med skillnaden mellan lufthastigheten (i kvadrat) framför propellern och lufthastigheten (i kvadrat) bakom
Ft =
3
propellern. När skillnaden mellan dessa hastigheter är noll kommer inte propellerna verka på
planet längre [2]. Förklaring av var lufthastigheterna uppstår finns i Figur 2.4.
Figur 2.4: Skillnaden i lufthastighet vid en propeller.
När propellern vrids runt av motorn och har en viss vinkling, accelereras luften bakåt. Propellerns blad har liknande egenskaper som flygplanets vingar och kan beskrivas med en mycket
komplex modell. Här är det lämpligt att göra förenklingar för att ta fram lufthastigheten bakom
propellern, vilket tas upp i kapitel 3.
Precis som vingarna verkar på luften och åstadkommer lyftkraft genom att luften verkar med
en kraft tillbaka på vingarna, kommer även luften verka på andra delar av planet. När flygplanet
färdas framåt i luften kommer en motverkande kraft uppstå i form av luftmotstånd. Luftmotståndet kan beskrivas med ekvationen i (2.3) och har stöd i [3].
Cd ρv 2 A
(2.3)
2
Här beskrivs arean på kroppen som är riktad mot lufthastighetens riktning med A och lufthastigheten med v. Cd är en koefficient som beror på kroppens form och komplexitet. Denna
koefficient är komplicerad att räkna ut och mäts ofta upp experimentellt.
Fd =
2.3
Tröghetsmoment
Tröghetsmomentet är måttet på motstånd för att accelerera en kropps rotation. Den allmänna
formeln (2.4) ger tröghetsmomentet för en rotation runt en given axel. Tröghetsmomentet beror av kroppens form och hur massan är fördelad i kroppen [4]. I (2.4) är r1 avståndet från
masselementet m.
I = mr12
(2.4)
Om rotationscentrum och masscentrum för kroppen inte infaller i samma punkt krävs addition
av en term enligt 2.5.
I = mr12 + mr22
Här är r2 avståndet mellan rotationscentrum och masscentrum.
4
(2.5)
2.4
Kollision med mark
För att simulera kollision mellan objekt i en applikation i 3d finns många olika metoder. En
realistisk modell för kollision är mycket komplicerad att ta fram. I detta projekt låg fokus på
att simulera flygfysiken och därför valdes en förenklad kollisionsmodell som liknar Hookes lag
kombinerat med friktionskraft [4]. Närmare beskrivning av denna förenkling finns i kapitel 3.
5
3. Implementering
3.1
Förenklingar
Många egenskaper hos ett flygplan är mycket komplicerade att räkna ut utan att mäta upp dem
experimentellt. Vid utveckling av en flygsimulator kan det därför vara lämpligt att göra vissa
förenklingar och uppskattningar som ger ett bra resultat men kanske inte är exakt uppmätta.
Detta kapitel kommer behandla de förenklingar som är utförda i detta projekt.
3.1.1
Lyftkraftskoefficient
För att ta fram exakta värden för lyftkraftskoefficienten i 2.1 används ofta experimentella metoder. Grafen i Figur 2.3 ger ett exempel på en mycket välprofilerad vinge, optimerad för att lyfta
ett tungt flygplan och ge mycket lyftkraft. Flygplanet som simulerats i detta projekt är lätt relativt sin vingarea och behöver därför inte den storleken på lyftkraft vid attackvinkeln noll. Vidare
har lyftkraftskoefficientens inverkan på lyftkraften studerats och en funktion av attackvinkeln
som ger bra flygegenskaper har tagits fram. Denna funktion (3.1) är ej vetenskapligt korrekt
utan är experimentellt framtagen.
CL = 2αe−0.7α
3.1.2
2
(3.1)
Framdrivning
För att kunna beräkna genererad kraft från propellern med hjälp av 2.2 behöver man känna till
luftens hastighet efter att ha passerat propellern. Denna är mycket komplicerad att beräkna och
har i simuleringen förenklats till 3.2. Då vBas är luftflödet bakom propellern vid stillastående
med full gas, th är aktuellt gaspådrag och v0 är luftens hastighet in mot propellern.
ve = (vBas
v0
)th + v0
2
(3.2)
Med denna formel modelleras faktorer som propellerns varvtal och propellerbladens vinklar.
Modellen kommer att återspegla det faktum att en liten propeller med högt varvtal (och högre
vBas ) ger en högre maxfart än en stor propeller med lågt varvtal.
3.1.3
Koefficienter för luftmotstånd
Luftmotståndet förenklas till att beräknas som en komponent längs varje axel. Koefficienterna
för luftmotståndet är olika för olika axlar. Motståndet är minst vid framåtrörelse och störst vid
fall rakt nedåt sett utifrån planets egna koordinatsystem. De specifika värdena har dock till
skillnad från alla andra konstanter i simuleringen ingen vetenskaplig grund utan är valda så att
maxfart och flygegenskaper upplevs realistiska.
6
3.1.4
Tröghetsmoment
Det totala tröghetsmomentet runt varje axel räknades ut genom att addera tröghetsmomenten
runt varje axel för alla delar av flygplanet. Ett flygplan har en komplex form och det finns inga
enkla sätt att räkna ut tröghetsmomentet för dess olika delar. Därför var det nödvändigt att approximera flygplanet som fyra rätblock, en för varje del av planet. De fyra rätblocken motsvarar
flygplanets kropp, vinge, motor och batteri. Figur 4.2 illustrerar flygplanet approximerat med
rätblock. Nedan anges ekvationerna för tröghetsmomentet för rätblock som roterar runt x-axeln
(3.3), y-axeln (3.4) och z-axeln (3.5).
Ix =
1
m(h2 + d2 ) + mr2
12
(3.3)
1
m(w2 + d2 ) + mr2
(3.4)
12
1
Iz = m(h2 + w2 ) + mr2
(3.5)
12
I samtliga ekvationer är m blockets massa, w blockets bredd i x-led, h blockets höjd i y-led, d
blockets djup i z-led, r är avståndet mellan rotationscentrum för blocket och flygplanets tyngdpunkt.
Iy =
Figur 3.1: Flygplan approximerad med rätblock.
3.1.5
Kollisionsmodell
I detta projekt har kollisionsmodellen förenklats för att få flygplanet att reagera någorlunda trovärdigt med marken och ge känslan av att marken har friktion. Modellen är tänkt att likna en
fjäder och studsa flygplanet upp från marken vid kollision. För detta används en ekvation lik
hookes lag [4]. Efter experiment med olika modifieringar av Hookes lag blev kollisionsmodellen likt (3.6).
F = kx2
7
(3.6)
Här anger avståndet x hur långt under marken en given kollisionspunkt befinner sig vid kollisionstillfället. Konstanten k är vald efter vad som ser bra ut i simuleringen. För att ge kollisionen
med mark bättre realism lades även en modell för friktionen till. Denna använder kollisionskraften F i (3.6) multiplicerat med en vald friktionskoefficient och tillämpas i planets motsatta
rörelseriktning på given kollisionspunkt. Detta följer den allmänna formeln för att räkna ut
friktionskraft [4].
3.2
3.2.1
Simulering
Struktur
Simuleringen har implementerats i programmeringsspråket C# med en objektorienterad struktur. Flygplanet representeras av ett objekt av klassen AirPlane. Flygplanets läge i ett givet ögonblick representeras med hjälp av klassen PlaneState som innehåller hastighet, position, rotation
och vinkelhastighet. AirPlane rymmer även ett objekt av klassen PhysProperties som innehåller
det 40-tal variabler som påverkar flygplanets betende. Flygplanet innehåller i sin tur objekt som
representerar de delsystem som simuleras; Wings, Aerodynamics, Propulsion samt Collision.
3.2.2
Simuleringsloopen
De olika delsystemen anropas i metoden AirPlane.Simulate och alstrar då krafter på planet med
olika riktningar och angreppspunkter. Dessa krafter samlas ihop i en lista för att sedan summeras till en resulterande kraft och ett kraftmoment. Detta resultat används sedan enligt Newtons
andra lag för att beräkna derivatan respektive andraderivatan till de olika variablerna i ett tillståndsobjekt. För simuleringsprocessen beskriven i kod, se Bilaga A.
För varje tidssteg i simuleringen görs två anrop till funktionen Simulate. Först används planets
nuvarande tillstånd för att räkna ut en uppskattning av tillståndet om ett halvt tidsteg. Den uppskattningen ligger sedan till grund för ett nytt anrop till Simulate för att beräkna planets nya tillstånd, ett helt tidssteg framåt. Denna implementation av andra ordningens Runge-Kuttametod
kallas även mittpunktsmetoden [5]. För en grafisk skiss av simuleringens struktur och användningen av ett nuvarande och ett framtida tillstånd, se Bilaga B.
8
4. Resultat
Projektets resultat blev en interaktiv flygsimulator med egenskaper som ger en känsla lik att
flyga ett riktigt radiostyrt modellflygplan. För att lättare kunna se vilka krafter som verkar på
flygplanet finns möjlighet att visualisera lyftkraft, dragkraft, luftmotstånd och gravitationskraft
i simulatorn med pilar i olika färg. Nedan i Figur 4.1 visas en ögonblicksbild från simulatorn
där fysik med kraftpilar tillämpas på en enkel modell av ett flygplan.
Figur 4.1: Ögonblicksbild från flygsimulatorn med krafter visualiserade.
I detta projekt har ett högvingat modellflygplan av modell ”Cessna” simulerats. Modellens
egenskaper har varit kända eller mätits upp från en existerande modell, se Tabell 4.1.
Tabell 4.1: Tabell över flygplanets egenskaper.
Flygplanets egenskaper
Kropp Vinge Motor
Bredd (m)
0.07
1.1
0.04
Djup (m)
0.75
0.1
0.04
Höjd (m)
0.07
0.01
0.04
Vikt (kg)
0.28
0.1
0.05
2
Tröghetsmoment runt x-axeln (kgm ) 0.02
0
0
Tröghetsmoment runt y-axeln (kgm2 ) 0.02
0.01
0
2
Tröghetsmoment runt z-axeln (kgm ) 0
0.01
0
9
Batteri
0.06
0.15
0.03
0.17
0
0
0
Totalt
0.6
0.02
0.03
0.01
Flygplanets delar har sedan fördelats likt Figur 4.2 där tyngdpunkten (rotationscentrum) är
utmärkt med en rutig sfär.
Figur 4.2: Flygplan approximerat med rätblock med utmärkt tyngdpunkt.
10
5. Avslutning
Projektets huvudmål var att få en fungerande interaktiv flygsimulator som ger känslan av att
styra ett riktigt radiostyrt modellflygplan. Resultatet blev en simulator där flygplanet kan styras
interaktivt och till stor del har de egenskaper som önskats. Fysikmodellen modellerades väldigt enkelt till en början, därefter lades varje delmoment till var för sig. Detta gjorde att det
blev lättare att upptäcka fel i simuleringen. Nästan varje delmoment gav nämligen ett ostabilt
betéende vid första implementationen. Därefter kunde felet rättas till och numeriska värden på
konstanter kunde regleras så att modellen blev stabil.
Eftersom flertalet förenklingar har gjorts kan trovärdigheten för fysikmodellen ifrågasättas. Flera av de numeriska värdena i modellens delmoment kräver avancerade uträkningar med tillgång
till utrustning som inte fanns att tillgå i detta projekt. Därför har flertalet av dessa värden bestämts utifrån vad som ser bra ut på datorskärmen. I många fall kan nog dessa bestämda värden
likna de värden som skulle blivit resultatet av en experimentell uppmätning. I värsta fall skulle
dock en kedjereaktion kunna få modellen att bli dålig om flera värden i delmomenten är dåligt
valda och påverkar varandra. Tack vare att varje beteendet för varje delmoment har isolerats så
gott det går under implementeringen har detta förhoppningsvis undvikits.
Kodstrukturen för programmet i XNA har skrivits så att det är enkelt att lägga till ett nytt flygplan med helt nya egenskaper. Varje flygplansobjekt har en egen uppsättning konstanter för
egenskaper som används vid simulering. Tanken var att det ska vara enkelt att lägga till olika
flygplan och enkelt kunna testa hur de beter sig i simulatorn.
Enbart fysikdelen av projektet och framförallt implementeringen, var mycket tidskrävande. Vid
projektets start fanns flera delmål att jobba på i mån av tid. Vid projektets senare del har en del
visuella effekter lagts till och programmet har förfinats. De andra delmålen uppnåddes ej. Detta
var inte helt oväntat eftersom fysiken för ett flygplan är avancerad och fokus lades därför på
denna och inte på att hinna med alla delmål.
11
Litteraturförteckning
[1] Benson T. The Lift Equation; 2010. http://www.grc.nasa.gov/WWW/K-12/
airplane/lifteq.html. Website.
[2] Benson T. Propeller Thrust; 2008. http://www.grc.nasa.gov/WWW/K-12/
airplane/propth.html. Website.
[3] Benson T. Forces on a Falling Object; 2011. http://www.grc.nasa.gov/WWW/
K-12/airplane/falling.html. Website.
[4] Halliday D, Resnick R, Walker J. Principles of Physics. John Wiley and Sons; 2006.
[5] Glad T, Ljung L. Modellbygge och Simulering. Studentlitteratur AB; 2010.
12
A. Kod
13
B. Flödesschema av implementering