Det f?rste steget er alts? ? finne retningen til selve raketten. M?ten jeg ?nsker ? gj?re det p?, er at jeg vil at raketten skal kunne ta et bilde av himmelen rett foran seg, ogs? ved hjelp av dette kunne bestemme i hvilken retning den peker. Raketten m? selvf?lgelig ha med seg kamera! Vi skal jo ogs? ta bilder av Skrukkla?s n?r vi kommer s? langt. Det er mange som har v?rt ute i rommet f?r oss, og der er mange som har tatt bilder der ute f?r oss. Vi vet hvordan stjernehimmelen ser ut og vi vet hvor andre himmellegemer og galakser befinner seg. Det er alts? ved hjelp av dette jeg ?nsker at raketten min skal kunne klare ? orientere seg. Men for ? gj?re det m? vi jobbe med litt bildebehandling.
Jeg har alts? b?de kunnskap om, og et sf?risk bilde, av hele bakgrunnshimmelen for v?rt stjernesystem. Jeg vil at raketten skal kunne ta et bilde foran seg, sammenlikne det med det vi allerede vet, og dermed bestemme sin egen retning. For ? bestemme de forskjellige punktene p? "kulen" bruker vi det som kalles kulekoordinater. Hvis du tenker deg om s? blir jo rommet litt som en kule, med himmellegemer p? alle kanter du snur deg, b?de over under, foran, bak og p? begge sider av deg.
N?r vi bruker kulekoordinater definerer vi et gitt punkt utifra to vinkler; φ, som ligger i xy-planet i v?rt kjente kartesiske koordinatsystem, som er det planet vi skal konsentrere oss om, og θ som angir vinkelen ut fra z-aksen. I tillegg til r som angir avstanden fra origo, men det skal ikke vi bekymre oss s? mye om akkurat n?. Kanskje det er lettere ? f? grep p? om du faktisk ser disse vinklene inni en kule:
Siden alle planetene i stjernesystemet v?rt befinner seg i det samme planet, er det vinkelen φ vi skal konsentrere oss om. Vi setter derfor θ0 = π/2, som blir det samme som ? flytte punktet P i figuren over, 90? og ned p? samme niv? som x- og y-aksen, men dette kommer jeg litt tilbake til. Derfra kan vi spinne dette punktet rundt som en karusell, og det vil da kun v?re vinkelen φ som endrer seg. Det jeg ?nsker ? bruke er det som kalles stereografisk projeksjon. To veldig vanskelige ord, jeg vet. Fordi, for ? kunne sammenlikne bildene jeg tar fra raketten, med bakgrunnshimmelen, m? jeg lage projeksjoner fra himmelkulen ned p? en flat overflate. Bildene jeg tar fra fra raketten vil alts? fremst? som flate "normale" bilder. En stereografisk projeksjon kartlegger hver posisjon p? en kule, bestemt av vinklene θ og φ, ned p? et punkt p? overflatens tangentplan rundt et gitt punkt (θ0, φ0). Kanskje det er lettere ? f? grepet p? om du ser en illustasjon.
Som nevnt tidligere jobber vi kun i xy-planet, det vil tilsvare rundt ekvator p? denne kulen, og derfor vil vi kun gj?re projeksjoner for θ0 = π/2. Punktene p? tangentplanet er gitt av koordiantene xpicture og ypicture, og (θ0, φ0) tilsvarer xpicture = ypicture = 0. DETTE ER IKKE HELT LETT ? F? GREPET P?. Det er jeg fullt klar over. Derfor tar det kanskje et par dager og en god del stirring f?r du p? helt fatt p? hva dette egentlig dreier seg om. Hjernen m? p? progressere hva det egentlig er som skjer her f?r den helt forst?r det.
Projeksjonen er er gitt av noen transformasjonslikninger, som gj?r at jeg for alle vinkler θ og φ p? kulen, kan finne de tilsvarende punktene p? bildet v?rt bestemt av koordinatene xpicture og ypicture. Jeg transformerer punktene gitt av de to vinklene p? kulen, til nye punker p? bildet v?rt. Jeg har i tillegg noen formler for ekstremalverdiene for b?de x- og y-verdiene p? bildet vi lager. Jeg legger ikke ved noen av disse formlene her n?, da det er ganske avanserte uttrykk som mest sannsynlig vil skape mer forvirring enn forst?else. Spesielt med tanke p? at det er sjanse for at det er en del forvirring ute ? g?r allerede.
Det jeg i bunn og grunn ?nsker at programvaren min skal gj?re, er at raketten skal kunne ta bilder av himmelen foran seg, ogs? skal disse bildene bli omgjort til en vektor fylt av verdier. P? forh?nd har jeg da allerede, ved hjelp av bilder vi allerede har av himmelkulen, laget mange, mange vektorer (som til sammen utgj?r en matrise), 360 for ? v?re eksakt (en for hver grad i en sirkelbevegelse). I programmet til raketten vil jeg da kj?re gjennom en l?kke som sammenlikner denne ene vektoren med verdier (som opprinnelig var bildet den tok), med alle de vektorene som allerede ligger inne i programvaren. Bildet raketten har tatt vil da tilsvare den remsa med verdier som skiller seg minst fra verdiene til bildet, og siden jeg da allerede kjenner hvilken vinkel disse verdiene h?rer til, vil programmet spytte ut akkurat hvilken himmelretning raketten peker i der og da! Ganske avansert, men samtidig ganske stilig, egentlig.
Men hvordan gj?r jeg egentlig dette? Raketten er programmert til ? ta bilder p? 640 x 480 piksler. Dvs at vi f?r 640 piksler i horisontal-/x-retning og 480 i vertikal-/y-retning. Synsfeltet (FOV = field of view) til kameraet p? raketten er p? 70?. Dvs at vinkelen mellom den ?verste og den nederste av "projeksjonslinjene" i figur 3, er p? 70?, b?de i vertikal (som du ser p? figuren) og i horisontal retning. Kort forklart er det jeg gj?r ? f?rst lage et rutenett med x- og y-verdier som tilsvarer hver av pikslene i projeksjonen. Jeg bruker formlene jeg har for stereografisk projeksjon til ? f?rst finne verdiene for θ og φ som tilsvarer hver x- og y-koordinat. og deretter har jeg kode som igjen g?r fra disse θ- og φ-verdiene til piksler p? den sf?riske bakgrunnen. Da har jeg en vektor med verdiene som tilsvarer ett bilde av himmelen. Gj?r jeg dette 360 ganger, én gang for hver grad rundt en sirkel, har jeg rett og slett alt jeg trenger.
Det siste programvaren jeg har laget gj?r, er at den bruker noe som kalles minste kvadraters metode p? forskjellen mellom bildeverdiene p? bildet raketten tar og de 360 projeksjonene som er implementert fra f?r. I minste kvadraters metode har jeg enkelt og greit verdiene for bildet raketten har tatt, trekker fra en og en av de 360 projeksjonene jeg har laget og tar kvadratet av denne summen. Den projeksjonen som gir den minste forskjellen vil da tilsvare himmelretningen raketten peker i.
Da er endelig den f?rste delen av Skynet (som jeg har valgt ? kalle programvaren) ferdigstilt. Kameraet p? raketten kan n? n?r som helst ta et bilde av rommet foran seg, sende dette til programmet, og programmet vil spytte ut vinkelen raketten peker i. Sykt stilig, jeg vet. Da gjenst?r det ? legge til kommandoer slik at raketten ogs? kan bestemme hastigheten og posisjonen sin. Dette kommer jeg til i de neste to innleggene. Jeg avslutter dette innlegget med eksempler p? bilder som raketten v?r kommer til ? ta p? ferden for ? bestemme retningen sin. Akkurat disse er da tatt av andre satellitter p? ferd gjennom rommet, men det er et ganske spektakul?rt syn.
Vi blogges, dere!