Zaawansowane programowanie robotów LEGO

Marcin Kamiński, Przemysław Puzio, Piotr Rambau, Dominik Sznajder, Paweł Łęciński, Jacek Jarocki print

Rys. 1. Zestaw ćwiczeń realizowanych w ramach zajęć ze studentami: od lewej w górnym rzędzie: zatrzymanie robota po przekroczeniu wskazanej liczby linii, ruch po wijącej się linii, dojazd do wyznaczonego punktu z omijaniem przeszkód, dojazd do źródła światła, dojazd do źródła światła z omijaniem plam (2 czujniki światła), ruch po krzywej parametrycznej (np. spirala)

Rys. 1. Zestaw ćwiczeń realizowanych w ramach zajęć ze studentami: od lewej w górnym rzędzie: zatrzymanie robota po przekroczeniu wskazanej liczby linii, ruch po wijącej się linii, dojazd do wyznaczonego punktu z omijaniem przeszkód, dojazd do źródła światła, dojazd do źródła światła z omijaniem plam (2 czujniki światła), ruch po krzywej parametrycznej (np. spirala)

Roboty LEGO od momentu pojawienia się na rynku wzbudziły zainteresowanie środowisk akademickich na całym świecie. W ofercie dydaktycznej Politechniki Opolskiej zajęcia z programowania robotów LEGO Mindstorms wprowadzono w 2003 r. (dla studentów kierunku Informatyka).

 

Doświadczenia studentów Koła Naukowego Spektrum

W ramach zajęć skupiono się na programowaniu gotowej konstrukcji robota w wersji Roverbot [1], uznając, że brak jest czasu na konstruowanie indywidualnych konfiguracji. Podobnie jak miało to miejsce na innych uczelniach, zaliczenie laboratorium było związane z przeprowadzeniem zawodów, podczas których sprawdzana była dokładność i szybkość realizacji sześciu zadań (rys. 1). Początkowo studenci przygotowywali programy w środowisku programistycznym dostarczanym wraz z zestawem klocków.

Trudności w ocenie oryginalności prac studentów były powodem, że w następnych latach zadania były realizowane w środowisku NQC [2]. Składnia języka NQC (Not Quite C) nie sprawiała studentom żadnych trudności, a dzięki środowisku programistycznemu Bricx Command Center [3] można było w bardzo łatwy sposób przygotowywać programy źródłowe, wgrywać je do robota i uruchamiać.

Wybór tego języka umożliwi wdrożenie bazodanowego systemu weryfikującego oryginalność programów – programy przygotowywane przez studentów poddawane były analizie statystyczno-leksykalnej, co ułatwiało wykrycie podobieństw kodów. Na rys. 2. pokazano przykład dwóch bardzo podobnych programów realizujących to samo zadanie. Dzięki tej analizie możliwe było, w rozmowie ze studentami, wyjaśnienie przyczyn zbytniego podobieństwa dostarczanych do oceny programów. W 2006 r., kiedy pojawiła się nowe wersja robotów LEGO – roboty NXT, pojawiła się nowa wersja języka NQC – Not eXactly C (NXC) [4, 5, 6].

Zaawansowane metody programowania robotów LEGO – przykłady praktyczne

Zainteresowanie studentów programowaniem robotów LEGO było bodźcem do zaproponowania tematyki prac dyplomowych. Praca [7] potwierdziła szerokie możliwości, jakie daje język programowania Java w przygotowaniu programów dla robotów LEGO. Wykorzystano tu środowisko leJOS [8, 9, 10] – niewielki system operacyjny przeznaczony dla robotów LEGO. Oprogramowanie leJOS składa się z trzech modułów: maszyny wirtualnej wykonującej kod języka Java w mikrokontrolerze robota LEGO, API pozwalającego na programowanie robota przy użyciu maszyny wirtualnej, oraz dodatkowych narzędzi programowych.

W pracy przedstawiono w języku Java realizację zadań dla robota (rys. 1). Przedstawiono też opis aplikacji wykorzystującej kamerę LEGO. W zadaniu tym brały udział dwa roboty LEGO (rys. 3a). Robot z kamerą (kot) był sterowany autonomicznie przez program i jego zadaniem było zlokalizowanie drugiego robota (mysz), sterowanego za pomocą klawiszy kursorów w komputerze. Analizując obraz z kamery (rys. 3b), robot-kot ustalał położenie robota-myszy i kierował się w jego stronę. Zabawa kończyła się w momencie zetknięcia się obu robotów. Do realizacji tego zadania wykorzystano bibliotekę Java Media Framework [11], pozwalającą na odtwarzanie i przetwarzanie multimediów. Lokalizacja położenia robota-myszy była określana po analizie obrazu z kamery i określeniu jego fragmentu najbardziej zbliżonego do koloru żółtego (roboty LEGO RCX mają jednostki centralne umieszczone w żółtej obudowie).

Dla ułatwienia procesu analizy, na planszy, po której poruszały się roboty, przygotowano specjalne bandy w kolorze czarnym, by żółty kolor obudowy robota-myszy był wyraźnie widoczny. Aplikacja ta spotkała się z dużym zainteresowaniem podczas II Festiwalu Nauki w Opolu we wrześniu 2004 r. (rys. 4).

Kolejną aplikacją przygotowaną dla robotów LEGO w języku Java był program oko-kota. Aplikacja ta, pozwala na penetrowanie terenu za pomocą robota LEGO wyposażonego w kamerę. Na ekranie monitora wyświetlany jest obraz z kamery (rys. 5F), a sterowanie robotem odbywa się za pomocą klawiszy. W projekcie wykorzystano kamerę LEGO, która przekazuje obraz do komputera za pomocą kabla USB. Stanowiło to oczywistą niewygodę i powodowało ograniczenia co do zasięgu ruchu robota. Ograniczenie to pokonano w aplikacji [7], stosując robot LEGO Cybermaster sterowany za pomocą fal radiowych oraz umieszczoną na nim kamerę bezprzewodową pracującą w paśmie 1,2 GHz. Dzięki temu ominięto ograniczenia poprzednich aplikacji wynikające z faktu wykorzystywania w nich kamery przewodowej i robotów sterowanych za pomocą sygnałów w podczerwieni (IR). Na rys. 5. przedstawiono elementy toru przesyłania sygnału wizyjnego i komend sterujących ruchem robota. Zrealizowany projekt jest odpowiednikiem profesjonalnych robotów penetrujących i może służyć jako punkt wyjścia do przygotowywania bardziej specjalizowanych aplikacji.

W 2006 r. pojawiła się nowa wersja robotów LEGO oznaczona symbolem NXT. Zasady programowania nie uległy zasadniczej zmianie – z informacji praktycznych uwagę należy zwrócić na fakt, że programy do robota przesyła się teraz kablem USB (zamiast podczerwienią), w zestawie znajduje się dodatkowy czujnik ultradźwiękowy stosowany przy pomiarach odległości oraz wykrywający obecność modułu Bluetooth. Czujniki ultradźwiękowe mogą być stosowane w realizacji zadania polegającego na przejechaniu labiryntu [12]. Eksperymentalnie zostały wyznaczone najodpowiedniejsze poziomy odniesienia przy pomiarze odległości metodą ultradźwiękową, tak by robot mógł przejechać labirynt. Aplikacje zostały napisane w języku NXT, następcy języka NQC.

Implementacja modułu transmisji Bluetooth w konstrukcji robota LEGO dało sposobność do przygotowania nowych zadań. Stosując cztery roboty LEGO NXT zrealizowano współpracę grupy robotów wymieniających między sobą informacje za pomocą komunikacji bezprzewodowej Bluetooth [13]. W części praktycznej rozwiązano zadanie, w którym roboty szukały sposobu przebycia trasy z licznymi ślepymi zaułkami. Jeżeli robot utknął w takim rozgałęzieniu, informował o tym pozostałe roboty, a te wybierały inny wariant trasy. Obecnie komunikacja Bluetooth jest bardzo popularnym sposobem wymiany informacji, dostępnym w szerokiej gamie urządzeń codziennego użytku. W pracy [14] przygotowano aplikację, za pomocą której można sterować ruchami robota z telefonu komórkowego. Autor przetestował jej działanie na telefonach Nokia 6300 i Nokia E50. Ekrany telefonu komórkowego w różnych fazach działania aplikacji przedstawia rys. 7.

 

Podsumowanie

W ramach zajęć laboratoryjnych i w wyniku realizacji szeregu prac dyplomowych sprawdzono możliwości programowania robotów LEGO do realizacji różnorodnych zadań. Oprócz wspomnianych języków Java i NQC/NXC badano efektywność programowania tych robotów z poziomu środowiska MATLAB i ROBOLAB – wersji oprogramowania dla robotów LEGO przygotowanej na bazie środowiska LabVIEW.

Do niedawna roboty LEGO były bardzo atrakcyjną propozycją dla placówek dydaktycznych różnego stopnia – od przedszkoli do uniwersytetów. Twórcy tych robotów w firmie Lego wykorzystali w znakomity sposób potencjał swojej technologii i osiągnięcia elektroniki i informatyki. Niestety w Polsce, ze względu na zbyt wysoką cenę zestawu, roboty te nie stały się zbyt popularne w szerokich kręgach zainteresowanych. Alternatywą dla klocków LEGO stają się obecnie inne zestawy do budowy robotów, dostępne w różnych konfiguracjach i w o wiele ciekawszej ofercie cenowej. Również coraz więcej osób podejmuje próbę samodzielnej budowy robotów wykorzystując coraz bogatszą ofertę podzespołów mechanicznych i części elektronicznych. Tak skonstruowane roboty wykazują zbliżoną funkcjonalność do robotów LEGO.

Z dużym zainteresowaniem oczekiwane są kolejne wersje robotów z firmy Lego. Z drugiej strony możliwości sterowania robotami LEGO z poziomu języka Java z wykorzystaniem dodatkowych bibliotek do obsługi komunikacji TCP/IP i danych strumieniowych sprawia, że aplikacje przygotowane kilka lat temu dla robotów LEGO RCX dalej wydają się bardzo atrakcyjne.

Bibliografia

  1. Lego MindStorms Constructopedia, Robotics Invention System 2.0
  2. Not Quite C
  3. Bricx Command Center
  4. Not eXactly C (NXC) Programmer’s Guide
  5. Hansen J. C.: LEGO Mindstorms NXT Power Programming, Variant Press, 2007
  6. Bagnall B.: Maximum Lego NXT: Building Robots with Java Brains, Variant Press, 2007
  7. Puzio P., Rambau P.: Metody sterowania robotami mobilnymi LEGO Mindstorms z poziomu języka Java. Praca dypl. Politechnika Opolska, 2005
  8. LeJOS - Java for LEGO Mindstorms
  9. Bagnall B.: Core LEGO Mindstorms Programming, Prentice Hall PTR, 2002
  10. Programming LEGO Mindstorms with Java, Syngress Publishing, 2002
  11. Biblioteki Java Media Framework API
  12. Sznajder D.: Metody programowania zadań dla robotów serii LEGO NXT. Praca dypl. Politechnika Opolska, 2008
  13. Łęciński P.: Sterowanie grupą robotów LEGO. Praca dypl. Politechnika Opolska, 2009
  14. Jarocki J.: Sterowanie robotem LEGO z poziomu telefonu komórkowego. Praca dypl. Politechnika Opolska, 2010

dr inż. Marcin Kamiński, Przemysław Puzio, Piotr Rambau, Dominik Sznajder, Paweł Łęciński, Jacek Jarocki
– SKN Spektrum, Politechnika Opolska