Hüperboolpeegli kalibreerimine

Allikas: Digilabor

Siia kirjutan juhendit hüperboolpeegli ja kaameraga nägemissüsteemi kalibreerimiseks. Eesmärk on koguda materjali, et tulevased võistkonnad saaksid seda kasutada. Kirjeldan lühidalt erinevaid meetodeid ja põhjalikumalt meetodit, mida ise kasutasin. Ühtlasi on see ka mu kompuuterfüüsika projektiks. --Mihkelh 8. detsember 2011, kell 22:11 (UTC)


Sisukord

Iseseisva töö eesmärk

Töö eesmärk oli kalibreerida Tartu Ülikooli Robotex 2011 võistkonna Nasty roboti hüperboolpeegli ja kaamera süsteem. Ühtlasi soovin protokolli vormistada nii, et see jääks juhiseks Tartu Ülikooli robootika klubi wikissse ja sellest oleks kasu tulevastele katsetajatele.

Ülevaade probleemist

Tartu ülikooli robootika klubis on juba mitu aastat katsetatud nn. omnidirektsionaalse nägemissüsteemidega robotitega. Ehk siis robotitega, millel on peal hüperboloidi kujuline kumerpeegel ja selle läbi maailma vaatav kaamera. Tänu sellele võib robot näha igas suunas enda ümber toimuvat. See aasta osalesid võistlusel robotex 2011 kaks hüperboloidpeegliga robotiga meeskonda: Nasty (Blog) ja robo10. Kuigi suurt edu kumbki võistkond ühel või teisel põhjusel ei saavutanud, usun, et aasta aastalt ülesande keerulisemaks ja taseme kõrgemaks muutumisel kogu enda ümbrust tajuv robot saab olema tulevikus edukas.

Siin töös ja ka mujal wikis on kasutatud hüperboloid asemel vahel ka hüperbool, kuigi esimene on pöördkeha, teine ainult kirjeldab pöördkeha profiili.

Esimene vaade robotist. Tänud Erkile pildi eest!


Esimene vaade robotist. Tänud Erkile pildi eest!

Vaadates läbi sellise peegli maailma nägi meie robot sellist pilti. Selleks, et pilditöötlusel oleks parem objekte ära tunda ja robotil seda infot kasutada peab saama selle pildi "sirgeks tõmmata". Jutumärgid sellepärast, et reaalselt pole vaja pilti konverteerida, kuid peab teadma, kuhu mingi piksel vaatab ja kuidas seal pilt moondunud on. Selleks peab saama mingi seose reaalmaailma asukohtade ja pikslite vahele. Selle seose määramist konkreetse peegli ja kaamera süsteemi jaoks nimetamegi hüperboolpeegli kalibreerimiseks.

Selleks, et teada, kus mingi piksel asub, on mitu meetodit, olenevalt kui hea pilt on.

  • Kui pilt on piisavalt hea, et sealt saab tuvastada automaatsete meetoditega näiteks malelaua nurkade asukohti (see on tavaline kalibreerimiseks kasutatav objekt), siis saab kasutada seda infot kalibreerimiseks. Selleks on meetodid paljudes pilditöötluste teekides (openCV, oCamCalib).
  • Kui kaamera ja peegli kooslus on hea, saab tihti aktsepteeritava tulemuse kasutades tavalisi kaamera kalibratsiooni algoritme.

Meil ei olnud kumbki neist tingimustest täidetud. Seetõttu tuli teha keerulisem mudel.

Kaamera kalibratsioon

Ka tavalised kaamerad moonutavad pilti. Selleks, et seda kompenseerida kasutatakse kaamera mudelit mis koosneb:

  • 5-st kaamerat kirjeldavast parameetrist (camera matrix)
  • 5-st moonutusi kirjeldavast parameetrist (distortion matrix)

Kui kaamera ja peegli kombinatsioon on piisavalt hea saab ka selleks kasutatavate algoritmidega aktsepteeritava tulemuse. Näide kaamera parameetrite kohta.

Keerulisemad mudelid

Kui tavalise kaamera kalibratsiooni algoritmidega piisavalt head tulemust ei saa tuleb kasutada keerulisemaid mudeleid. Siin on mitu võimalust. Esiteks saab üldesemalt mõõta mingite punktide ja pikslite vastavus ja siis venitada pilt nende järgi paika. Nii tegi minuteada robo10 pärast muude asjade proovimist. Teiseks saab kasutada mingit keerulisemat mudelit kus parameetrid kirjeldavad hüperbooli ja kaamerat. Nii tegime meie.

Algoritmi kirjeldus

Otsustasin teha oma mudeli kus arvutatakse pikslitele vastavad asukohad väljakul sõltuvalt valitud süsteemi kirjeldavatest parameetritest. Parameetrite väärtused otsustasin leida kasutades [| simuleeritud lõimimise meetodit]. Selleks kasutasin Matlabile kirjutatud üldist [| simuleeritud lõimimise algoritmi], millele peab juurde tegema kirjutama enda mudelit kirjeldava osa ja selle järgi veafunktsiooni. Algoritm võtab:

  • veafunktsiooni
  • algsed mudeli parameetrid
  • muud algorimti sätted:
    • algtemperatuur
    • lõpptemperatuur
    • katsete arv
    • jms

Mudel

Võtsin aluseks mudeli, kus hüperboloidpeegel on kirjeldatud kolme parameetriga:

hüperbooli pikem pooltelg a
hüperbooli lühem pooltelg b
hüperbooli fookuse kõrgus põrandast mirror_h

Kaamera oli mudelis kirjeldatud viie parameetriga

kaamera x suunaline piksli nurkläbimõõt c_x
kaamera y suunaline piksli nurkläbimõõt c_y
kaamera x suunaline nurk peegli telje suhtes a_x
kaamera y suunaline nurk peegli telje suhtes a_y
kaamera kõrgus maapinnast camera_h

Parameetreid on isegi vähem kui tavalisel kaamera kalibratsiooni mudelil, kuid kuna arvestame hüperboloidi kujuga saime sellega aksepteeritava tulemuse. Korrektsem oleks kirjeldada kaamera ja hüperbooli asendeid rohkemate parameetritega. Samuti saab järelejäänud moonutusi vähendada kasutades selle peale tavalise kaamera kalibratsiooni mudelit.

Katsepunktid

Kuna maleruudustiku automaatseks tuvastamiseks oli meie pilt liiga moonutatud ja udune, siis määrasime kalibreerimiseks pikslitele vastavad katsepunktid käsitsi. Selleks laenasime (kuna käepärast polnud) teadusbussi tegijate käest 40mW rohelist laserit, mida oli kaamera pildil ka udustes piirkondades näha. Seejärel märkisin Väljakule 40cm vahedega ruudustiku, mille ristide asukohad me mõõtsime roboti suhtes ära. Seejärel märkisin laseriga erinevaid ristide asukohti ja meerkonnakaaslane Karl salvestas piksli kordinaadid kus laserit näha oli. Automaatne meetod oleks kindlasti parem, kuna katsepunktide võtmine oli üsnagi aeganõudev. Iga nelja katsepunkti vahel liigutasime robotit, et roboti asendi viga ei oleks süstemaatiline ja saaksime parima kalibratsiooni.

Veafunktsioon

Sama oluline kui õige mudel, on valida õigesti see mida minimeerida tahad. Katsetasin põhiliselt kahte varianti.

  • Punktide asukoha ja kaamerast leitud punktide asukoha ruutkeskmine viga. Annab suure kaalu kaugetele punktidele kuna nende viga on tavaliselt suurem. Ei olnud hea meile kuna on vaja palli kätte saamiseks lähedate pallide asukohtade määramiseks väikest viga.
  • Punktide askuohtade ja kaamerast leitud punktide askukohtade ruutkeskmine suhteline viga (suhteline - jagatud kaugusega punktist). Nii on lähematel punktidel suurem kaal. Sellega saime soovitud tulemused.

Tavaliselt kasutatakse piksli kordinaatide ja punkti tegeliku asukoha järgi leitud piksli kordinaatide ruutkeskmist viga. Seda kahjuks ei jõudnud proovida, kuid usun, et see annab ka hea tulemuse. Hea on ta sellepärast, et kasutusel oleva mudeli asjakohasust saad paremini hinnata kui veafunktsioon annab, et ruutkeskmine viga on x pikslit.

Tulemused

Pärast kalibreerimist. Väljak on kandilisem. Pildil on näha kalibreerimiseks väljakule märgitud punkte.

Tulemuseks saime minimaalseks ruutkeskmiseks suhteliseks veaks umbes 7%. Mis tähendab, et meetri kaugusel oleva objekti asukohaga paneme mööda keskmiselt 7 cm. Seal sees on nii roboti asendi müra (see on suur osa, kuna robot sõidab ebatasasel vaibal ja on kitsas), katsepunktide müra ja viimaks meie mudeli erinevus reaalsusest.

Palju paremat tulemust ei lootnud. Kasutatud algoritm media:hüperbool_sim_anneal.zip

Vaata ka

Personaalsed tööriistad
Navigeerimine
Käsitöö