Fórum témák
» Több friss téma |
Rögtön térjünk is vissza a Depth Map-re! Miért van rá szükség? Az eddigi megoldások nem konkrét értékekkel operáltak, hanem trendekkel. Ez részben a választott érzékelési technológiából következik, másrészt pedig a világ is leginkább „smooth”. Vagyis nem lehet konkrét számszerű tulajdonsággal jellemezni a környezetet, így az érzékelők jeleinek feldolgozása során sem célszerű számszerű korlátok közé szorítani a világot. Ennek azonban következménye egyes esetekben a járulékos bizonytalanság és hiba megjelenése (az adott eszköz fizikai felépítéséből adódó korlátokon túlmenően). Ennek kiküszöbölésére egyik legáltalánosabb eljárás a szenzorfúzió. Annyit használtam már ezt a szót! Mit jelent ténylegesen?
Szenzorfúzióról akkor beszélünk, ha egy paraméter mérésére kettő vagy több független módszert alkalmazunk annak érdekében, hogy az egyes szenzorok hibáját minimalizálhassuk a végeredményben. Az egyes szenzorok jeleit egy algoritmus egyesíti, ennek eredményeként a mérésünk pontosabb lesz, mint a szenzorok alapján egyedileg számítottak. Az eddig vizsgált Optical Flow alapú orientáció meghatározás vagy éppen akadálydetektálás sem minden esetben pontos. Ennek okait részben már korábban áttekintettük. Ezért mindenképpen szükséges, hogy kiegészítsük egy másik forrásból is az input adatokat. Mire gondolok konkrétan? Lássuk az akadálydetektálást! Ez az egyik legfontosabb dolog amire szükség van mozgás közben. Az optikai áramlás alapján lehetnek „vakfoltok” az akadály detektálásában. Kézenfekvő, hogy ha a környezetünket folyamatosan pásztázzuk egy adott távolságnál közelebbi objektum után, akkor úgy is érzékelhetjük a kritikus akadályt. Miért nem használunk csak távolságmérést? Azért, mert önmagában annak is megvannak a hiányosságai. Most visszamutathatnék ennek a bekezdésnek az elejére, kicserélve az optikai áramlás kifejezést távolságmérésre. Ezen túlmenően a jelfeldolgozási folyamatban vannak igen erős korlátok, amik nem teszik lehetővő bármilyen művelet elvégzését. Arról most ne is beszéljünk, hogy egy kellő pontosságú lézerszkenner milyen energiaigényű és milyen tömegű... Milyen korlátról van szó? Minden számítógép számítási kapacitása korlátos. Ennek megfelelően csak annyi műveletet képes real-time módon elvégezni ami ebbe a kapacitásba belefér. Ezt viszont igen könnyű túllépni. Igen kényes egyensúlyt kell fenntartani a szükséges műveletvégzések és a rendelkezésre álló kapacitás között. Erre még visszatérek később. Tehát az optikai áramlás mellett végezzünk távolságmérést is. Valahogy így: Video: Distance_0
Még időzzünk el itt egy kicsit:
Idézet: „Ha mélyebben bele akarunk merülni ebbe, akkor szükség lenne a helyszín, még inkább az elvárások konkrétabb definiálására. Erdőn-mezőn, Marson, városban, lépcsőn akarod járatni, esetleg ezt így mind együtt?” Úgy látom, a robot hosszú idő elteltével sem került a helyére. Azt olvasom ki a mondataidból, hogy sokkal nagyobb elvárást támasztottál a robottal kapcsolatban, mint amit én valaha is megfogalmaztam. Mégpedig azt, hogy valami konkrét cél eléréséért hozzuk létre! És más is volt így ezzel! http://www.hobbielektronika.hu/forum/topic_post_580105.html#580105 Nincs olyasfajta konkrét célja a GiantsBot létrehozásának, mint például az Eiffel torony megmászása, vagy a sivatagi (kiskunsági?) homokdűnék meghódítása. Ezt irónia nélkül, kissé eltúlozva írom azért, hogy megpróbáljam helyrerakni a dolgokat. Egyetlen célja az, hogy megmutassam az érdeklődőknek milyen bonyolult struktúra önmagában is egy autonóm rendszer létrehozása. Az már egy újabb lépés lenne ha valami különleges célt tűznénk ki. Hogy valami banális hasonlattal éljek, az ember először megtanul járni, fejlődik a mozgáskoordinációja, majd később valamikor – ha úgy hozza az élet – elindul megmászni a Mount Everest-et. De az első lépés elengedhetetlen! A robot egy zárt helyen, sík talajon, különleges terepi nehézségek nélküli térben fog mozogni, pusztán demonstrációs céllal. Nincs speciális feladat. Csak a kiindulás és a cél pozíció létezik, és akadályok közepette autonóm módon kell eljutnia egyik helyről a másikra. Természetesen reprodukálhatóan akkor is, ha minden egyes újabb indulás előtt megváltoztatom az akadályok helyét, számát és a startpozíciót. Ennyi. Sem több, sem kevesebb. Ezt egy kiindulásnak szántam (szánom), amellyel talán tudok némi pluszt adni az érdeklődőknek. Ebből aztán lehet építkezni komolyabb feladatok megoldásának irányában is! A fejemben tényleg részletesebb terv motoszkál, mint itt a topikban, de ez elsősorban konstrukciós kérdések körül forog. Egyedüli, halvány távlati elképzelés - ezt is említettem -, ha egyszer elkészül a GiantsBot .. .. akkor publikussá teszem a robot elérését (mármint nyilvános hálózaton keresztül a jelentkezőknek hozzáférést biztosítok a robot felügyeleti felületéhez). A részletesebb tervekről annyit, hogy nap, mint nap találok olyan momentumot amit újból megfontolok, és adott esetben menet közben módosítom. Így volt ez a mélységi térkép előállításával is. Idézet: „Ugyebár egyensúlyozni nem kell, mert stabil a szerkezet.” Lehet elsiklottál felette, de a GiantsBot egyensúlyoz. Csak két kereke van. A fotón látható két támaszkerék, de ennek csak a tesztelési fázisban van jelentősége (meg a fotózás idején, hogy megálljon). A célmegadást változatlanul utolsók közé sorolnám fontossági sorrendben – két inputmező is megteszi. Az „utasítások” esetében csak komplex parancsokban gondolkodom, amelynek részleteit a robot fejti ki: „Menj A-ból B-be.” Hogy konkretizáljam: elképzeléseim között szerepel egy GUI, mely menüpontjainak egyik eleme a robot instruálására szolgál. (A többi alapbeállítások, szervizfunkciók, távvezérlés, diagnosztika stb. részére van fenntartva amiről később esik szó.) Egyik lehetséges felépítése lehet az, ahol két számpárral meg kell adni a rendelkezésre álló mozgástér kiterjedését. A következővel a robot kiindulási és egy továbbival a cél pozícióját. És persze kell egy adat a robot indulási orientációjának jelzésére is. Egyébként a cél megjelölése akár vektorral is lehetséges. Ezen inputmezők mellett el tudok képzelni egy nagy nyomógombot, amin „START” felirat van és esetleg egy „STOP” nyomógomb is helyet kaphat. 70. ábra Persze tartalmilag és esztétikailag is lehet alakítani rajta. (Ezt a felületet a demonstráció kedvéért csináltam.) Egy téglalap területét egyértelműen meghatározzák a két átellenes sarkainak koordinátái. A referencia irányszög 0, és a 0 irányszögű egyenes párhuzamos az y tengellyel. A Heading a referencia iránnyal bezárt szöget mutatja meg, a Distance pedig a vektor nagyságát. Az eseménytér egy koordináta rendszer első negyede, így az egyes pontok koordinátái csak pozitív értéket vehetnek fel, a Heading értéke viszont lehet negatív is. Természetesen az x, y koordinátákból számolható a Heading és Distance paraméter, és az összefüggés megfordítva is igaz. Ez a felület interaktív, tehát az egyes mezők – ahol indokolt - írhatóak, a nyomógombok animáltak és eseményvezéreltek. A GUI egy adatbázishoz csatlakozik, ahol megtörténik a paraméterátadás. Na, itt lesz valahol a közös nevező! ...És örülök (örülnék) a hozzászólásoknak.
Tényleg elkerülte a figyelmem az egyensúlyozás. Mentségemre szolgáljon, nem szoktam újraolvasni az egész topicot. Várom a folytatást!
Mit látunk a videón? Hogy jutunk el ide?
A filmen a kép középpontjában megjelenő objektum egy pontjának távolságát jelenítem meg. A négyzet csak láthatóság miatt jelzi a mérési területet. A sztereó kamera helyett egy másik eszközt találtam, ami jobban megfelel céljaimnak, nevezetesen az XBOX 360-as Kinect szenzorát. A tesztelések alatt – a kezdeti elképzeléseket átgondolva – egyre inkább a rendszer integrációja irányába próbáltam elmozdítani a robot felépítését. E közben egy másik projekt kapcsán figyeltem fel a kinect-re. Az első pillanattól kezdve az a tulajdonsága volt fontos, hogy „mélységi látásra” képes. https://courses.engr.illinois.edu/cs498dh/fa2011/lectures/Lecture%2...11.pdf Azért röviden összefoglalom! A kinect szenzor egy IR Class 1 laser projector-ból, egy IR és egy RGB kamerából valamint egy 3D gyorsulásmérőből álló kompakt eszköz. E mellett 5 mikrofon is található benne. A működési elve ugyanúgy diszparitás alapú, mint a szetereó kameránál bemutatott. A különbség az, hogy nem RGB képpárból képezi a mélységi térképet, hanem itt az IR projector és az IR kamera alkot „sztereó párost”. Rengetek irodalma van, ha részletesebb adatokra lenne szükségetek. A működési tartománya 0.8 és 6 m közötti. Egy másik előnye, hogy ebben a kompakt egységben már megtalálható a képfeldolgozó elektronika, így az USB porton keresztül a feldolgozott információk is közvetlenül elérhetők. Mivel a készülék nem éppen a GiantsBot-hoz lett fejlesztve, úgy némi módosításra volt szükség. Az átalakítás csak a mechanikát érintette. Az eredeti több méter kábel túl nagy holtsúly a robotnak – és helyet is foglal – ezért megrövidítettem, valamint gondoskodni kellett a rögzítéséről. Az eredeti talpát eltávolítva a belső fém vázra távtartókat helyeztem el, aminél fogva később a robot „árbócához” rögzíthető. Ez egyben azt is jelenti, hogy a kinect fejjel lefelé kerül a robotra. A szervómotor eltávolítása funkcionális problémákat nem okoz. 71. ábra 72. ábra 73. ábra 74. ábra A következő képek a kinect képalkotását mutatják be. Az elsőn, jobb oldalon az RGB kamera képe látható, a bal oldalon pedig a mélységi térképből transzformált hamis színű 2D kép. A másodikon a bal oldal megegyezik az előzővel, a jobb oldalon viszont az IR kamera képét lehet látni, amelyen jól kivehető a pseudorandom mintázat. 75. ábra 76. ábra Mind az RGB, IR és Depth Map frame-ek közvetlenül olvashatóak az USB porton keresztül. A pontos mérésekhez, hasonló módon a sztereó kamerapárhoz, kalibráció szükséges. Egyébként kalibráció nélkül is elégséges a pontossága a robot számára. Az RGB kamera felbontása 640x480, az IR kameráé szintén 640x480 képpont. Megjegyzem azért, hogy az IR szenzor tényleges felbontása 1600x1200 (RAW Data), csak a Depth Map 640x480. Ez a transzformáció némi elcsúszást jelent az RGB kamera képéhez viszonyítva, azért azon lokalizálva a cél objektumot eltérést tapasztalhatunk a mélységi térképpel összehasonlítva. No de hogy is tudunk távolságot kifejezni ezekből az adatokból? A kinect mélységi érzékelése nem lineáris, és nem is méterben fejezi ki a távolságot. Mi a mélységi térkép? Nem más mint egy mátrix, ami a felbontásnak megfelelő sorok és oszlopok által meghatározott képtartományban egy-egy képpont „távolságát” adja meg. Lényegében ez analóg azzal, ahogyan pl. egy mono képnél az egyes pixelek intenzitás értékét is megadjuk. Minden képpont 0-2047 közötti értéket vehet fel, mivel 10 biten van ábrázolva. A pixelek mélységi adatát olvasva, azt maszkolni kell 10 bitre. (A művelet nélkül hamis értéket kapunk – 16 bit.) A tényleges, méterben kifejezett távolságadat közelítően az alábbi egyenlet alapján számítható: depthInMeters = 1.0 / (rawDepth * -0.0030711016 + 3.3309495161); ahol a rawDepth az adott pixel mélységi adata. (Ezt az összefüggést Matthew Fisher definiálta.)
Már meg lehet határozni egy tetszőleges pont távolságát! Hogyan tovább? Ezen lehetőség alapján miként lehet alkalmassá tenni a robotot arra, hogy felismerjen különböző akadályokat? Mit kell mérni ehhez? Hogyan lehet a háttérből kiválasztani a számunkra releváns objektumokat? Hogyan lehet kiszűrni a „talaj” zavaró hatását és az egyes pixelek hamis értékeit?
Milyen ötletetek van? Közületek többen is foglalkoztak már robotépítéssel. Ott hogyan oldottátok meg ezt a feladatot? |
Bejelentkezés
Hirdetés |