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
© Copyright 2024