Slik lages en flysimulator på 60 minutter

Flysimulatorer er gjerne avansert programvare, men med riktige verktøy kan mye oppnås på kort tid.

Det å lage en flysimulator på 60 minutter høres i utgangspunktet ut som en umulig oppgave, men det viste seg å være fullt mulig under et fordrag ved arrangementet dagen@ifi til Institutt for Informatikk ved Universitetet i Oslo i går.

Riktignok tok Rolv Seehuus fra selskapet Systems in Motion i Kongsberg-gruppen noen snarveier under presentasjonen, noe som kommer fram i videoen nederst i saken, men viktigst var det likevel å ha de rette verktøyene tilgjengelig.

Systems in Motion (SIM) leverer vanligvis visualiseringsprogramvare som primært benyttes av selskaper innen olje- og gassindustrien. Flysimulatorer er ikke det selskapet vanligvis jobber med. Men en slik simulator er godt egnet til å demonstrere mulighetene som ligger i selskapets teknologiplattform.

En sentral del av denne plattformen er Coin3D, som SIM selv står bak. Dette er et åpen kildekodebasert bibliotek for gjengivelse av 3D-grafikk. Coin3D bygger på OpenGL og skal gjøre det enklere å utvikle kryssplattform programvare for sanntids 3D-visualisering og visuell simulering.

Operativsystemene som offisielt støttes, er Windows, Mac OS X, Linux, Solaris og SGI Irix.

Det er nettopp Coin3D Seehuus tok i bruk under demonstrasjonen, mens han programmerte med språket Python på en Mac.

- Coin kommer med en del GUI-komponenter som gjør det enklere å lage noe raskt, samt widgets og komponenter som perspektivkamera og scenegraf, fortalte Seehuus. En scenegraf er en struktur som arrangerer den logiske og ofte også den romlige representasjonen av en grafisk scene.

Nok kode til å lage et enkelt 3D-objekt

Egentlig er en flysimulator bare et kamera som kan beveges i ulike retninger i forhold til en bakgrunn. Bakgrunnen i flysimulatoren Seehuus lagde, var av landene omkring Nordsjøen. Dette ble gjort tilgjengelig ved hjelp av et bibliotek som ikke er åpen kildekode, SIM Scenery.

Det som tok mest tid under Seehuus demonstrasjon, var å implementere styringen av kameraet. Det må ha en posisjon, som gjengis ved hjelp av tre tall, samt en orientering. Denne beskrives ved hjelp av en vektor og en rotasjon, det vil si fire tall.

Kode for kameraets posisjon og orientering

Til å styre kameraet, benyttet Seehuus musen. Musbevegelser til siden ble oversatt til sideveis rulling (roll) av «flyet», mens musbevegelser framover eller bakover ble til rulling omkring x-aksen, noe som gjerne kalles «yaw».

Hvor raskt flyet skulle rulle, oppgitt i radianer per sekund, ble avgjort av hvor langt ut fra sentrum av programvinduet muspekeren ble plassert. Fordi Coin3D er en datadrevet scenegraf, gjør den dog ingenting dersom det ikke skjer noe med dataene. Dermed stoppet rullebevegelsene dersom Seehuus ikke beveget musen. Det viste seg likevel å være en smal sak å få til dette. Seehus løste det med et par-tre kodelinjer.

Det som da gjensto, var å få litt fart på flyet. Til dette tok Seehuus i bruk de mye brukte w- og s-tastene på tastaturet og laget kode for å styre hastigheten oppgitt i antall meter per sekund.

Kreasjonen til Seehuus ble på ingen måte noen avansert flysimulator, som simulerer egenskapene til et virkelig fly. Som det kommenteres i videoen nedenfor, tas det blant annet ikke hensyn til flyets oppdrift.

Men som demonstrasjon over hvor raskt og relativt enkelt det var å lage en 3D-applikasjon med Coin3D, holdt demonstrasjonen i massevis. I alt bestod vel applikasjonen av noen få hundre kodelinjer.

Til toppen