web analytics

«

»

Le(a)p na graczy

Wstęp

Jak zapewne większość z graczy, skupionych na falujących wymionach cierpiącej Lary, bądź prowadzących krucjatę w obronie przycisku start pewnego prymitywnego systemu operacyjnego nie zauważyła – od kilku miesięcy żyjemy w nowej erze. Erze zapoczątkowanej premierą maleńkiego pudełeczka, które na zawsze zmieni sposób interakcji z wirtualnym otoczeniem. Zmieni – dla potomnych bo nasze stetryczałe mózgi nie wyrwą się tak łatwo z ram stereotypu perfekcyjnego kontrolera. Za wolni jesteśmy a świat za szybki. Nie nadążymy. Mimo to, warto ten moment sobie odnotować, wyryć w pamięci, aby wnukom opowiadać wzruszające historie o tym, jaką przyjemność może dawać szuranie plastikowym klockiem po stole.

Teoria, czyli nauka za 5 złotych

“There is no evidence that people want to use these things.” (John C. Dvorak, San Francisco Examiner, February 19, 1984)

Rozpoznawanie i analiza obiektów trójwymiarowych to zagadnienia nie nowe i nie trywialne. Od lat stosowane są różne rozwiązania w przemyśle (crash testy, reverse engineering, precyzyjna obróbka), nauce (analiza chropowatości powierzchni, rekonstrukcja 3D mikrostruktury), medycynie (np. planowanie operacji plastycznych)  a także rozrywce (Kinect, modele 3D twarzy/postaci). To ostatnie zwłaszcza jest zapewne czytelnikowi nieobce. Na pewno dawno temu poznaliście zasadę działania Kinecta ale premiera leap motion jest dobrą okazją do tego aby sobie odświeżyć wiedzę i porównać stare narzędzie do rozrywki z nowym kontrolerem (leap). W zasadzie można wszystko streścić jednym zdaniem – mimo podobnej zasady działania – są to zupełnie odmienne urządzenia mające różne zastosowania. Ale po kolei.

Istnieje sporo metod pomiaru odległości/analizy obiektów 3D – stereoskopia, interferometria czy pomiar kamerą ToF (time of flight) bądź z pomocą światła strukturalnego (structured light). W każdej używamy innego zjawiska fizycznego.

W interferometrii dokonujemy pomiaru odległości mierząc różnicę drogi optycznej światła odbitego (koherentnego, tak aby możliwa była interferencja) od idealnej powierzchni (wiązka referencyjna) oraz badanej (wiązka testowa). Pomiaru dokonujemy mierząc przesunięcie prążków (fringes) na interferogramie. Metoda pozwala otrzymać dokładność  nanometryczną w osi toru optycznego oraz mniejszą (mikrometryczną, limitowaną przez aperturę soczewki) w płaszczyźnie równoległej do badanej powierzchni. Używana jest głównie w przemyśle/nauce do analizy topografii powierzchni i oprócz tego że droga to nie nadaje się praktycznie do pomiaru “dużych” skoków odległości (każda wielokrotność długości użytej fali da ten sam wynik).

(Interferometria, źródło:wiki)

 W przypadku kamery ToF generalna zasada to pomiar czasu po jakim zarejestrujemy wygenerowany przez nas i odbity od przeszkody impuls świetlny. Oczywiście jak zwykle mamy kilka rozwiązań sprzętowych – jak np. migawka działająca z częstotliwością z jaką wysyłamy impulsy przez co wystarczy badać tak naprawdę tylko intensywność docierającego do detektora światła. Rozwiązanie niestety ma kilka wad, po pierwsze – tło (które będzie przeważnie znacznie intensywniejsze od naszego obrazu), po drugie odbicia (jak łatwo się domyślić po zmianie trajektorii poprawne obliczenie dystansu jest niemożliwe) i po trzecie – wystarczająco szybkie źródła światła (mówimy tutaj o impulsach trwających kilkanaście do kilkudziesięciu ns) są raczej drogie. Mimo to mamy już dostępne tanie, konsumenckie rozwiązania (http://forum.libcinder.org/topic/future-is-here-time-of-flight-camera-for-150-from-intel-with-sdk).

Metoda skanowania 3D za pomocą “structured light” (światło/oświetlenie strukturalne) w generalnym zarysie polega na “rzuceniu” siatki punktów (lub wzoru) na mierzony obiekt i uzyskaniu głębi na podstawie analizy zmiany geometrii (przesunięcie punktów, zakrzywienie linii etc). Dobrze widać to na obrazku z Wikipedii:

Od razu możemy więc zgadnąć do czego jest ona najczęściej stosowana w przemyśle rozrywkowym (czyt. growym). Modele twarzy i mimika to jednak nie jedyne zastosowanie “structured light” o czym jednak za chwilę.

Rzućmy jeszcze okiem na inny ciekawy sposób uzyskania informacji 3D – metodę stereoskopową. Technika naśladuje nasz sposób postrzegania głębi. Nasza kora mózgowa, analizując ten sam obraz zarejestrowany z dwóch punktów odniesienia potrafi uzyskać informacje na temat odległości obserwowanych obiektów. Możemy to zastosować do analizy obrazów zarejestrowanych przez dwie kamery znajdując transformację pomiędzy grupami tych samych punktów na obydwu obrazach. Niestety przeważnie niezbyt dokładnie – im bliżej umieścimy kamery tym mniej dokładnie możemy mierzyć głębie, im dalej tym trudniej będzie skorelować obrazy a co za tym idzie… znowu mniej dokładna będzie głębia.

Oczywiście technik jest więcej (choćby “depth from focus”) , możemy je także łączyć. Kto powiedział że nie moglibyśmy użyć pasywnej techniki (stereoskopia) razem z aktywną (structured light)? A może zainwestować w algorytm? Przeglądając aktualny stan wiedzy (zobacz sam) można dostać zawrotu głowy nawet jeśli cofniemy się 10 lat do momentu kiedy powstawał kinect. Tak, rozwiązania zastosowane w obydwu urządzeniach (kinect i leap) są znane od wielu lat. Diabeł jednak jak zwykle tkwi w szczegółach do których zaraz przejdziemy.

Zanim to nastąpi, wpierw wyjaśnimy tytuł tego paragrafu. Dawno temu, jeszcze przed premierą Leap’a natrafiłem na opinie iż tenże musi być jakimś przekrętem, bo nie da się zbudować urządzenia o tak niewiarygodnej dokładności pomiaru (100um) za cenę kilkakrotnie mniejszą od kinecta. Łatwo wykazać absurdalność tej tezy poprzez kilkuminutowy eksperyment za pomocą chińskiego wskaźnika laserowego (5PLN) oraz płyty CD. Jak wiemy, ta posiada odstępy między ścieżkami na poziomie 1um (1.5 CD, około 700nm DVD), a wskaźnikiem za 5 złotych jesteśmy w stanie to zmierzyć bez problemów (szkolne doświadczenie). Magia dyfrakcji. Oczywiście trochę naciągam fakty bo musimy znać długość fali generowanej chińskim laserem (mało prawdopodobne) albo zmierzyć ją samemu za pomocą siatki dyfrakcyjnej – czytaj np. drugiej, pomierzonej już płyty CD. Tutaj oczywiście możemy się wspomóc kolegą (koleżanką) studiującym (bądź pracującym) na uczelni technicznej więc jest to jak najbardziej wykonalne.  Wszystko rozchodzi się o to – co mierzymy i po co. A w każdym z rozpatrywanym przypadków (nasz eksperyment z płytą CD, leap, kinect) mierzymy co innego i w innym celu.

Lamborgini vs Panzerkampfwagen

“I was having lots of fun, but in the back of my corporate mind, I couldn’t help but think about productivity.” (George Vinall, PC Week, April 24, 1984)


Zacznijmy od kinecta. Kinect używa diody IR do wytworzenia wiązki podczerwonej, ta przechodząc przez siatkę dyfrakcyjną tworzy nam wzór który po zrzutowaniu na scenę (nas) jest potem rejestrowany kamerą podczerwoną. Możemy ten wzór zresztą sami obejrzeć. Tak się składa, że sensory CCD jak i CMOS są bardziej czułe na podczerwień od naszego oka, a więc będąc w ciemnym pomieszczeniu i zwiększając czas ekspozycji możemy ściągnąć ze ściany wzór użyty przez inżynierów Microsoftu (no chyba że nasz aparat ma jakiś dodatkowy filtr tnący IR). A wygląda on mniej więcej tak (wycinek):

(źródło: http://azttm.wordpress.com/2011/04/03/kinect-pattern-uncovered/)

Co się dzieje dalej? Wzór jest korelowany z referencyjnym – tj. zarejestrowanym np. na płaskiej powierzchni ustawionej w znanej odległości od detektora. Wtedy, znając przemieszczenie każdego punktu możemy już dokonać triangulacji brakującego komponentu wektora położenia:

 

Voila, mamy mapę przestrzenną. Teraz, od czego zależy dokładność pomiaru? Pomijając problemy związane z kontrolą jakości (źle skalibrowany detektor) problemem będzie scena oraz oświetlenie. Intensywne oświetlenie zwiększy błąd korelacji, geometria sceny może uniemożliwić rekonstrukcję 3D (zasłaniające się elementy). Błąd także będzie się zwiększał wraz z odległością od sensora (gęstość punktów w naszym wzorze jest stała). W praktyce wygląda to tak że w odległości “biurkowej” (50 – 100cm) mamy błąd na poziomie 2 [mm], który dochodzi do 7cm przy 5 metrach (mówimy cały czas o kinekcie, dla innego “setup’u” możemy otrzymać inne wartości). Pamiętajmy jednak że jest to tylko błąd pomiaru głębokości piksela. Nie ma mowy jeszcze o ruchu obiektu, jego kształcie itd. Tu wchodzi oczywiście oprogramowanie w warstwie aplikacji.

A my się zatrzymamy i wrócimy do bohatera tego artykułu. Niestety, mimo dokonanego już “teardown” (https://learn.sparkfun.com/tutorials/leap-motion-teardown) nie znamy wciąż dokładnej zasady działania. Możemy tylko spekulować. Dwie kamery zdają się świadczyć o “stereo vision” ale dokładność mikrometryczna (100um w omawianym urządzeniu) jest w tej metodzie trudna do uzyskania. Diody IR sugerują “structured light”, jednak już wypatroszony leap ukazuje że generowana wiązka nie przechodzi przez siatkę dyfrakcyjną (bo takowej nie ma) a więc teoria upada. No chyba że czarny górny panel nie pełni roli tylko filtra światła widzialnego. Wtedy jednak byłbym w stanie zarejestrować rzucany wzór co niestety mi się nie udało. Z drugiej strony wzór nie musi być stały, a mrugające 3 diody IR generujące różne wzory skutecznie oprą się próbom ich zarejestrowania przy dłuższej ekspozycji.

To jednak tylko spekulacje. Zamiast pytać “jak działa?” lepiej zobaczyć “czy działa w ogóle”. A działa i to rewelacyjnie a liczba zastosowań leap’a jest przeogromna. Od czystej zabawy:

po sterowanie manipulatorem o wielu stopniach swobody

 

projektowanie CAD:

medycynę:

zdalne sterowanie:

czy sztukę

Dlaczego np. nie połączyć tego np. z holografią:


Jesteśmy ograniczeni tylko naszą wyobraźnią, a ta jak wiadomo nie zna granic. Możemy więc stworzyć sobie system ciekawych prezentacji, kontrolować dowolne domowe urządzenie, bawić się światłem, obrazem i dźwiękiem. Cokolwiek nam strzeli do głowy:

Co z graczami? Będzie lep?

“There is no possibility that this device will feel more comfortable to the executive than the keyboard. Because of its ‘rollability,’ the mouse has the aura of a gimmick…” (Computerworld, October 31, 1983)

To zależy. Dla tych, którzy mieli nadzieję na sterowanie systemem (zwłaszcza tym zupełnie skostniałym Windowsem przyspawanym do rozwiązań z poprzedniej epoki), którzy podniecają się input lagiem i narzekają na interpolujące myszki mam złą wiadomość – musicie wysilić troszkę swoją wyobraźnię i zauważyć, iż mamy do czynienia z zupełnie innym przyrządem. To nie myszka, nie kinect. I dlatego też nie jest lepszym czy gorszym kontrolerem. Zresztą, spróbujcie kliknąć w swoje ulubione menu start kierownicą od logitecha. Niby się da, tylko szkoda monitora. Tak samo szkoda waszych dłoni wyżłobionych przez lata po wewnętrznej stronie w kształt myszki na próby przeciągania plików w “UI by Bill Gates” za pomocą leap’a. Kontrola systemu jak najbardziej będzie możliwa ale nie desktopowego, nie takiego i raczej nie pełna. Za to już teraz, nawet tego nieszczęsnego Windowsa można wesprzeć choćby gestami (głośność, przewijanie tekstu, powiększanie zdjęć itd…) a niektóre aplikacje mają natywnie wsparcie dla leapa – np. google earth:

Działa to zresztą całkiem fajnie i wygodnie, o wiele bardziej intuicyjnie niż myszka. Jest to logiczne – zawsze tam, gdzie wymagana będzie orientacja w przestrzeni, nawigacja w trzech wymiarach, taki kontroler będzie nas doskonale wspomagał.

No i co z tymi grami w końcu? Skoro nie postrzelamy w Call of Duty to co nam pozostaje? Ano ciekawe alternatywne doznania. Zwłaszcza w połączeniu z Oculus Rift:

Przemieniając leapa w wirtualny touch screen, otwiera się więcej możliwości:

A niektóre gry zostały stworzone jakby z myślą o leap’ie.

Osu:

Fruit Ninja:

Powyższe przykłady pokazują jasno, że w tych wypadkach nowy kontroler nie jest tylko ciekawostką lecz bardziej dokładną i intuicyjną alternatywą dla myszki czy panelu dotykowego.

Kącik młodego technika

“The mouse and its friends are merely diversions in this process. What sounds revolutionary does not necessarily help anyone with anything, and therein lies the true test of commercial longevity.” (David A. Kay, Datamation, October 1983)

Jeśli oglądając ten krótki (bo w sieci projektów, pomysłów i praktycznych zastosowań są już setki) przegląd możliwości leapa, w twojej głowie zrodził się genialny pomysł na zastosowanie tego rewolucyjnego kontrolera – nic prostszego – wejdź na stronę produktu, ściągnij SDK i zacznij pisać. SDK jest dostępne zarówno dla C++ jak i javy, dobrze udokumentowane, dzięki czemu w przeciągu kilku godzin jesteśmy w stanie stworzyć np. narzędzie do masakrowania loga Grastroskopii:

Ten prosty program został napisany w javie – zbliżając palce do wirtualnej płaszczyzny chwytamy punkty kontrolne (knots) krzywej “B-spline” i przesuwając je interpolujemy (właściwie aproksymujemy – taka cecha B-spline’ów) nowy obraz. Wszelkie widoczne niedoskonałości (np. czasami mój model dłoni zawodzi i zaczynam przeskakiwać pomiędzy punktami kontrolnymi) wynikają z niekompetencji programisty.

Podsumowanie

“Does the mouse make the computer more accessible, more friendly, to certain target audiences such as executives? The answer is no.” (Computerworld, October 31, 1983)

W ramach podsumowania napiszę o tym, czego na filmach nie widać – czyli odczuciach towarzyszących nam przy kontroli “w powietrzu”. Wiadomo, mamy jedynie wzrokowe sprzężenie zwrotne, często musimy wyczuć (np. przy rysowaniu) pozycję wirtualnej płaszczyzny (kliknięcia etc.), ale po krótkim szoku poznawczym nasze zmysły dostosowują się i zauważamy niebywałą precyzję i szybkość (nie ma mowy o żadnym “lagu” – ten zależy tylko od danej aplikacji) w odwzorowaniu ruchów palców. Jest to na tyle przyjemne, że po pewnym czasie zaczynamy szukać gdzie jeszcze moglibyśmy pozbyć się klawiatury i myszki aby pracować bardziej intuicyjnie. Niestety często z jękiem zawodu trzeba sięgnąć po plastikowego klocka i szurać nim po stole bo natywnego wsparcia przeważnie brak a protezy sprawdzają się słabo.  Z drugiej strony, właśnie teraz, pisząc ten tekst, jednym ruchem palca, bez odrywania dłoni od klawiatury uciszyłem jakąś zawodzącą idolkę nastolatek i przełączyłem się na coś bardziej strawnego. Wygoda. A klocek niech sobie leży i wącha ser.

Reasumując – leap jest kontrolerem otwierającym nam nowe możliwości eksploracji wirtualnego świata XXI wieku, wzmacnia nasze zmysły, pozwala chwycić w palce to, po czym wcześniej mogliśmy tylko smyrać myszką: