W związku z rozwojem technologii pozwalających na realizację elementów interfejsów człowiek-maszyna można zauważyć rosnące zainteresowanie rozwiązaniami umożliwiającymi sterowanie gestem. Efektywne sterowanie maszyną przy użyciu gestów wymaga doboru właściwych gestów, które pozwolą na przekazywanie precyzyjnych sygnałów sterujących, a ich rozpoznawanie nie będzie wydłużało czasu potrzebnego na kontakt operatora z maszyną. Przyjmując, że ostateczna weryfikacja przyjętego scenariusza gestów sterujących wymaga przeprowadzenia eksperymentu, Autorzy proponują prototypowe rozwiązanie eksperymentalnego systemu sterowania gestem. Do realizacji systemu wykorzystano powszechnie dostępny sensor Microsoft Kinect, co pozwoliło na ograniczenie kosztów i czasu realizacji systemu. Przedstawiono wyniki analizy kilku scenariuszy sterowania uzyskane zaproponowanym systemem.
Systemy sterowania gestem można klasyfikować na podstawie ich różnorodnego zastosowania. Jednym z najpopularniejszych obecnie zastosowań są interfejsy człowiek-komputer umożliwiające bezdotykową obsługę systemów operacyjnych, oprogramowania i urządzeń peryferyjnych. Takie rozwiązania zaproponowano w pracach [1–3]. Autorzy pracy [4] zaproponowali wykorzystanie systemu sterowania gestem do obsługi zestawów telewizyjnych, W pracy [5] zwrócono uwagę na możliwość zastosowania gestów do sterowania interaktywną tablicą, a w pracy [6] – interaktywnym biurkiem. Rozpoznawanie gestów może być wykorzystane do kontroli systemów inteligentnych domów, takich jak np. system sterowania oświetleniem [7]. Popularne jest wykorzystywanie gestów do sterowania robotami mobilnymi [8]. Śledzenie i rozpoznawanie ruchów całego ciała może być wykorzystane do sterowania robotami humanoidalnymi, tak jak zostało to zrealizowane przez autorów prac [9,10].
Innym kryterium podziału omawianych systemów sterowania jest wybrana metoda realizacji rozpoznawania gestów. Jedną z metod jest wykorzystywanie sensorów znajdujących się na powierzchni dłoni. Sensory mogą być umieszczone bezpośrednio na dłoni bądź stanowić wyposażenie dedykowanych do rozpoznawania gestów rękawic. Takie rozwiązanie wykorzystali autorzy pracy [7]. w pracy [11] autorzy wykorzystali informacje o wartościach przyśpieszeń mierzonych przy pomocy akcelerometru zamontowanego na nadgarstku. Jednakże najczęściej stosowaną metodą rozpoznawania gestów jest wykorzystanie kamery i algorytmów wizyjnych [1, 3, 5, 8]. Niektórzy autorzy rozbudowują system wizyjny poprzez dodanie drugiej kamery [2], bądź zastosowanie kamer głębokości [4], takich jak na przykład sensor Kinect [9, 10]
A. Czujnik Microsoft Kinect
Podczas realizacji systemu sterowania serwonapędem dobrano sprzęt i oprogramowanie odpowiadające za poszczególne etapy jego działania. Podstawą systemu jest czujnik MS Kinect. Urządzenie wyposażone jest w układ czterech mikrofonów posiadających wbudowane funkcje filtracji zakłóceń, emiter podczerwieni, służący do pomiaru głębokości, kamerę głębokości analizującą odbitą od obiektów i zniekształconą wiązkę podczerwoną, kamerę RGB oraz automatyczny kontroler nachylenia. Do rozpoznawania gestów wykorzystywane są kamery i emiter podczerwieni.
Szczegółową specyfikację wykorzystanego czujnika przedstawiono w tabeli 1 [11, 12]:
Element sensora | Opis |
Macierz mikrofonów | Macierz 4 mikrofonów wyposażonych w 24 bitowy przetwornik analogowo-cyfrowy, umożliwiająca automatyczne wykrywanie tła akustycznego. |
Sensor głębokości | Czujnik odległościowy składający się z dwóch części: emitującej i odbierającej wiązkę światła podczerwonego. Zakres działania: 0,4–6,5 [m]. |
Akcelerometr | Automatyczne wykrywanie nachylenia urządzenia. |
Kamera RGB | Rejestracja dwuwymiarowego obrazu RGB: • szybkość do 30 klatek/s. |
Tab. 1. Specyfikacja czujnika Microsoft Kinect
B. Porównanie środowisk programistycznych dedykowanych dla czujnika Kinect
Oficjalnym wsparciem programistycznym firmy Microsoft, dedykowanym do realizacji algorytmów na podstawie informacji dostarczanych przez czujnik Kinect jest MS Kinect Software Development Kit [13]. Biblioteka wymaga systemu operacyjnego Windows 7, środowiska MS Visual Studio 2010 oraz platformy programistycznej. NET Framework 4.0 lub aktualniejszych. MS Kinect SDK pozwala na pobieranie danych z kamery RGB oraz mapy głębokości uzyskiwanej dzięki czujnikowi głębokości. Uzupełnieniem środowiska jest biblioteka Skeletons, która umożliwia rozpoznawanie ludzkiej sylwetki na podstawie „szkieletu” oraz śledzenie jej ruchów w czasie rzeczywistym.
Drugim popularnym środowiskiem programistycznym umożliwiającym opracowywanie aplikacji współpracujących z sensorem Kinect jest OpenNI (Open Natural Interactions) Framework [14]. OpenNI jest projektem o otwartym kodzie źródłowym. OpenNI umożliwia pobieranie ramek obrazu z kamery RGB oraz danych z czujnika głębokości. Framework można uzupełnić biblioteką NITE, dzięki której dostępne funkcjonalności zostają rozszerzone o detekcję i śledzenie ludzkiej sylwetki. Przedstawione środowiska zapewniają podobny zakres możliwości i funkcjonalność. Cechy systemów zostały porównane w tabeli 2 [15]:
| Kinect for Windows SDK | OpenNI Framework |
Producent | Microsoft | PrimeSense |
Język programowania | C++, C# | C++ |
Licencja | Licencja umożliwia korzystanie z bibliotek, nie dopuszcza wprowadzania zmian w kodzie źródłowym. Środowiska nie wolno używać z czujnikami innych producentów. | Licencja umożliwia korzystanie i modyfikowanie bibliotek. |
Platforma | Windows | Windows, Linux, OS X |
Współpraca z sensorem Kinect | Pobieranie danych z kamery RGB, czujnika głębokości, mikrofonów, akcelerometru. Możliwość sterowania wbudowanymi silnikami. | Pobieranie danych z kamery RGB, czujnika głębokości, mikrofonów. Brak możliwości sterowania wbudowanymi silnikami. |
Współpraca z kamerą RGB | Przechwytywanie ramek obrazu o pełnej rozdzielczości. | Przechwytywanie ramek obrazu o rozdzielczości 800×600. |
Nagrywanie dźwięku | Możliwość przechwytywania danych z mikrofonów, nagrywania i redukcji szumów. | Sterowniki umożliwiają dostęp do mikrofonów, brak wsparcia programistycznego do nagrywania dźwięku. |
Współpraca z innymi sensorami | Dedykowany dla produktów Microsoft. | Możliwość współpracy z czujnikami 3D różnych producentów. |
Śledzenie sylwetki | Rozpoznawanie 20 przegubów szkieletu, możliwość śledzenia 2 sylwetek jednocześnie. | Rozpoznawanie 15 przegubów szkieletu, możliwość śledzenia 2 sylwetek jednocześnie. |
Tab. 2. Porównanie środowisk programistycznych dedykowanych dla sensora Kinect
C. Robot AREXX Robot Arm Pro
Ostatnim elementem systemu jest edukacyjny robot Arexx Robot Arm Pro [16]. Robot jest sterowany przez mikrokontroler ATMEGA64. Interfejsy wejścia/wyjścia są kompatybilne z systemem magistrali I2C, programator jest obsługiwany za pośrednictwem interfejsu USB. Długość ramienia to 390 mm, średnica podstawy wynosi 210 mm, a wysokość całego urządzenia to 460 mm. Robot jest zasilany prądem stałym 6–12V. Za poruszanie ramieniem odpowiada system sześciu serwonapędów.
Robot AREXX Robot Arm Pro
A. Proponowana koncepcja sterowania ramieniem robota
Do sterowania robotem operator wykorzystuje obie ręce. Ręka lewa jest wykorzystywana to sterowania pozycją (obrotem) efektora oraz zamykania i otwierania chwytaka. Obrotem serwonapędu, czyli wartością kąta zadanego steruje ruch ręki po okręgu, przedstawiony na rys. 1. Do otwierania i zamykania chwytaka zdecydowano się wykorzystać gest pchnięcia ręki operatora od siebie i z powrotem, nazwany gestem „Click”. Taki dobór gestów jest podyktowany tym, że wymagają one wykonaniu ruchów w kierunkach do siebie prostopadłych. Dzięki temu nie wpływają na siebie w znacznym stopniu i możliwy jest prawidłowy odczyt zarówno zatoczonego po okręgu kąta, jak i wykrycie gestu „Click”, co zostało dowiedzione przez autorów w pracy [17]. Ta metoda sterowania okazała się być bardzo intuicyjna dla operatora i nie wymaga długiego treningu.
Rys. 1. Sterowanie obrotem efektora przy pomocy ruchu dłoni po okręgu
B. Obliczanie położenia przegubów robota w przestrzeni
Wykorzystane ramię robota ma 5 stopni swobody. Wszystkie przeguby robota są przegubami obrotowymi, co przedstawiono na rys. 2. Aby uprościć obliczenia założono, że obrót chwytaka (przegub 5) sterowany jest przy pomocy drugiej ręki, co opisano w poprzednim rozdziale. Ponadto założono, że przegub 1 będzie obracany o pewien kąt θ, tak, aby wszystkie człony sterowanego ramienia znajdowały się w tej samej płaszczyźnie, co poszukiwany punkt, określający położenie efektora. W ten sposób problem zostaje sprowadzony do przypadku dwuwymiarowego manipulatora o trzech stopniach swobody. Konieczne jest obliczenie kątów obrotu przegubów 2, 3 i 4 wokół równoległych osi.
Rys. 2. Przeguby obrotowe wykorzystanego ramienia
Rys. 3. Współrzędne konfiguracyjne.
Poszukiwanymi zmiennymi są więc kąty obrotu poszczególnych przegubów θi, gdzie i ∈ {1, 2, 3, 4} (rys. 3). Punkt początkowy oznaczono symbolem P0= [0, 0, 0], a punkt końcowy (położenie efektora) – Pk = [xk, yk, zk]. Danymi wejściowymi dla obliczeń są xk, yk, zk, długości poszczególnych przegubów di, gdzie i ∈ {1, 2, 3, 4} oraz kąt φ, będący kątem pomiędzy osią OX przyjętego układu współrzędnych, a prostą łączącą punkt Pk z początkiem układu. Kąt θ dany jest wzorem:
Kąt φ opisuje zależność:
Kąt obrotu pierwszego przegubu θ1 dany jest wzorem:
Wyznaczono macierz transformacji:
na podstawie której wyznaczono współrzędne punktu Pk :
oraz punktu Pk–1:
Na podstawie powyższego równania uzyskano zależności:
W pracy [17] autorzy przeprowadzili szczegółową analizę skuteczności śledzenia dłoni przy pomocy algorytmu zaimplementowanego w bibliotece NITE współpracującej ze środowiskiem OpenNI NITE. Badania wykazały, że czujnik Kinect i biblioteka NITE nie może być wykorzystywany do kontrolowania aplikacji o wysokiej precyzji, takich jak teleoperacje. Jednakże sterowanie z wykorzystaniem współrzędnych uzyskanych za pośrednictwem czujnika Kinect jest możliwe do zastosowania w aplikacjach nie wymagającej tak wysokiej precyzji, oferowaną dokładność śledzenia uznano za wystarczającą dokładność dla naszej aplikacji.
Zdecydowano powtórzyć badania wykorzystując środowisko Kinect for Windows SDK i bibliotekę Skeletons. Podczas testu operator przesuwał dłoń wzdłuż torów w trzech kierunkach: poziomo, pionowo i w głąb. Celem tego eksperymentu było zbadanie niepożądanych odchyleń otrzymanego położenia dłoni podczas ruchu.
Przyjęto układ współrzędnych przedstawiony na rys. 4. Badano trzy rodzaje ruchów: wzdłuż osi X, Y i Z. W każdym przypadku operator starał się, aby właściwe współrzędne (odpowiednio yz, xz i xy) pozostawały niezmienne. Każdy z ruchów wykonano w trzykrotnie (seria I, II, i III), aby potwierdzić powtarzalność. Wynikiem pomiarów są wyliczone wartości odchyleń standardowych dla poszczególnych serii próbek. Wartości odchyleń przedstawiono rys. 5. Aby dokonać prawidłowej interpretacji uzyskanych wyników konieczne jest odniesienie otrzymanych odchyleń do pełnych zakresów wartości, jakie te współrzędne mogę przyjmować. Zgodnie z dokumentacją [18] zakresy współrzędnych elementów szkieletu wynoszą:
Średnie odchylenie wartości współrzędnej x (rys. 5a) wyniosło 0,012 [m] (0,3%) zakresu wartości współrzędnej podczas ruchu wzdłuż osi OY i 0,008 [m] (0,2%) podczas ruchu wzdłuż osi OZ.
Średnie odchylenie wartości współrzędnej y (rys. 5b) wyniosło 0,008 [m] (0,2%) podczas ruchu osi OX i 0,003 [m] (0,1%) podczas ruchu wzdłuż osi OZ. Średnie odchylenie wartości współrzędnej z (rys. 5c) wyniosło 0,010 [m] (0,3%) podczas ruchu osi OX i 0,005 [m] (0,1%) podczas ruchu wzdłuż osi OY.
Rys. 4. Przyjęty układ odniesienia
Uzyskano odchylenia współrzędnych wielkości kilku milimetrów (maksymalne średnie odchylenie wyniosło zaledwie 10 mm). W porównaniu z zakresami wartości, jakie badane współrzędne mogą osiągać, odchylenia wyniosły mniej niż 0,5%, co jest bardzo dobrym wynikiem. Testy wykazały, że dokładność śledzenia oferowana przez Kinect for Windows SDK jest bardzo wysoka, a uzyskane za jego pośrednictwem współrzędne mogą być wykorzystane do sterowania ramieniem robota.
Rys. 5. Odchylenie średnie wartości współrzędnej x (a), y (b) i z (c) podczas badanych ruchów
Podsumowanie
Eksperyment, którego celem było sterowanie ramieniem robota za pośrednictwem czujnika Kinect zakończył się powodzeniem. Operator, po krótkim treningu i za pomocą przedstawionego sposobu, przenosił przedmioty za pośrednictwem badanego ramienia. W celu zobrazowania precyzji ruchów wykonano serię ruchów ręką i zmierzono przypadkowe odchylenia od zamierzonej trajektorii. Przedstawione wyniki pokazują wartości niepożądanych odchyleń, które oscylują od 0,1 do 0,3% pełnego zakresu sterowania. Pomimo, że podczas eksperymentu operator zdołał przenieść przedmiot wykorzystując bezdotykowe sterowanie, należy stwierdzić, że sposób tego sterowania nie był wygodny.
Przede wszystkim należy zauważyć, że istnieją technologiczne możliwości precyzyjnego śledzenia położenia dłoni. Uzyskane wyniki potwierdzają, że sterowanie gestami jest rozwiązaniem, które można już praktycznie rozważać. Potrzeba szeregu rozwiązań cząstkowych, które będą tworzyć nowe, lepsze scenariusze sterowania. W opisanych próbach badano precyzję ruchu dłoni wzdłuż prostej. To nie jest naturalny ruch więc niepożądane odchylenia nie mogą dziwić i nie należy oczekiwać ich dalszego zmniejszenia. Dalszą poprawę należy upatrywać w rozbudowie słownika komunikatów czytelnych dla maszyny. Pewnego rodzaju maszynowy język migowy mógłby przykładowo komunikować maszynie, którą składową ruchu należy odczytywać jako informację sterującą pomijając pozostałe. Przypuszczalnie w zależności od stanowiska pracy użyteczną funkcją byłaby możliwość przełączania między sterowaniem zgrubnym i precyzyjnym.
Praca finansowana ze środków projektu DS w 2014 r.
Literatura:
[1] S. Kumar, J. Segen, „Gesture based 3D Man-Machine Interaction using a Single Camera“, ICMCS‘1999, vol. 1., no., pp. 630, 635.
[2] A. Prieto, F. Bellas, R.J. Duro, F. Lopez-Pena, “An Adaptive Visual Gesture Based Interface for Human Machine Interaction in Inteligent Workspaces”, VECIMS’2006, vol., no., pp. 43, 48.
[3] Y. V. Parkale, “Gesture Based Operating System Control”, ACCT’2012, vol., no., pp. 318, 323.
[4] D. Ionescu, B. Ionescu, C. Gadea, S. Islam, “An intelligent gesture interface for controlling TV sets and set-top boxes”, SACI’2011, vol., no., pp. 159, 164.
[5] M. Lech, B. Kostek, “Gesture-based computer control system applied to the interactive whiteboard”, ICIT’2012, vol., no., pp. 75,78.
[6] M. Nishino, Y. Nakanishi, M. Sugi, Y. Soo, J. Ota, T. Arai, „Design of gesture interface for deskwork support system”, ICCAS-SICE’2009, vol., no., pp. 2260, 2267.
[7] B. Mrazovac, M. Z. Bjelica, D. Simic, S. Tikvic, I. Papp, “Gesture based hardware interface for RF lightning control”, SISY’2011, vol., no., pp. 309, 314.
[8] M. Manigandan, I. M. Jackin, “Wireless Vision Based Mobile Robot Control Using Hand Gesture Recognition Through Perceptual Color Space”, ACE ‘2010, vol., no., pp. 95, 99.
[9] A. Wakabayashi, S. Motomura, S. Kato, “Communicative humanoid robot control system reflecting human body movement”, MHS’2011, vol., no., pp. 122,127.
[10] Weibo Song, Xianjiu Guo, Fengjiao Jiang, Song Jang, Guoxing Jiang, Yunfeng Shi, “Teleoperation Humanoid Robot Control System Based on Kinect Sensor”, IHMSC’2012, vol. 2, no., pp. 264, 267.
[11] „Kinect for Windows Sensor Components and Specifications”, Kinect Sensor, Programing Guide, MSDN Library, Microsoft Corporation. http://msdn.microsoft.com/en-us/library/jj131033.aspx [dostęp: 27.02.2014]
[12] Tomasz Kowalczyk, „Kinect SDK – wprowadzenie”, Baza wiedzy MSDN, Microsoft Corporation http://msdn.microsoft.com/pl-pl/library/kinect-sdk-wprowadzenie.aspx [dostęp: 27.02.2014]
[13] „Kinect for Windows SDK”, Development Tools and Languages, MSDN Library, Microsoft Corporation http://msdn.microsoft.com/en-us/library/hh855347.aspx [dostęp: 27.02.2014]
[14] „OpenNI, The standard framework for 3D sensing.” http://www.openni.org/[dostęp: 10.03.2014]
[15] M. Heichel, P. Misterska, M. Pozaroszczyk, „Sterowanie ramieniem robota za pomocą sensora Kinect”, Praca dyplomowa inżynierska, Politechnika Poznańska, 2014.
[16] „Educational robot: Robot Arm Pro. Mounting instructions: Model RA1-PRO”, Arexx Engineering http://www.erax.com/robot_arm/html/en/index.htm [dostęp: 29.09.2013].
[17] M. Parzych, A. Dąbrowski, D. Cetnarowicz, M. Wróblewski, H. Szwed, M. Staszewski, „Investigation of gesture scenarios for servomotor control using Microsoft Kinect sensor”, SPA’2013, vol. 1, pp. 112–117.
[18] „NUI_SKELETON_DATA Structure”, Development Tools and Languages, MSDN Library, Microsoft Corporation http://msdn.microsoft.com/en-us/library/nuisensor.nui_skeleton_data.aspx [dostęp: 9.03.2014].
REKLAMA |
REKLAMA |
http://www.ks-cad.com