Programowanie robotów LEGO Mindstorms NXT Laboratorium 7: Programowanie robotów klasy Tribot w MRDS - programowanie graficzne w VPL #1 (zdalne sterowanie robotem). Wersja 1.3 8 października 2012
2 Zastrzeżenia prawne 2008,2012 Politechnika Śląska w Gliwicach, mgr Adrian Nowak. Niniejszy dokument jest objęty prawami autorskimi. Rozpowszechnianie, kopiowanie i udostępnianie osobom trzecim jest możliwe wyłącznie za zgodą autora. Informacja zawarta w niniejszym dokumencie ma charakter niekomercyjny, edukacyjny i jako taka nie może stanowić bazy bezpośredniej lub pośredniej dla wszelakiej działalności komercyjnej. Jakkolwiek autor dołożył wszelkich starań podczas opracowania niniejszego dokumentu tak, aby informacje przedstawiane w tym dokumencie były najnowsze i zgodne ze stanem faktycznym opisywanych urządzeń, protokołów, sprzętów oraz stanu wiedzy, nie może zagwarantować pełnej poprawności dokumentu, w szczególności w związku ze zmieniającymi się uwarunkowaniami technicznymi, wersjami firmware, wersjami oprogramowania i sprzętu. W związku z tym dokument jest udostępniany w niniejszej postaci as is bez jakiejkolwiek gwarancji i nie może stanowić podstawy do roszczeń. Autor nie odpowiada za szkody materialne i niematerialne wyrządzone pośrednio lub bezpośrednio w wyniku zastosowania informacji zawartych w niniejszym dokumencie. Autor zwraca się do wszelkich osób korzystających z niniejszego dokumentu o zgłaszanie wszelkich dostrzeżonych usterek i nieścisłości celem ich usunięcia dla szeroko rozumianego dobra ogółu. Ponieważ dokument ten może funkcjonować w wielu wersjach, w celu weryfikacji nieścisłości konieczne jest porównanie stanu faktycznego z dokumentem o odpowiedniej wersji. Znaki towarowe znajdujące się w niniejszym dokumencie przynależą wraz z prawami autorskimi odpowiednim ich właścicielom, a w szczególności: LEGO, the LEGO logo, DUPLO, BIONICLE, MINDSTORMS, the BELVILLE, CLIKITS, KNIGHTS KINGDOM and EXO-FORCE logos, the Brick and Knob configurations and the Minifigure stanowią znaki towarowe LEGO Group. Microsoft, Robotics Studio,.NET logo, Visual Studio, ActiveX oraz Windows stanowią znaki towarowe Microsoft Corporation. Java, JDK oraz JAVA logo stanowią znaki towarowe Oracle Corp. ageia PhysX stanowi znak towarowy nvidia Corporation.
3 1 Wprowadzenie. W ramach niniejszego laboratorium zaprezentowane zostaną podstawowe informacje dotyczące programowania w środowisku Microsoft Robotics Studio przy użyciu Visual Programming Language. Podstawą zajęć będzie zapoznanie się z koncepcją tworzenia oprogramowania w środowisku MSRS. Dodatkowym elementem zajęć będzie wykorzystanie urządzenia wejścia podłączonych do PC (joystick, desktop joystick, kontroler Kinect) do sterowania robotem klasy Tribot.
4 2 Konstrukcja robotów. Tribot Średnica koła 55mm, rozstaw kół w osi 112mm. Dwa serwomechanizmy odpowiedzialne za niezależny obrót kół połączone do portów sterujących B oraz C. Opcjonalnie do portu A podłączony element wykonawczy zależny od zadania stawianego robotowi. Szczegółowy opis konstrukcji znajduje się w materiałach do wykładu poświęconych konstrukcji popularnych robotów http://www.piotrczekalski.pl/mindstorms/resources/lectures/pl/3/wykład %20nr%203.pdf. Ze względu na różnorodność podłączanych sensorów nie istnieje standardowe przyporządkowanie sensorów do portów. Jednakże w przypadku stosowania sensorów genuine LEGO (po jednej sztuce z każdego rodzaju) zwyczajowo jest to: port 1 sensor dotyku, port 2 sensor natężenia dźwięku, port 3 sensor natężenia światła, port 4 ultradźwiękowy sensor odległości. Roboarm T-56 Ramię robota sterowane za pomocą trzech serwomechanizmów. Obrót ramienia wokół własnej osi za pomocą serwomechanizmu podłączonego do portu C, pochylenie/podniesienie ramienia za pomocą serwomechanizmu podłączonego do portu B, zamknięcie / otwarcie elementu chwytnego za pomocą serwomechanizmu podłączonego do portu A. Sensory podłączone są do następujących portów: port 1 sensor dotyku (czujnik obecności obiektu w uchwycie), port 2 sensor koloru (rozpoznanie obiektu w uchwycie), opcjonalnie: port 3 sensor dotyku 2 (do sterowania ramieniem), port 4 sensor akcelerometryczny wychylenia.
5 3 Plan pracy Roboty należy łączyć z komputerami za pomocą protokołu Bluetooth. Jest to jedyna standardowa możliwość połączenia robota Lego NXT ze środowiskiem Microsoft Robotics Studio. Przed uruchomieniem programu konieczne jest sparowanie robota i komputera PC. W niniejszym ćwiczeniu wykorzystywane jest środowisko Microsoft Robotics Developer Studio 2008 CTP July. Możliwe jest wykorzystanie innych wersji środowiska MRDS 2008 R3 oraz wersji MRDS 4. Nie jest wskazane korzystanie z wcześniejszych wersji CTP ze względu na błędy w środowisku. W przypadku sterowania kontrolera Kinect niezbędne jest zainstalowanie odpowiedniego SDK. Kody źródłowe w języku VPL należy komentować (korzystając z dostępnych komentarzy).
6 4 Krótkie wprowadzenie teoretyczne Środowisko Microsoft Robotics Studio Środowisko Microsoft Robotics Studio opiera się na dwóch podstawowych modelach uruchomieniowych: Concurrency and Coordination Runtime (CCR) - model zorientowany na asynchroniczne przesyłanie komunikatów, eliminuje konieczność ręcznego tworzenia i zarządzania wątkami, używanie blokad czy semaforów, Decentralized Software Services (DSS) - model zorientowany na usługi sieci Web (Service Oriented Application),.NET Common Language Runtime (CLR) 2.0 obsługuje oba powyższe modele i dostarcza dostęp do.net Framework umożliwiając wygodne tworzenie oprogramowania. Usługi Jednym z podstawowych pojęć używanych w środowisku MSRS jest usługa. Usługa jest niezależnym modułem programowym zbiorem kodów źródłowych. Usługa może się składać z innych usług. Aplikacja stworzona w MSRS jest tak naprawdę zbiorem niezależnych od siebie, działających w sieci usług, które komunikują się pomiędzy sobą (tutaj znajduje zastosowanie model DSS). Do prawie każdej usługi można uzyskać dostęp poprzez przeglądarkę internetową z użyciem protokołu DSSP (DSS Protocol) bazującego na protokołach HTTP i SOAP. Po uzyskaniu interaktywnego dostępu do usługi możemy monitorować jej działanie w czasie rzeczywistym. W większości przypadków usługi są zbiorem czynności wykonywanych na określonych elementach fizycznych lub wirtualnych (np. zachowanie jakiegoś sensora). Usługi komunikują się między sobą asynchronicznie, umożliwiając równoległą pracę kilku usług (np. ruch dwóch silników jednocześnie) tutaj zastosowanie znajduje model CCR. W uproszczeniu CCR jest biblioteką.net, stanowiącą nakładkę na operacje asynchroniczne i chroniącą programistów przed pisaniem ich własnego kodu wielowątkowego. Visual Programming Language Tworzenie aplikacji w środowisku Microsoft Robotics Studio może odbywać w dwojaki sposób: bezpośrednio w Visual Studio w jednym z języków bazujących na.net Framework, w graficznym języku programowania Visual Programming Language (VPL). W ramach niniejszego laboratorium wykorzystany zostanie VPL. VPL składa się z dwóch podstawowych rodzajów elementów: usług (services) czyli bloków reprezentujących opisane wcześniej usługi, akcji/czynności (activities) bloków realizujących działania na komunikatach wymienianych przez poszczególne usługi.
7 Każdy z bloków wykorzystywanych podczas programowania może zawierać trzy rodzaje odprowadzeń, które opisuje poniższy rysunek. W ramach niniejszego laboratorium wykorzystane zostaną głównie usługi ze zbirou Lego NXT (rysunek). Aplikacja napisana w VPL może być w prosty sposób przekonwertowana na kod C#, jednak operacja odwrotna nie jest możliwa do zrealizowania. Język VPL nie jest zorientowany obiektowo i nie dostarcza bezpośredniego dostępu do.net Framework. Co więcej, po uchomieniu aplikacji w języku VPL nie jest ona konwertowana do C#, a następnie uruchamiana, lecz od razu uruchamiana bezpośrednio z poziomu języka VPL.
8 5 Zadania do wykonania w trakcie laboratorium dla wszystkich sekcji Utworzyć przykładowy program w języku VPL, przedstawiony na poniższym rysunku. Konstrukcję programu przedstawia krokowo poniższy tutorial. Należy przejść przez kolejne kroki przewodnika starając się zrozumieć zasady tworzenia aplikacji w VPL. 1. Przeciągnąć blok usługi LegoNxtBrickv2 na powierzchnię diagramu i rozwinąć opcję konfiguracji tej usługi (np. przez dwukrotne kliknięcie na bloku). 2. Opcję Set Configuration ustawić na Set initial configuration, a następnie ustawić odpowiedni ConnectionType czyli sposób połączenia z robotem. 3. Przeciągnąć usługę LegoNXTUltrasonicSensorv2 oraz akcję If na powierzchnię diagramu. 4. Połączyć wyjście bloku czujnika odległości z wejściem bloku If. 5. Kliknąć w polu edycyjnym bloku If - powinna rozwinąć się lista podpowiedzi z dostępnymi wartościami i zmiennymi do porównania. 6. Z listy wybrać atrybut Distance (po najechaniu na niego myszką zapoznać się z podpowiedzią dotyczącą tego atrybutu). 7. Dokończyć warunek akcji If: Distance < 50. 8. Kliknąć na przycisk + bloku If spowoduje to dodanie kolejnego warunku do akcji. 9. W dodanym polu warunku analogicznie wpisać warunek: Distance < 90.
9 10. Przeciągnąć blok akcji Data na powierzchnię diagramu. 11. Ustawić wartość w polu bloku Data na 45 typu int. 12. Połączyć warunek Distance < 50 akcji If z wejściem bloku Data. 13. Przeciągnąć blok usługi LegoNXTDrivev2 na powierzchnię diagramu. 14. Połączyć wyjście bloku Data z wejściem usługi LegoNXTDrivev2 w efekcie pojawi się okno Data Connections. 15. W oknie Data Connections dla Target = Degrees wybrać wartość Value = value (rysunek). 16. Postępując analogicznie do powyższej instrukcji zrealizować pozostałe części przykładowego diagramu. 17. Uwaga: podczas przeciągania kolejnej usługi LegoNxtBrickv2 na powierzchnię diagramu środowisko zapyta, czy dodawany blok ma być kolejną instancją danej usługi czy ma być tożsamy z już istniejącą instancją. Należy w tym przypadku wybrać istniejącą instancję. 18. Zaznajomić się z oknem Properties po prawej stronie edytora. Obejrzeć dostępne tam opcje po kliknięciu na poszczególne bloki i połączenia. 19. Zaznajomić się z podpowiedziami w dymkach wyświetlającymi się po najechaniu poszczególne bloki i połączenia. 20. Zaznajomić się z opcją lupy dostępnej w prawym dolnym rogu edytora. 21. Korzystając z okna Project umiejscowionego po prawej stronie edytora zmienić nazwę oraz opis aktywnego diagramu. 22. Uruchomić utworzony program na robocie klasy Tribot.
10 6 Zadania do wykonania w trakcie laboratorium (po jednym na każdą sekcję) 1. Wykorzystując utworzony przykład stworzyć program w języku VPL pozwalający na zdalne sterowanie ruchem robota klasy Tribot przy pomocy joysticka. Jako usługi sterujące wykorzystać bloki GameController (jeśli jest dostępne fizyczne urządzenie sterujące) oraz DesktopJoystick. Należy pamiętać o poprawnej konfiguracji początkowej usługi GameController. 2. Wykorzystując utworzony przykład napisać program w języku VPL pozwalający na zdalne sterowanie ruchem robota klasy Roboarm za pomocą joysticka. Jako usługi sterujące wykorzystać bloki GameController (jeśli jest dostępne fizyczne urządzenie sterujące) oraz DesktopJoystick. Należy pamiętać o poprawnej konfiguracji początkowej usługi GameController. 3. Wykorzystując robota Tribot utworzyć aplikację w języku VPL, która steruje robotem w oparciu o usługi rozpoznawania głosu. Do tego zadania niezbędny jest mikrofon oraz system operacyjny (co najmniej Windows Vista) z zainstalowaną funkcją rozpoznawania głosu. Należy utworzyć odpowiednią konfigurację robota, a następnie utworzyć switch-case sterujący ruchem robota w zależności od podanej ustnie komendy. 4. Stworzyć aplikację sterującą robotem klasy roboarm w oparciu o gesty rozpoznawane za pomocą kontrolera Kinect. Utworzyć aplikację sterującą robotem Roboarm T56 z wykorzystaniem kontrolera Kinect. Wskazane użycie MRDS w wersji 4. Zaliczenie każdego z zadań polega na uruchomieniu i prezentacji prowadzącemu zajęcia działającego robota, spełniającego postawione we wskazanym zadaniu warunki. Prowadzący przeprowadza przy pomocy studentów pełne testy funkcjonalności robota, testy niezawodności i wykrywania sytuacji awaryjnych i radzenia sobie z nimi (przy założonych warunkach brzegowych dla zadania).
11 7 Raport W raporcie należy umieścić: 1. Krótki opis działania programu utworzonego w pkt. 5 instrukcji. 2. Zrzuty ekranu z VPL w postaci plików graficznych, prezentujące zawartość wybranego programu z pkt. 6 instrukcji (wraz z komentarzami). 3. Stałe i początkowe wartości liczbowe użyte w programie (np. odległości, wartości mocy, kąty obrotów itp.) 4. Powiązanie portów z sensorami i elementami wykonawczymi (o ile jest ono różne od standardowego). 5. W przypadku, gdy zespół realizujący projekt poczynił dodatkowe założenia / ustalenia dot. projektu, które muszą być uzgodnione z prowadzącym, należy je umieścić w raporcie. 6. Opis empirycznych testów programu z pkt. 6 wykonanych przy użyciu robota. 7. Wnioski dotyczące ograniczeń działania programu i ewentualnie przeprowadzonych optymalizacji. 8. Odpowiedzi na pytania: Czy podobały Ci się zajęcia? Co byś w nich ewentualnie zmienił? Raport należy spakować w paczkę ZIP wraz z kodami źródłowymi i przesłać w wersji elektronicznej za pomocą tzw. bazy danych, o której mowa w regulaminie i zajęciach wprowadzających w terminie określonym w regulaminie.
12 8 Literatura Programowanie robotów Lego Mindstorms NXT wykład nr 6, dr inż. Piotr Czekalski, Politechnika Śląska 2008. Programming Microsoft Robotics Studio, Sara Morgan, Microsoft Press, Washington 98052-6399, 2008 LEGO MINDSTORMS NXT Programming Guide (Technology in Action), James Floyd Kelly, Apress, 2007. On-line: NXT Tutorial created by Camtasia Studio, http://www.ortop.org, 2008. On-line: The NXT STEP LEGO MINDSTROMS NXT Blog, http://thenxtstep.blogspot.com/, Sierpień 2008.