Przegląd środowisk programistycznych dla LEGO Mindstorms EV3

Transkrypt

Przegląd środowisk programistycznych dla LEGO Mindstorms EV3
Rok akademicki 2015/2016
POLITECHNIKA WARSZAWSKA
WYDZIAŁ ELEKTRONIKI I TECHNIK INFORMACYJNYCH
INSTYTUT AUTOMATYKI I INFORMATYKI STOSOWANEJ
PRACA DYPLOMOWA INŻYNIERSKA
Maciej Safarzyński
Przegląd środowisk programistycznych dla LEGO
Mindstorms EV3, z weryfikacją robotem
układającym Kostkę Rubika
Opiekun pracy:
dr inż. Tomasz Winiarski
Ocena pracy: . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.........................................
Data i podpis Przewodniczącego
Komisji Egzaminu Dyplomowego
2
Streszczenie
Celem pracy był przegląd różnych środowisk programistycznych dla LEGO Mindstorms EV3. Przegląd miał charakter praktyczny, bowiem opierał się na stworzeniu
programu robota zbudowanego z LEGO Mindstorms. Robot miał za zadanie układać
kostkę Rubika. Zadanie to zostało zrealizowane, poprzez napisanie trzech programów
w środowiskach, ROBOTC, ev3dev oraz Matlab. Wszystkie trzy programy pomimo
realizacji w różnych językach programistycznych łączy ta sama funkcjonalność.
Słowa kluczowe: Mindstorms EV3, ROBOTC, Matlab, ev3dev, Kostka Rubika.
Abstract
Title: Overview of programming environments for LEGO Mindstorms EV3, verified
by Rubik’s Cube solving robot.
The aim of this thesis was an overview of different programming environments
for LEGO Mindstorms EV3. The overview had a practical nature, because it was
based on the creation of a program for the robot built with LEGO Mindstorms. Robot
built with LEGO had the task of solving Rubik’s cube. This task was accomplished
by writing three programs in environments, ROBOTC, ev3dev and Matlab. All three
programs despite the implementation in different programming languages share the
same functionality.
Keywords: Mindstorms EV3, ROBOTC, Matlab, ev3dev, Rubik’s cube.
4
Spis treści
1 Wstęp
7
1.1
Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.2
Motywacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.3
Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4
Struktura pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Wykorzystane technologie
2.1
13
Wykorzystany sprzęt . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1
LEGO Mindstorms EV3 Education Core Set . . . . . . . . . . 13
2.1.2
Kostka Rubika . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2
Wykorzystane algorytmy . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3
Wykorzystane oprogramowanie
. . . . . . . . . . . . . . . . . . . . . 17
2.3.1
ROBOTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.2
Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.3
ev3dev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Projekt systemu
23
3.1
Przebieg zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2
Założenia projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Realizacja
4.1
31
Implementacja w środowisku ROBOTC . . . . . . . . . . . . . . . . . 31
4.1.1
Główna pętla programu - plik “main“ . . . . . . . . . . . . . . 31
4.1.2
Moduł zmiennych globalnych - plik “globals“ . . . . . . . . . . 32
4.1.3
Moduł manipulacji - plik “manipulate“ . . . . . . . . . . . . . 32
4.1.4
Moduł kalibracji - plik “calibrate“ . . . . . . . . . . . . . . . . 33
4.1.5
Moduł wyświetlania - plik “display“ . . . . . . . . . . . . . . . 33
4.1.6
Moduł skanowania - plik “scan_cube“ . . . . . . . . . . . . . . 33
4.1.7
Moduł rozwiązywania - plik “solve“ . . . . . . . . . . . . . . . 33
4.1.8
Moduł skanuj i rozwiąż - plik “scan_and_solve“ . . . . . . . . 34
5
6
SPIS TREŚCI
4.2
Próba implementacji w środowisku Matlab . . . . . . . . . . . . . . . 34
4.3
Implementacja w systemie ev3dev . . . . . . . . . . . . . . . . . . . . 35
4.3.1
Moduł zmiennych globalnych - plik “globals“ . . . . . . . . . . 35
4.3.2
Moduł manipulacji - klasa “manipulate“
4.3.3
Moduł kalibracji - klasa “calibrate“ . . . . . . . . . . . . . . . 36
4.3.4
Moduł wyświetlania - klasa “display“ . . . . . . . . . . . . . . 36
4.3.5
Moduł skanowania - klasa “scan_cube“ . . . . . . . . . . . . . 37
4.3.6
Moduł rozwiązywania - klasa “solver“ . . . . . . . . . . . . . . 37
4.3.7
Moduł skanuj i rozwiąż - klasa “scan_and_solve“ . . . . . . . 37
5 Podsumowanie
. . . . . . . . . . . . 36
39
5.1
Wyniki analizy porównawczej . . . . . . . . . . . . . . . . . . . . . . 39
5.2
Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2.1
Charakterystyka projektów dla środowiska ROBOTC . . . . . 41
5.2.2
Charakterystyka projektów dla środowiska ev3dev . . . . . . . 41
5.2.3
Charakterystyka projektów dla środowiska Matlab . . . . . . . 42
5.2.4
Wniosek ogólny . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Bibliografia
45
Rozdział 1
Wstęp
Rozdział ten zawiera wprowadzenie do tematyki pracy (sekcja 1.1), motywację
autora do napisania pracy (sekcja 1.2), cel pracy (sekcja 1.3) oraz opisuje jej strukturę (sekcja 1.4).
1.1
Wprowadzenie
Praca ta jest ściśle związana z zagadnieniem robotyki. W celu właściwego odbioru
pracy warto na wstępie wyjaśnić znaczenie terminu “robotyka“, a najłatwiej to zrobić
zaczynając od definicji słowa “robot“. Według definicji wprowadzonej w 1979 roku
przez Robotics Industries Association, “robot“ to: “Programowalny, wielofunkcyjny
manipulator zaprojektowany do przenoszenia materiałów, części, narzędzi lub specjalizowanych urządzeń poprzez różne programowalne ruchy, w celu realizacji różnorodnych zadań“. [3] Natomiast szersze pojęcie “robotyki“ dr inż. Wojciech Szynkiewicz
tłumaczy: “Robotyka zajmuje się projektowaniem, budową, badaniem i wykorzystaniem robotów“. [11]
Robotyka jest jedną z najszybciej rozwijających się technologii dzisiejszych czasów. Zakres jej zastosowań jest coraz większy, a ilość dziedzin, w których wyspecjalizowane roboty zastępują człowieka stale się rozszerza. Niemniej jednak robotyka jest
niezwykle złożoną dziedziną nauki. Przede wszystkim ze względu na to, że zawarty
jest w niej szereg bazowych, acz skomplikowanych dyscyplin takich jak: mechanika,
elektronika, matematyka, automatyka, informatyka, czy nawet biologia. Biorąc pod
uwagę tak wielopłaszczyznowy zakres tematów, ilość ekspertów w tej dziedzinie jest
bardzo ograniczona. Jednocześnie w obecnych czasach znacząco rośnie zapotrzebowanie na specjalistów właśnie z zakresu robotyki.
Aby poradzić sobie z tym problemem, a zarazem wzbudzić zainteresowanie tematem w jak najszerszym gronie, na rynku pojawia się coraz więcej uproszczonych
7
8
ROZDZIAŁ 1. WSTĘP
platform robotycznych. Uproszczenie oznacza przede wszystkim, że producenci tworzą gotowe lub nieskomplikowane w złożeniu roboty, dostępne dla szerokiej rzeszy
odbiorców w tym amatorów.
Roboty dają swoim twórcom ogromne perspektywy rozwoju. Ich uniwersalność
polega głownie na dostarczeniu użytkownikom narzędzi, które ułatwiają proces
programowania robotów, równocześnie nie ograniczając mnogości ich przeznaczeń.
Dzięki temu tak złożony temat jakim jest robotyka staje się po części dostępny nawet dla laików, rozbudza zainteresowanie, chęć zgłębiania zagadnienia, a co za tym
idzie zwiększa szanse i możliwości dla profesjonalnego rozwoju tej dyscypliny.
Rysunek 1.1: Zestaw LEGO Mindstorms EV3 Education Core Set.
Jedną z takich przystępnych platform jest LEGO Mindstorms. Rozwijana od
1998 roku seria zestawów, łączący klocki LEGO z czujnikami elektronicznymi, serwomechanizmami i komputerową jednostką centralną. Technologia pozwala między
innymi na konstruowanie robotów i układów automatyki oraz na ich odpowiednie
oprogramowywanie. Najnowszym produktem z serii jest LEGO Mindstorms EV3
wprowadzonym na rynek w 2013 roku. Użycie klocków LEGO jako głównego budulca robotów, oraz dostarczenie użytkownikowi intuicyjnych narzędzi do tworzenia
oprogramowania, spowodowało, że technologia ta znajduje odbiorców nawet wśród
dzieci. To wspaniały sposób na wprowadzanie młodych ludzi w świat robotyki. Jednocześnie platforma Mindstorms ma na tyle nieograniczone zastosowania, że pozwala na budowę całego spektrum dużo bardziej skomplikowanych i wielofunkcyjnych robotów dla bardziej zaawansowanych użytkowników. Właśnie dla nich rozwijany jest szereg profesjonalnych środowisk programistycznych, przez niezależne od
grupy LEGO, firmy, koła projektowe, czy osoby prywatne. Organizacje te nie mają
1.2. MOTYWACJA
9
żadnego komercyjnego związku z firmą produkującą Mindstorms, jednak ich praca
jest przez grupę LEGO wspierana i leży w interesie twórców platformy Mindstorms.
Jeden z produktów linii Mindstorms przedstawiony jest na rysunku 1.1.
1.2
Motywacja
W dzisiejszych czasach zastosowanie robotów wiąże się coraz ściślej z niemal
każdą dziedziną nauki i życia. Roboty obecne są w życiu codziennym, podczas prostych czynności i zabaw, ale również w najbardziej skomplikowanych działaniach
takich jak operacje chirurgiczne [1], badanie dna oceanów [2], czy eksploracja kosmosu [9]. Proces tworzenia i konstrukcji robotów, uzależniony od funkcji jaką mają
spełniać, poza projektem technicznym, opiera się na środowisku programistycznym,
w którym dany robot jest programowany. To właśnie środowisko decyduje o skali
możliwości i przeznaczeniu danego robota. Uściślając “środowisko programistyczne
to aplikacja lub zespół aplikacji służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania“ [12], jest to zatem miejsce, w którym tworzony
jest swoisty “umysł“ przypisany do konkretnego urządzenia, “umysł“ który wydaje
rozkazy, wyznacza zadania i steruje precyzją ich wykonania.
Środowisko programistyczne i związany z nim ściśle język programowania wpływa
zatem bezpośrednio na łatwość samego procesu programowania. Środowisko wraz
z językiem dostarczają programiście narzędzi, od których zależy czy proces oprogramowania robota będzie przebiegał sprawnie, wygodnie i szybko, oraz czy ogólne
założenia programowe da się w technologiach dostarczanych przez środowisko zrealizować.
Co ważne środowiska różnią się od siebie dostarczając programistom bardziej lub
mniej zaawansowanych bibliotek języków programowania. W związku z tym zrealizowanie pewnej funkcji robota może wymagać mniej lub więcej czasu oraz linii kodu
źródłowego. W skrajnych przypadkach może stać się wręcz niemożliwe wykonanie
pewnych programów, które w innych środowiskach byłyby wykonalne. Oprócz tego
środowisko może dostarczać szeregu narzędzi służących do kompilacji programu, debugowania, testowania, przesyłania programu na urządzenie, komunikacji z robotem,
wykonywania poleceń zdalnych, czy eksplorowania plików robota. Narzędzia te mogą
być bardziej lub mniej wygodne w zależności od jakości środowiska. Zbiór narzędzi
dostępnych w danym środowisku oraz ich jakość ma decydujący wpływ na to do jakich projektów dane środowisko się nadaje oraz decyduje o wygodzie pracy. Dlatego
tak istotny jest dobór odpowiedniego środowiska programistycznego do konkretnego
projektu.
10
ROZDZIAŁ 1. WSTĘP
1.3
Cel pracy
Celem pracy jest przegląd trzech różnych środowisk programistycznych przeznaczonych dla technologii LEGO Mindstorms EV3. Robot LEGO Mindstorms został
samodzielnie złożony, a następnie został dla niego napisany program po kolei w każdym z trzech środowisk.
Rysunek 1.2: Rubik solver - robot układający Kostkę rubika.
Przedmiotem testowania środowisk programistycznych jest robot “Rubik Solver“,
który samodzielnie układa Kostkę Rubika. Robot otrzymuje Kostkę w stanie pomieszanym, następnie skanuje kolejne kolory pól Kostki, oblicza optymalną najmniejszą
ilość ruchów rozwiązujących Kostkę i na koniec manipuluje Kostką tak aby każda
ze ścian Kostki składała się z elementów w tym samym kolorze. Konstrukcja robota
oparta jest na istniejącym projekcie “Mindcub3r“ [8]. Na podstwie tego schematu
został skonstruowany robot nazwany dla potrzeb pracy “Rubik Solver“, widoczny na
rysunku 1.2.
Zadanie realizowane było, poprzez napisanie trzech programów w środowiskach,
ROBOTC, ev3dev oraz Matlab. Wszystkie trzy programy pomimo realizacji w różnych językach programistycznych łączy ta sama funkcjonalność. Robot układający
Kostkę Rubika wymaga skomplikowanego oprogramowania, wykorzystującego większość funkcji biblioteki języka dostępnych w środowiskach, oraz narzędzi środowiskowych. Ze względu na złożoność programu, każdorazowa implementacja w danym
środowisku skutkowała dogłębnym poznaniem systemu i wykorzystaniem jego wielu
możliwości.
W poniższej pracy sformułowane zostały wnioski podsumowujące właściwości
każdego ze środowisk, jego cechy pozytywne, jak również aspekty utrudniające pracę.
1.4. STRUKTURA PRACY
11
Na podstawie analizowanych danych zostały również zdefiniowane typy projektów,
które najbardziej pasują do danego środowiska.
1.4
Struktura pracy
Niniejsza praca składa się z pięciu rozdziałów licząc razem z niniejszym wstępem 1. W rozdziale 2 zostały zaprezentowane narzędzia jakich użyto do zbudowania
i oprogramowania robota. Rozdział 3 przedstawia przebieg zadania inżynierskiego
oraz formułuje założenia projektowe. Rozdział 4 poświęcony jest realizacji implementacji programów w środowiskach programistycznych. Ostatni rozdział 5 to podsumowanie wyników pracy w formie analizy porównawczej oraz sformułowane wnioski.
12
ROZDZIAŁ 1. WSTĘP
Rozdział 2
Wykorzystane technologie
W pracy wykorzystywany był sprzęt (sekcja 2.1), algorytmy (sekcja 2.2) oraz
programy (sekcja 2.3).
2.1
Wykorzystany sprzęt
Sprzętem potrzebnym do wykonania pracy był zestaw LEGO Mindstorms EV3
Education Core Set (podsekcja 2.1.1) oraz Kostka Rubika (podsekcja 2.1.2).
2.1.1
LEGO Mindstorms EV3 Education Core Set
Podstawowym sprzętem wykorzystywanym w pracy jest zestaw umożliwiający
budowanie robotów LEGO Mindstorms EV3 Education Core Set. Jest to wersja
edukacyjna produktu EV3 skierowana głownie do studentów i uczniów, ale także
bardziej profesjonalnych użytkowników. W skład zestawu wchodzą elementy mechaniczne - klocki LEGO Technic, oraz aktywne - serwomotory, sensory i kostka EV3.
Elementy mechaniczne wykorzystuje się do budowy nieruchomych części robota
i nie mają większego znaczenia w poniższej pracy. Warto jednak poświęcić nieco
uwagi elementom aktywnym, ponieważ to one stanowią o możliwościach i potencjale
robota. Elementy aktywne przedstawione są na rysunku 2.1.
13
14
ROZDZIAŁ 2. WYKORZYSTANE TECHNOLOGIE
Rysunek 2.1: Serwomechanizmy, czujniki oraz kostka EV3 - elementy aktywne zestawu Mindstorms EV3 Education Core Set
Elementy aktywne:
• Programowalna kostka EV3 - komputer z systemem Linux oparty na procesorze ARM taktowanym częstotliwością 300MHz. Na pamięć komputera składa
się 16- sto megabajtowa pamięć stała Flash rozszerzalna dzięki portowi kart
microSDHC, oraz 64 MB pamięci operacyjnej RAM. W kostce znajdują się
cztery porty wejściowe do łączenia z czujnikami, oraz 4 wyjściowe przeznaczone dla reaktorów, wszystkie oparte na standardzie RJ-12. Do komunikacji
z komputerem zewnętrznym służą porty USB i Mini-USB, a w standardzie
bezprzewodowym technologia Bluetooth oraz opcjonalnie Wi-Fi poprzez dodatkowy adapter, do kupienia oddzielnie. Wszystko to wieńczy panel interakcji
z użytkownikiem, na którym znajduje się 6 programowalnych przycisków, kolorowe diody LED, głośnik oraz monochromatyczny wyświetlacze LCD o rozdzielczości 178x128 pikseli.
• Dwa duże serwomechanizmy - napędy dużej mocy, o momencie siły za przekładnią wynoszącym 0.2 Niutonometra. Maksymalna prędkość kątowa wynosi
160-170 obrotów na minutę. Mechanizmy wyposażone są w enkodery przyrostowe, czyli czujniki obrotu o rozdzielczości 360 impulsów na obrót. Osie
obrotu dużych serw ułożone są prostopadle względem korpusu podzespołu.
• Średni serwomechanizm - napęd o mniejszym gabarycie i mniejszym momencie siły za przekładnią, 0.08 Niutonometra. Kosztem zmniejszenia momentu
możliwe było zwiększenie prędkości maksymalnej, która w przypadku napędu
2.1. WYKORZYSTANY SPRZĘT
15
średniego wynosi 240-250 obrotów na minutę. Serwo to również zostało wyposażone w czujnik obrotu o rozdzielczości 360 impulsów/obrót. Oś obrotu
napędu znajduje się wzdłuż najdłuższego wymiaru mechanizmu.
• Ultradźwiękowy czujnik odległości - sonar, który informuje o dystansie robota do najbliższej przeszkody, działa na zasadzie emitowania i wyłapywania
odbitych od przeszkód fal ultradźwiękowych. Dzięki użyciu tej zaawansowanej technologii stosowanej m.in. w radarach lotniczych, czujnik charakteryzuje
się wysoką rozdzielczością ok. 1 cm. Sonar poprawnie działa gdy przeszkoda
znajduje się w odległości od 3 do 250 cm. Dodatkowo oprócz funkcji pomiaru
odległości, sensor można przełączyć w stan bierny, w którym pełni on funkcję
czujnika wyłapującego fale ze źródeł zewnętrznych.
• Czujnik koloru - jest to ściślej ujmując czujnik natężenia światła. Wyposażony
jest w ledowy emiter światła o kolorach bazowych: czerwieni, zieleni i koloru
niebieskiego oraz wiązki światła białego. Emitowane z sensora fale świetlne po
odbiciu od przedmiotu trafiają do soczewki, zbierającej je ponownie. Następnie
czujnik bada natężenie odbitej fali. W zależności od tego jakie światło emituje
sam czujnik, może on działać w trzech trybach: tryb rozpoznawania kolorów,
tryb natężenia światła odbitego, tryb natężenia światła otoczenia. Czujnik
koloru działa z częstotliwością próbkowania wynoszącą 1kHz. Aby zapewnić
poprawny odczyt koloru, obiekt powinien znajdować się w odległości 15-55mm
od czujnika.
• Dwa czujniki dotykowe - analogowe czujniki dotykowe wykrywają przyciśnięcie
bądź zwolnienie przycisku umiejscowionego z przodu czujnika. Przycisk skonstruowany jest specjalnie w taki sposób aby możliwe było dołączanie do niego
standardowych klocków Lego Technic. Głębokość na jaką przycisk może być
maksymalnie wciśnięty wynosi 4mm. Czujnik ten można wykorzystać na dwa
sposoby: wykrywanie przeszkód przez robota, oraz jako dodatkowy przycisku
dla użytkownika.
• Czujnik żyroskopowy - cyfrowy czujnik żyroskopowy mierzy ruchy obrotowe
robota, oraz zmiany w jego orientacji. Z jego pomocą można zwiększyć dokładność manewrów robota, odczytywać kąt nachylenia robota względem podłoża, co pozwala na budową robotów balansujących. Żyroskop może pracować
w dwóch trybach: tryb kątowy z dokładnością ok. 3 stopni mierzy kąt obrotu czujnika; tryb żyroskopowy mierzy prędkość kątową, gdzie maksymalna
16
ROZDZIAŁ 2. WYKORZYSTANE TECHNOLOGIE
mierzalna prędkość wynosi 440 stopni na sekundę. Częstotliwość próbkowania
żyroskopu to 1kHz.
2.1.2
Kostka Rubika
W 1974 roku węgierski rzeźbiarz i architekt Ernő Rubik skonstruował łamigłówkę
logiczną, która szybko stała się jedną z najbardziej rozpoznawalnych zabawek na
świecie. Na cześć twórcy została nazwana “Kostką Rubika“. Rozwiązywanie kostki
polega na takim układaniu kolorowych kwadratów, aby każda ze ścian miała wszystkie kwadraty w jednym kolorze.
Rysunek 2.2: Kostka Rubika
Budowa kostki: Kostka zbudowana jest z 26 sześcianów oraz przegubu, który
umożliwia zewnętrznym warstwom kostki obrót wokół osi środka kostki, będącej
prostopadłą do płaszczyzny danej warstwy. Powierzchnie sześcianów widoczne z zewnątrz pomalowane są na sześć kolorów: czerwony, zielony, niebieski, żółty, pomarańczowy i biały. Na poniższym rysunku przedstawiona jest Kostka Rubika firmy
Rubik’s 2.2.
Rysunek 2.3: Ściana i ścianka kostki Rubika
Aby ułatwić opis kostki, warto wprowadzić specyficzną dla niej terminologię,
a więc pojęcia ścian i ścianek widocznych na rysunku2.3.
• Ściana kostki - odnosi się do ściany całej kostki Rubika, która po rozwiązaniu
jest jednokolorowa.
• Ścianka kostki - ściana jednego z 26 małych sześcianów widocznych na zewnątrz, posiadająca jeden z sześciu kolorów.
2.2. WYKORZYSTANE ALGORYTMY
2.2
17
Wykorzystane algorytmy
W pracy użyty został algorytm układania Kostki Rubika. Istnieje bardzo dużo
technik układania Kostki. Zagadnienie znajdywania optymalnych algorytmów, jest
trudne ze względu na olbrzymią liczbę kombinacji różnych ułożeń kostki, która wynosi ponad 43 tryliardy (43 252 003 274 489 856 000). W 2010 roku grupa matematyków dzięki mocy obliczeniowej serwerów komputerowych udowodniła, że dowolnie
pomieszaną kostkę da się ułożyć wykonując maksymalnie 20 “ruchów“.
Projektowanie nowego algorytmu układania Kostki Rubika, to niezwykle
skomplikowany i wymagający proces. Ponieważ, nie jest on związany z tematem
pracy, wykorzystany został już istniejący algorytm. Jest on częścią projektu
Mindcub3r, rozwijanego przez Davida Gilday’a, pasjonatę tworzenia robotów
z LEGO, rozpoznawalną postać w internetowym świecie LEGO. [8] O samym
algorytmie niewiele wiadomo, jako że jest on dostępny tylko w formie kodu
binarnego i uruchamiany jest z poziomu odrębnego programu. Nie jest znany kod
źródłowy tego programu, nazywanego w dalszej części pracy “solverem“. Wiadomo
jednak, że zaimplementowany został tu algorytm, który potrafi układać Kostkę
Rubika w średnio 24 ruchach. Komunikacja programu robota z solverem odbywa
się za pomocą zapisu i odczytu współdzielonych plików.
2.3
Wykorzystane oprogramowanie
Do oprogramowania wykorzystanego w pracy inżynierskiej należą programy, ROBOTC (podsekcja 2.3.1), ev3dev (podsekcja 2.3.3) i Matlab (podsekcja 2.3.2).
2.3.1
ROBOTC
ROBOTC to wieloplatformowe środowisko programistyczne dla popularnych systemów robotycznych, takich jak: VEX IQ, VEX EDR, VEX PIC, TETRIX, Arduino
UNO, Arduino MEGA, oraz produkty Lego, RCX, NXT, a także najnowszy EV3.
ROBOTC, to również nazwa języka programowania, którego się w tym systemie
używa. Język ROBOTC opiera swoją składnie na powszechnie znanym języku C
i przez to jest do niego bliźniaczo podobny. Systemem operacyjnym wymaganym
przez ROBOTC jest Windows, ale możliwe jest uruchamianie programu poprzez
maszynę wirtualną. Poniżej na rysunku 2.4 okno programu ROBOTC.
18
ROZDZIAŁ 2. WYKORZYSTANE TECHNOLOGIE
Rysunek 2.4: Okno programu ROBOTC
Program jest kompleksowym środowiskiem, tak zwanym zintegrowanym środowiskiem programistycznym (ang. Integrated Development Environment, IDE ). Oznacza to, że dostarcza on narzędzi do pisania i edytowania kodu, a także umożliwia
kompilację kodu i wysyłanie pliku binarnego na urządzenie, a wszystko to w jednym
programie.
Oprócz powyższych, w programie dostępne są narzędzia takie jak:
• Debugger
• Przeglądarka funkcji bibliotecznych
• Konfigurator komunikacji z robotem
• Eksplorator plików robota
• Konfigurator napędów i czujników
• Narzędzie aktualizacji jądra systemu robota
• Automatyczne formatowanie i uzupełnianie kodu
Dodatkowo ze środowiskiem związany jest wirtualny symulator robota i jego
przestrzeni roboczej: Robot Virtual Worlds. Jest to odrębny, dodatkowo płatny program, który pozwala na symulację zachowania robota w graficznym świecie wirtualnym. Robot Virtual Worlds świetnie nadaje się do nauki robotyki, nawet bez
2.3. WYKORZYSTANE OPROGRAMOWANIE
19
Rysunek 2.5: Okno programu Robot Virtual Worlds
konieczności posiadania fizycznego robota. Znajduje się w nim przystępny samouczek oraz szereg zajmujących wyzwań programistycznych. Okno programu Robot
Virtual Worlds widoczne jest na rysunku 2.5. Na platformie tej organizowane są
liczne konkursy robotyczne, mające odnajdywać młode talenty z zakresu robotyki,
jednym z przykładów takich konkursów jest “Mini Urban Challenge“. [6]
2.3.2
Matlab
Rysunek 2.6: Okno programu Matlab z dodatkiem LEGO Mindstorms EV3 Support
Package
20
ROZDZIAŁ 2. WYKORZYSTANE TECHNOLOGIE
Matlab to rozbudowany program komputerowy stworzonym do wykonywania ob-
liczeń naukowych oraz tworzenia symulacji komputerowych. Płatny program tworzy
firma MathWorks. Dostępny jest na systemach operacyjnych Windows, OS X, oraz
Linux i Unix. Program jest dobrze znany przez uczniów studiów inżynierskich, jest
on szeroko stosowany na uczelniach. Operuje się tu w języku Matlab opartym na
języku C. Okno programu Matlab przedstawia rysunek 2.6.
Dla programu dostępne są liczne biblioteki dodatkowe (ang. toolbox ), które powiększają zdolności programu Matlab o dodatkowe funkcje. Jednym z takich dodatków jest “LEGO Mindstorms EV3 Support Package“. [5] Dodatek ten umożliwia
pisanie programów na roboty w technologii Mindstorms EV3.
Działanie środowiska Matlab różni się od innych środowisk programistycznych
dla robotów. Różnica polega na tym, że Matlab pełni rolę zdalnego kontrolera dla
robota. Program nie jest tu przesyłany na urządzenie, wykonuje się na komputerze,
jedynie w przypadku gdy robot wykonywać ma jakieś instrukcje wysyłane są do
niego rozkazy.
2.3.3
ev3dev
Rysunek 2.7: Okno sesji SSH z robotem uruchomionym w systemie ev3dev
Jednym ze sposobów programowania robotów serii EV3 jest środowisko ev3dev.
W odróżnieniu od poprzednio opisywanych programów ev3dev nie jest zintegrowanym środowiskiem programistycznym. Ev3dev to rozwijany przez Ralph’a Hempela
2.3. WYKORZYSTANE OPROGRAMOWANIE
21
oraz David’a Lechner’a system operacyjny oparty na Debianie, dystrybucji systemu
Linux. Ponieważ kostka EV3 działa na systemie Linux, wystarczy wgrać obraz dysku
innej dystrybucji Linux’a na kartę pamięci umieszczaną w kieszeni robota. Wówczas
robot po włączeniu uruchamia system z karty pamięci zamiast z pamięci trwałej.
Tym sposobem możliwa jest podmiana systemu robota. System ev3dev posiada niskopoziomowe sterowniki umożliwiające używanie czujników, motorów i samej kostki
EV3. Na rysunku 2.7 znajduje się okno klienta SSH połączonego z robotem, który
pracuje z uruchomionym systemem ev3dev.
Podstawowym założeniem systemu jest otwartość i dostępność. Dzięki temu programiści z całego świata pomagają w rozwoju projektu. Efektem globalnej współpracy jest istnienie bibliotek współpracujących z robotem LEGO, napisanych w bardzo szerokiej gamie języków programistycznych. Użytkownik chcący pracować nad
robotem w systemie ev3dev może wybierać wedle upodobań jeden z dostępnych
języków: C++, Node.js, Python, Google Go, C, Clojure, lua, Perl.
Proces rozwijania oprogramowania robotycznego poprzez system ev3dev wygląda
następująco:
1. Pisanie kodu źródłowego programu w dowolnym edytorze tekstowym
2. Kompilacja kodu na komputerze (z użyciem kompilatora dla procesora ARM)
3. Przesłanie skompilowanego pliku binarnego na robota poprzez łącze SSH(ang.
Secure Shell [4])
4. Uruchomienie programu zdalnie poprzez SSH lub bezpośrednio na robocie
Powyżej przedstawione kroki, są tylko ramowym przedstawieniem procesu, możliwe są jego modyfikacje. Dla przykładu kompilację można przeprowadzać na urządzeniu, oszczędza to przesyłania pliku wykonalnego z komputera, jednak ze względu
na ograniczone możliwości procesora robota kompilacja taka zajmuje dużo czasu. Dostępne są też dodatkowe narzędzia umożliwiające np. debugowanie programu w sesji
SSH.
22
ROZDZIAŁ 2. WYKORZYSTANE TECHNOLOGIE
Rozdział 3
Projekt systemu
W rozdziale tym opisano kolejne etapy przebiegu zadania (sekcja 3.1) i scharakteryzowano założenia projektowe (sekcja 3.2).
3.1
Przebieg zadania
W poniższej pracy wyodrębnione zostały poszczególne etapy pracy nad robotem
LEGO. Głównym zadaniem był przegląd kilku środowisk programistycznych oraz
ich przetestowanie i porównanie z perspektywy programowania robota.
Etap 1: Stworzenie fizycznego modelu robota
Pierwszy etap polegał na wybraniu odpowiedniego robota. Odpowiedniość polegała na możliwości rzetelnego i sprawnego testowania środowisk programistycznych.
Założenia te spełnił robot układający Kostkę Rubika.
Zalety testowania środowisk na robocie rozwiązującym Kostkę Rubika:
• Złożoność - jest to skomplikowany projekt, który wykorzystuje dużą liczbę
czujników i napędów. Projekt wymaga implementacji dużej ilości kodu źródłowego, wykorzystującego szeroką gamę funkcji bibliotecznych danego języka
programowania. Dzięki temu środowiska mogą być gruntownie przetestowane,
za pomocą użycia zaledwie jednego urządzenia.
• Powtarzalność - robot będzie zachowywał się powtarzalnie przy otrzymaniu
tych samych danych wejściowych. Oznacza to, że za każdym razem, gdy robot
dostaje identycznie pomieszaną kostkę, układa ją za pomocą tej samej sekwencji ruchów. Jest to cecha, która bardzo ułatwia proces testowania robota,
w przeciwieństwie do robotów niepowtarzalnych, gdzie ciężko jest obiektywnie
porównać zachowania robota przy kolejnych uruchomieniach.
23
24
ROZDZIAŁ 3. PROJEKT SYSTEMU
• Niezależność od środowiska - robot rozwiązujący Kostkę Rubika jest mało
zależny od czynników zewnętrznych. Jedynie oświetlenie może wpływać na
działanie czujnika światła, jednak da się umniejszyć ten wpływ stosując
odpowiednią kalibrację wstępną. Dzięki niewielkiemu wpływowi czynników zewnętrznych robot staje się zależny jedynie od danych wejściowych.
Przekłada się to na powtarzalność robota oraz umożliwia pominięcie stanu
środowiska otaczającego robota, przy każdym jego uruchomieniu. Jest to
czynnik wpływający na łatwość testowania robota oraz środowisk.
Gdy koncepcja robota była określona, kolejnym zadaniem było znalezienie
i wybór odpowiedniego, gotowego projektu robota. Najlepszym projektem okazał
się Mindcub3r [8], stworzony przez David’a Gilday’a. Kryterium wyboru podlegały,
solidność konstrukcji oraz możliwość zbudowania robota przy użyciu elementów
aktywnych jedynie z zestawu EV3 Education Core Set. Konstrukcja robota “Rubik
solver“ różni się od projektu Mincub3r’a, ponieważ drugi wykorzystuje również
klocki LEGO z zestawu “EV3 Education Expansion Set“, które zostały zastąpione
innymi elementami z innych zestawów LEGO. [10] Oprócz tego nie było potrzeby
wykorzystywać czujnika odległości do wykrywania kostki, tak jak w projekcie
Mindcub3r. Na rysunku 3.1 widoczne są oba roboty.
Rysunek 3.1: Projekt robota “Mindcub3r“(po lewej) i robot “Rubik solver“ (po prawej)
Robot “Rubik solver“ potrafi skanować oraz manipulować kostką dzięki ruchomym układom zbudowanym z siłowników, czujnika koloru oraz klockom LEGO Technic.
25
3.1. PRZEBIEG ZADANIA
Ruchome układy zostały nazwane:
Rysunek 3.2: Spinner
• “Spinner“ - obracająca się platforma przytrzymująca kostkę. “Spinner“, widoczny na rysunku 3.2, pełni dwie funkcje, obraca kostkę wokół osi pionowej,
oraz obraca dolną warstwę kostki gdy jest ona przytrzymywana od góry “Flipperem“. Za obracanie platformą odpowiada duży serwonapęd umiejscowiony
pod nią. Serwonapęd porusza platformą poprzez dwa koła zębate: mniejsze
- 12 zębów, większe - 36 zębów, co daje w efekcie przełożenie geometryczne
równe 3.
Rysunek 3.3: Camera
• “Camera“ - ruchomy wysięgnik na którego końcu umieszczony jest czujnik
koloru. “Camera“, widoczna na rysunku 3.3, umożliwia skanowanie kolejnych
ścianek kostki. Skanowanie odbywa się poprzez zgranie w jednym czasie dwóch
ruchów: obrotowego ruchu platformy i przesuwnego ruchu wysięgnika. W ten
sposób rozpoznawane są kolory ścianek krawędziowych jednej ze ścian kostki.
Kolor ścianki środkowej rozpoznawany jest przy nieobracającej się platformie.
Pomiędzy średnim serwonapędem zlokalizowanym pionowo pod wysięgnikiem,
a samym wysięgnikiem znajdują się 3 koła zębate, pierwsze umieszczone z osią
26
ROZDZIAŁ 3. PROJEKT SYSTEMU
obrotu zwróconą pionowo o 12 zębach, drugie z poziomą osią obrotu również
o 12 zębach, ostatnie największe koło z osią poziomą o 36 zębach. Takie ustawienie kół zębatych zmienia oś obrotu z wejściowej pionowej, na poziomą oraz
zwiększa precyzję ruchów.
Rysunek 3.4: Flipper
• “Flipper“ - ruchome ramie robota pełniące dwie funkcje. Pierwszą funkcją jest
obracanie kostki na platformie w osi poziomej, poprzez “naciągnięcie“ kostki
na barierkę platformy. “Flipper”, widoczny na rysunku 3.4, skonstruowany jest
w ten sposób, że wykonując ruch w kierunku przeciwnym do ruchu obracającego kostkę, ramię nie obraca kostki w przeciwnym kierunku, dzięki temu
możliwy jest powrót ramienia do pozycji wyjściowej po wykonaniu manewru
obracającego. Drugą funkcją ramienia jest przytrzymywanie kostki w chwili
gdy platforma wykonuje obrót, w celu obrócenia dolnej warstwy kostki. Wykonywaniem ruchów ramienia zajmuje się duży serwomotor umieszczony przy
osi obrotu ramienia. Motor połączony jest z ramieniem za pomocą przegubu
w kształcie krzywej łamanej. Dzięki takiemu kształtowi przegubu ramie wykonuje ruch posuwisty, przypominający ruch korbowodu lokomotywy parowej.
Korbowód lokomotywy, dla zobrazowania widoczny jest na rysunku 3.5.
Rysunek 3.5: Schemat układu jezdnego lokomotywy parowej, widoczny jest na nim
korbowód, którego ruch przypomina poruszanie się “Flippera“
3.2. ZAŁOŻENIA PROJEKTU
27
Etap 2: Napisanie oprogramowania robota w środowisku ROBOTC
Gdy robot był już solidnie skonstruowany kolejnym etapem było stworzenie
oprogramowania w pierwszym ze środowisk. Jako pierwsze wybrane zostało środowisko ROBOTC, jako że autor pracy miał w nim największe doświadczenie.
Napisanie pierwszego programu jest najbardziej czasochłonnym zadaniem, dlatego
wybranie środowiska, które zna się najlepiej wydaje się właściwym rozwiązaniem,
ponieważ przyspiesza proces, co wpływa pozytywnie na rozwój pracy.
Etap 3: Przepisanie programu w środowisku Matlab
W momencie gdy program działał poprawnie i zadowalająco, przyszła pora na
przepisanie go do kolejnego środowiska, którym był Matlab. Tutaj nastąpiły pewne
komplikacje, na temat których więcej dowiedzieć się można w rozdziale 4.
Etap 4: Przepisanie programu dla systemu ev3dev
Ostatnim testowanym środowiskiem było ev3dev. Tak samo jak w przypadku
poprzednich środowisk na tym etapie pracy nastąpiło napisanie programu w tym
środowisku.
Etap 5: Porównanie wygody implementacji kodu w powyższych środowiskach
Po sfinalizowaniu wszystkich etapów związanych z implementacją nadszedł czas
na wyciągnięcie wniosków, na temat pracy w każdym ze środowisk. Porównanie ich
ze sobą, zestawienie najważniejszych atrybutów tych programów w tabeli porównawczej. Określenie jakie typy projektów najlepiej pasują do każdego ze środowisk.
3.2
Założenia projektu
Ważną fazą, która miała miejsce jeszcze przed rozpoczęciem prac projektowych
było sformułowanie założeń jakie robot, programy i praca muszą spełniać. Dzięki
założeniom droga do celu jest prostsza. Założenia zapobiegają wykonywania
zbędnych czynności, które opóźniają sfinalizowanie projektu.
Założeniami projektu są:
• Solidna konstrukcja robota - robot musi być umieszczony na stabilnej platformie. Konstrukcja nie powinna zmieniać się w trakcie eksploatacji, powinna
28
ROZDZIAŁ 3. PROJEKT SYSTEMU
być w stanie wytrzymać minimum 10 kolejnych uruchomień programu, bez potrzeby wykonywania napraw. Robot powinien być niepodatny na uszkodzenia
przy przenoszeniu i transporcie.
• Robot zbudowany z wykorzystaniem możliwym minimum części - “Im prościej
tym lepiej.“ “Im mniej tym więcej.“ Te motta towarzyszyły projektowaniu robota. W dodatku ograniczona liczba dostępnych części wymuszała minimalizm
konstrukcji.
• Wykorzystanie przynajmniej dwóch środowisk programistycznych - zakładanym minimum było przetestowanie dwóch potencjalnie najlepszych dostępnych
środowisk do programowania robota.
• Programy robota potrafiące rozwiązać Kostkę Rubika w czasie poniżej 2 minut - odgórne ograniczenie czasu potrzebnego robotowi do wykonania zadania,
zmuszało do uzyskania sprawnie działającego robota. Czas liczy się od rozpoczęcia skanowania, do chwili gdy Kostka jest w pełni ułożona. W efekcie średni
czas jest znacznie krótszy niż zakładane ograniczenie, dzięki temu testowanie
robota przechodzi bardzo sprawnie.
• Programy nieobarczone błędami krytycznymi - nie istnieje jeden, idealny
program spełniający daną funkcjonalność, często programiści niezadowoleni
z efektów, poddają program ciągłym udoskonaleniom. Rozwijanie oprogramowania potrafi przez to trwać dużo dłużej niż zadowalające minimum, a w
wielu przypadkach, programy wręcz nigdy nie zostają ukończone. Wymaganie,
że program uznaje się za ukończony w sytuacji gdy działa, a jego działanie,
sprawdzone poprzez testy nie jest przerywane przez błędy programistyczne jasno stwierdza, kiedy można zakończyć proces ulepszania kodu. Dzięki temu
ogólny proces tworzenia pracy inżynierskiej ulega skróceniu, a zaoszczędzony
czas można przeznaczyć na bardziej istotne elementy projektu.
• Programy z różnych środowisk mające możliwe podobne działanie - oprogramowanie robota z różnych środowisk powinno być napisane w możliwie podobny sposób, tak aby zachowanie robota było nie do rozróżnienia.
• Uruchomione programy nie mogą niszczyć konstrukcji robota oraz jego elementów - programy muszą mieć tak dobrane wartości mocy i prędkości elementów
ruchomych, aby nie mogły zniszczyć konstrukcji robota.
3.2. ZAŁOŻENIA PROJEKTU
29
• Zachowanie podziału na moduły programów po między środowiskami - oprogramowanie robota składa się z modułów odpowiadających za konkretne funkcje. Wymaganiem jest aby w różnych środowiskach programy podzielone były
na takie same moduły.
• Robot ma trzy podejścia do właściwego zeskanowania Kostki - w sytuacji gdy
robot napotyka na problem w trakcie skanowania Kostki zliczane są nieudane
próby. Po trzeciej próbie robot przerywa wykonywanie programu. Dzięki temu
unika się sytuacji, w której robot bez końca podejmuje nieudane próby zeskanowania kostki.
• Manipulacja Kostką przez robota musi przechodzić bezbłędnie - współczynniki
ruchu manipulatorów powinny być w taki sposób dobrane, aby nie popełniane
były błędy w poruszaniu Kostką. Dla przykładu niedopuszczalna jest sytuacja,
w której robot miał obrócić Kostkę, a w wyniku przyblokowania Kostka nie
zmieniła swojej orientacji.
• Robot po ułożeniu Kostki musi być gotowy do kolejnego układania - stan
robota po zakończeniu udanego układania Kostki musi być dokładnie taki sam
jak stan robota przed ułożeniem Kostki. Gwarantuje to płynność działania
robota w kolejnych uruchomieniach. Przyspiesza i ułatwia testowanie robota.
30
ROZDZIAŁ 3. PROJEKT SYSTEMU
Rozdział 4
Realizacja
Rozdział ten opisuje implementację programu robota w środowiskach: ROBOTC
(sekcja 4.1), ev3dev (sekcja 4.3) oraz Matlab (sekcja 4.2).
4.1
Implementacja w środowisku ROBOTC
Środowisko ROBOTC umożliwia pisanie programów w języku ROBOTC, który
wykorzystuje składnię języka C. W tym właśnie języku napisany jest program robota. Program podzielony jest na moduły. Moduły odzwierciedlają konkretną funkcję, za którą kod jest odpowiedzialny. Na diagramie UML 4.1 widoczny jest podział
na pliki odpowiadające oddzielnym modułom programu. W kolejnych podsekcjach
opisane są wszystkie moduły programu.
4.1.1
Główna pętla programu - plik “main“
Główna pętla ma bardzo prostą budowę. Wywoływane są w niej kolejno trzy
funkcje. Wraz z uruchomieniem programu wywoływana jest funkcja “calibrate()“
z modułu kalibracji, która ustawia właściwą pozycję serwonapędów robota. Po zakończeniu kalibracji wołana jest funkcja “displayPatternSelection()“ z modułu wyświetlania, która wyświetla stosowny komunikat i oczekuje na wciśnięcie przycisku
rozpoczynającego skanowanie. Gdy przycisk zostaje naciśnięty, wówczas wywoływana jest funkcja “scanAndSolve()“ z modułu skanuj i rozwiąż, która zajmuje się
skanowaniem, rozwiązywaniem oraz układaniem Kostki Rubika.
31
32
ROZDZIAŁ 4. REALIZACJA
Rysunek 4.1: Schemat UML struktury programu napisanego w ROBOTC
4.1.2
Moduł zmiennych globalnych - plik “globals“
W module tym zdefiniowane są zmienne współdzielone przez inne moduły. Zdefiniowane są tutaj tablice ułożeń kostki, flagi programu, współczynniki sterowania
silnikami itp.
4.1.3
Moduł manipulacji - plik “manipulate“
Moduł manipulacji jest najważniejszą częścią programu. Zdefiniowane są tu funkcje, które z dużą dokładnością zmieniają pozycje oraz ułożenie ścianek na Kostce.
Wykorzystywane są tu funkcje dostępne w bogatej bibliotece dostarczonej przez
środowisko ROBOTC. Funkcje biblioteczne dają możliwość między innymi: ruchu
silnika o określony kąt z zadaną mocą, ruchu silnika o określony kąt z zadaną prędkością, z wykorzystaniem algorytmu PID, wstrzymanie wątku programu do momentu
zakończenia ruchu. Dostarczenie tak wysokopoziomowych funkcji operowania motorami pozwala na sprawne pisanie programu i nie wymaga konstruowania własnych
funkcji. Z modułu manipulacji korzystają wszystkie inne moduły oprócz modułu
rozwiązywania.
4.1. IMPLEMENTACJA W ŚRODOWISKU ROBOTC
4.1.4
33
Moduł kalibracji - plik “calibrate“
Moduł kalibracji dostarcza metod potrzebnych do ustawienia ruchomych części
robota w odpowiednich pozycjach wyjściowych. Zawiera też funkcję, która sprawdza
czy uruchomiony jest zewnętrzny program odpowiedzialny za znajdywanie optymalnej sekwencji rozwiązywania Kostki. Moduł ten wywoływany jest głównie przy uruchomieniu programu, oraz po zakończeniu działania w celu powrotu robota do stanu
wyjściowego.
4.1.5
Moduł wyświetlania - plik “display“
Moduł ten odpowiada za wyświetlanie komunikatów na ekranie robota, oraz
obsługę przycisków znajdujących się na panelu przednim kostki EV3. Do wyświetlanych komunikatów zaliczamy: nazwa obecnie wykonywanej operacji (kalibracja, skanowanie, kalkulacja, rozwiązywanie), wyświetlanie błędów, ewentualny wybór wzoru
układanego na Kostce, czy ilość pozostałych ruchów potrzebnych do rozwiązania
Kostki.
4.1.6
Moduł skanowania - plik “scan_cube“
Plik “scan_cube.c“ odpowiada za wszelkie operacje związane ze skanowaniem kolorów kolejnych ścianek Kostki. Znajdują się tu funkcje takie jak: skanuj środkową
ściankę Kostki, skanuj ściankę krawędziową, skanuj ściankę narożną, skanuj całą
ścianę Kostki, oraz łączącą wszystkie poprzednie, funkcję skanującą całą Kostkę.
Moduł ten wykorzystuje możliwości wielowątkowości programu, tworząc oddzielne
wątki, które niezależnie od wykonywania głównego programu powodują ruch układu
Ćamera". Dzięki temu można zsynchronizować ruch obrotowy Kostki z ruchem czujnika koloru, tak aby sprawnie i poprawnie pobrać kolejne kolory ścianek Kostki.
4.1.7
Moduł rozwiązywania - plik “solve“
Moduł rozwiązywania zajmuje się komunikacją z zewnętrznym programem obliczającym optymalne rozwiązanie Kostki. Komunikacja pomiędzy dwoma programami odbywa się za pomocą dwóch plików tekstowych znajdujących się w pamięci
robota. Pierwszy plik nazywa się mc3cmd.rtf i służy do przekazywania kolejnych
komend. W pliku mc3dat.rtf umieszczane są przez program odczytane wartości kolorów ścianek robota. W tym samym pliku jako odpowiedź zapisywane są przez
solver informacje: liczba kroków rozwiązywania, oraz szereg cyfr reprezentujących
sekwencję układania Kostki.
34
ROZDZIAŁ 4. REALIZACJA
Proces komunikacji przebiega w kolejności:
1. Moduł rozwiązywania najpierw zapisuje w pliku mc3cmd.rtf komunikat rozpoczęcia pracy.
2. Program “solver“ odpowiada, że zrozumiał komendę zapisując odpowiedź
w pliku mc3cmd.rtf
3. Po zeskanowaniu Kostki program zapisuje w pliku mc3dat.rtf wartości kolorów
kolejnych ścianek Kostki.
4. Po obliczeniu optymalnego rozwiązania “solver“ zapisuje w pliku mc3dat.rtf
ilość kroków rozwiązania oraz sekwencje ruchów układania kostki
5. Na koniec “solver“ w pliku mc3out.rtf umieszcza raport pracy programu “solver“
4.1.8
Moduł skanuj i rozwiąż - plik “scan_and_solve“
Moduł ten zawiera tylko jedną funkcję. Funkcja ta służy do uruchamiania kolejno
wszystkich metod potrzebnych do tego aby właściwie zeskanować, obliczyć ruchy
i ułożyć Kostkę Rubika. W przypadku trzech nieudanych prób ułożenia Kostki moduł ten zaprzestaje wykonywać dalsze próby, wyświetla stosowny komunikat błędu
i ustawia robota w pozycji wyjściowej.
4.2
Próba implementacji w środowisku Matlab
Przed rozpoczęciem implementacji w programie Matlab miał miejsce przegląd
tego środowiska. Celem tego przeglądu było poznanie możliwości jaki ten program
oferuje. W trakcie przeglądu wyszło na jaw jak ograniczoną funkcjonalność reprezentuje sobą środowisko Matlab w tym zastosowaniu. W szczególności najbardziej
istotnymi ograniczeniami były:
• Brak możliwości przesłania programu na urządzenie - program Matlab pozwala
jedynie na pracę w formie zdalnej kontroli robota. Program wykonywany jest
na komputerze, który tylko i wyłącznie drogą komunikacji z robotem wysyła
mu na bieżąco kolejne instrukcje do wykonania. Oznacza to, że niemożliwe jest
samodzielne funkcjonowanie robota.
• Ograniczona liczba funkcji bibliotecznych - charakter zdalnego kontrolera programu Matlab powoduje mocno ograniczony zbiór gotowych funkcji bibliotecznych. Programista otrzymuje jedynie najbardziej podstawowy zestaw funkcji
4.3. IMPLEMENTACJA W SYSTEMIE EV3DEV
35
takich jak przekazanie mocy na dany silnik, czy odczyt surowej wartości jasności światła czujnika koloru. Brak bardziej skomplikowanych funkcji, np.
obrotu serwonapędu z utrzymywaniem zadanej prędkości, dzięki algorytmowi
PID, utrudnia i spowalnia pisanie skomplikowanych programów.
• Brak operacji odczytu i zapisu plików na urządzeniu - W programie Matlab
niemożliwe jest wykonywanie operacji na plikach znajdujących się w pamięci
robota. Przez to nie jest możliwa komunikacja z zewnętrznym programem “solver“, który komunikuje się z oprogramowaniem robota właśnie poprzez wymienianie danych w plikach urządzenia.
• Brak programowania wielowątkowego - program Matlab nie daje możliwości
programowania współbieżnego robotów Mindstorms. Stanowi to silne ograniczenie. W wielu przypadkach da się przerobić oprogramowanie współbieżne
na jednowątkowe, jednak może się to okazać czasochłonne oraz zmieniające
zachowanie robota. W pozostałych dwóch środowiskach wielowątkowość była
wykorzystywana.
Te wszystkie czynniki wpłynęły na decyzję, że środowisko Matlab nie nadaje
się do implementacji programu na robota “Rubik solver“. Tak więc po wstępnym zapoznaniu ze środowiskiem postanowione zostało, że robot oprogramowany zostanie w środowiskach ROBOTC i ev3dev, natomiast Matlab zostanie
wykluczony ponieważ nie nadaje się on do projektów tego typu.
4.3
Implementacja w systemie ev3dev
Do implementacji kolejnej kopii programu wykorzystany został system ev3dev.
Program napisany był w języku C++. C++ jest językiem obiektowym, dlatego program podzielony został na klasy odpowiadające modułom programu. W funkcji main
tworzone są kolejno wszystkie obiekty głównych klas modułów. Obiekty potrzebne
metodom klas przekazywane są do nich poprzez argumenty wywołania metody. Do
tego celu zdefiniowane zostały szablony metod. Na rysunku 4.2 przedstawiony został diagram klas programu napisanego w systemie ev3dev. W kolejnych podsekcjach
opisane są wszystkie moduły programu.
4.3.1
Moduł zmiennych globalnych - plik “globals“
Tak jak w przypadku programu z ROBOTC wykorzystywany jest szereg zmiennych globalnych. Jest to prawie identyczny zestaw zmiennych, stałych i tablic jak
w przypadku pliku “globals“ z programu napisanego w ROBOTC.
36
ROZDZIAŁ 4. REALIZACJA
Rysunek 4.2: Diagram klas programu napisanego w środowisku ev3dev
4.3.2
Moduł manipulacji - klasa “manipulate“
W klasie manipulate znajdują się funkcje odpowiedzialne za manipulacje Kostką
Rubika. Biblioteka ev3dev dostarcza trochę uboższy zestaw funkcji związanych z servonapędami. Nie przeszkadza to jednak w tworzeniu własnych wysokopoziomowych
funkcji. W klasie manipulate zaimplementowane zostały funkcje stworzone na wzór
tych ze środowiska ROBOTC, ułatwiło to przepisywanie programu z pierwszego środowiska. W dodatku dzięki temu programy zachowują spójną konstrukcją, co było
jednym z założeń projektowych.
4.3.3
Moduł kalibracji - klasa “calibrate“
Dokładnie jak w przypadku pliku “calibrate“ z ROBOTC w klasie tej znajdują
się metody ustawiające robota w pozycji gotowej do rozwiązywania Kostki.
4.3.4
Moduł wyświetlania - klasa “display“
Klasa odpowiada za dostarczenie interfejsu do komunikacji z użytkownikiem.
Wyświetlane są komunikaty informujące o stanie robota, kolejnych fazach działania
4.3. IMPLEMENTACJA W SYSTEMIE EV3DEV
37
programu, czy ewentualnych błędach. Dla uproszczenia komunikaty nie są formatowane, a są po prostu kolejnymi wypisanymi na ekranie liniami tekstu, tak jak
w przypadku linii poleceń komputera PC.
4.3.5
Moduł skanowania - klasa “scan_cube“
Moduł “scan_cube“ to klasa ze zdefiniowanymi metodami, które zajmują się
dokładnym zeskanowaniem wszystkich kolorowych ścianek Kostki. Funkcje te wykorzystują czujnik koloru działający w trybie RGB - podającym składowe czerownego,
zielonego i niebieskiego koloru ścianki. Informacje te zebrane w tablicach scan_red,
scan_green, scan_blue wysyłane są potem do zewnętrznego programu.
4.3.6
Moduł rozwiązywania - klasa “solver“
Klasa ta dostarcza metod których zadaniem jest komunikacja z zewnętrznym
programem “solver“. Komunikacja przebiega w dokładnie ten sam sposób co w środowisku ROBOTC ponieważ wykorzystuje dokładnie ten sam zewnętrzny program
rozwiązujący.
4.3.7
Moduł skanuj i rozwiąż - klasa “scan_and_solve“
Klasa ta zajmuje się uruchamianiem kolejnych metod ze wszystkich klas, tak
aby w efekcie z pomieszanej Kostki po wywołaniu metody scanAndSolve otrzymać
Kostkę rozwiązaną. Tak jak w przypadku programu z ROBOTC wykonywane są
trzy próby ułożenia Kostki, a w przypadku porażki komunikowany jest błąd, a robot
ustawiany w pozycji wyjściowej.
38
ROZDZIAŁ 4. REALIZACJA
Rozdział 5
Podsumowanie
W ostatnim rozdziale zawarte są wyniki analizy środowisk programistycznych
(sekcja 5.1) oraz wnioski wyciągnięte w trakcie wykonywania analizy (sekcja 5.2).
5.1
Wyniki analizy porównawczej
Rysunek 5.1: Porównanie środowisk programistycznych. * zależne od wybranego
edytora, ** możliwość doinstalowania modułu
39
40
ROZDZIAŁ 5. PODSUMOWANIE
Analiza porównawcza przebiegła sprawnie, dzięki temu, że środowiska zostały
poznane od strony implementacyjnej. Udało się uzyskać wyniki charakteryzujące
każde ze środowisk. Wyniki porównania przedstawione są w tabeli z rysunku 5.1.
Najważniejsze różnice pomiędzy środowiskami:
• Środowisk ROBOTC i Matlab nie trzeba konfigurować przed rozpoczęciem
pierwszych projektów. Natomiast jedynie środowisko ev3dev umożliwia dołączanie modułów rozszerzających funkcjonalność programu.
• ROBOTC i Matlab posiadają zintegrowane edytory, w których dostępne są
znane ze standardowych zintegrowanych środowisk programistycznych funkcje, jak: kolorowanie składni kodu, czy automatyczne uzupełnianie wyrażeń. Dodatkowo bardzo przydatnym udogodnieniem jest przeglądarka wszystkich funkcji bibliotecznych, która dostępna jest tylko w programie ROBOTC.
Ev3dev nie posiada dedykowanego edytora. Natomiast można użyć dowolnego
edytora, który wspiera języki używane przez ev3dev. Dobranie własnego edytora wymaga samodzielnej konfiguracji, instalowania kompilatorów skrośnych
i doinstalowywania potrzebnych rozszerzeń. Mimo wymaganego wysiłku przy
konfiguracji, efekt może dorównywać edytorom środowisk ROBOTC i Matlab.
Dodatkowym atutem wyróżniającym ev3dev jest otwartość kodu źródłowego
tego projektu.
• W przypadku testowania i wykrywania błędów środowiska ROBOTC i Matlab
oferują wbudowane, wszystkie standardowe narzędzia potrzebne do tych procesów. Natomiast ev3dev standardowo nie posiada takich narzędzi, możliwe
jest jednak doinstalowanie narzędzi, które można znaleźć w sieci.
• Kompilatorem zintegrowanym mogą się pochwalić ROBOTC i Matlab jednak
w przypadku tego drugiego kod binarny nigdy nie jest w całości wysyłany
na robota, co wynika z faktu pracy środowiska w formie zdalnego kontrolera.
ROBOTC i ev3dev umożliwiają również pracę w trybie zdalnej kontroli jednak standardowo, cały skompilowany program przesyłany jest na urządzenie.
Dodatkowym atutem środowiska ev3dev jest możliwość kompilacji programu
bezpośrednio na robocie. Umożliwia to przeprowadzenie całego procesu implementacji programu, za pomocą urządzenia umożliwiającego zdalny dostęp do
robota bez konieczności używania komputera. Taki tryb pracy wygodny jest
jedynie w przypadku bardzo małych programów.
5.2. WNIOSKI
41
• Wszystkie środowiska umożliwiają stabilną komunikacje za pomocą kabla USB,
oraz bezprzewodowo z użyciem standardów Bluetooth oraz Wi-Fi. Natomiast
w środowisku ev3dev wymagana jest ręczna konfiguracja takiego połączenia,
podczas gdy pozostałe programy posiadają wygodne zintegrowane moduły komunikacji.
• Cechami wyróżniającymi poszczególne środowiska są: Możliwości analizy i prezentacji danych w programie Matlab. Możliwe jest również stworzenie wirtualnego modelu robota oraz testowanie z użyciem współpracującego programu
Simulink [7]. ROBOTC oraz ev3dev wspierają podłączanie do robota nieoficjalnych podzespołów. W ev3dev możliwe jest pisanie własnych sterowników,
co otwiera drogę do podłączania autorskich podzespołów. Atutem wyróżniającym system ev3dev jest możliwość wyboru spośród wachlarza języków programowania.
5.2
Wnioski
Wnioski mają formę charakterystyki projektów najbardziej odpowiednich dla
konkretnych środowisk. W kolejnych podsekcjach znajdują się wnioski dla środowisk
ROBOTC (podsekcja 5.2.1), ev3dev (podsekcja 5.2.2) oraz Matlab (podsekcja 5.2.3).
Na końcu znajduje się wniosek ogólny (podsekcja 5.2.4).
5.2.1
Charakterystyka projektów dla środowiska ROBOTC
Środowisko ROBOTC jest najbardziej wszechstronnym spośród analizowanych
programów. Cechy takie jak: automatyczna konfiguracja, zebranie wszystkich potrzebnych narzędzi w jednym programie, zintegrowany kompilator, debugger i moduł
komunikacji, dołączona przeglądarka funkcji bibliotecznych i dokumentacja, świadczą o tym, że środowisko to świetnie nadaje się do zarówno małych jak i bardzo
dużych projektów. Wadami środowiska są zamknięte źródła kodu, oraz brak wyboru języków programowania. Najbardziej polecany dla młodzieży, w szczególności
na zajęcia szkolne oraz uniwersyteckie.
5.2.2
Charakterystyka projektów dla środowiska ev3dev
Ev3dev to system, którego największymi zaletami są szerokie spektrum dostępnych języków programowania, oraz nieograniczone możliwości rozwijania programu.
42
ROZDZIAŁ 5. PODSUMOWANIE
Otwarty kod źródłowy pozwala na dołączanie własnych rozszerzeń systemu, używanie dowolnych nieoficjalnych podzespołów, oraz dostosowywanie projektu dokładnie do potrzeb użytkownika. Bardzo dużą zaletą jest możliwość pisania programów
z praktycznie każdej platformy, łącznie z mobilnymi systemami operacyjnymi. Największa wada systemu - brak zintegrowanego edytora, jest jednocześnie wielką zaletą.
Wadą braku edytora jest potrzeba samodzielnej i skomplikowanej konfiguracji systemu, co w przypadku wielu użytkowników platformy Lego Ev3, zwłaszcza tych najmłodszym może okazać się barierą nie do pokonania. Natomiast dla wymagających
programistów spodziewających się braku nałożonych ograniczeń jest to olbrzymia
zaleta. Dlatego właśnie to doświadczonym programistom system ten jest najbardziej
polecany, do projektów małych i dużych.
5.2.3
Charakterystyka projektów dla środowiska Matlab
Środowisko Matlab pod względem samego tworzenia oprogramowania robotów
jest najbardziej ograniczonym. Największymi atutami programu jest przedstawianie
danych i wyników w postaci wykresów, tworzenie modeli matematycznych, używanie
skomplikowanych działań matematycznych, oraz symulowanie robota w programie
Simulink. Program Matlab polecany jest do projektów, których część robotyczna
ograniczona jest do minimum, natomiast główny nacisk położony jest na zbieranie danych i analizowanie zachowania robota. W prostszych słowach najlepszymi
projektami są roboty o bardzo prostej funkcji, z użyciem niewielu elementów aktywnych, gdzie badana jest problematyka precyzji robota, optymalności algorytmów,
czy zgodności zachowania robota z jego modelem wirtualnym. Doskonałe środowisko dla studentów robotyki i automatyki w projektach poświęconych analizie robota
opartego na modelach matematycznych i fizycznych.
5.2.4
Wniosek ogólny
W ramach pracy został zbudowany robot o solidnej konstrukcji, którego zadaniem jest układanie Kostki Rubika. Na robota tego napisane zostały dwa programy
napisane w dwóch różnych środowiskach programistycznych. Została również podjęta próba napisania programu w środowisku Matlab, jednak ograniczone możliwości
rozszerzenia programu dla technologii Lego Mindstorms zadecydowały o wykluczeniu środowiska Matlab z fazy implementacyjnej. Oba programy napisane w środowiskach ROBOTC i ev3dev spełniają wszystkie założenia sformułowane w sekcji 3.2.
Robot w większości przypadków testowych po uruchomieniu dowolnego z dwóch
5.2. WNIOSKI
43
programów poprawnie układa pomieszaną Kostkę. Nieudane próby wynikają jedynie z wpływu oświetlenia zewnętrznego, które powoduje pomyłkę przy skanowaniu
kolorów czerwonego i żółtego. Przy żadnej innej fazie pracy robota poza fazą skanowania nie występowały problemy. Stworzenie robota było jednak tylko częścią poniższej pracy. Ważnym zagadnieniem była ocena testowanych środowisk. Analiza ta
przebiegła pomyślnie, zostały sformułowane cechy pozytywne i negatywne każdego
ze środowisk. Zostały one zestawione ze sobą w tabeli porównawczej, a na koniec
zostały przedstawione profile projektów, które najbardziej pasują do poszczególnych
środowisk. W związku z powyższym można stwierdzić, że praca przebiegła zgodnie
z planem, a wyniki są satysfakcjonujące.
44
ROZDZIAŁ 5. PODSUMOWANIE
Bibliografia
[1] Robot chirurgiczny da Vinci - artykuł.
http://www.asimo.pl/modele/
davinci.php.
[2] Robotyka podwodna - artykuł. http://yadda.icm.edu.pl/yadda/element/
bwmeta1.element.baztech-article-BSW1-0109-0006/c/Gieldzinski.pdf.
[3] Robotyka.com: Teoria robotyki.
http://www.robotyka.com/teoria.php/
teoria.4.
[4] Secure Shell - wikipedia angielska.
[5] Strona główna dodatku LEGO Mindstorms EV3 Support Package.
http:
//www.mathworks.com/hardware-support/lego-mindstorms-ev3-matlab.
html.
[6] Strona
główna
konkursu
Mini
Urban
Challenge.
http://www.
robotvirtualworlds.com/mini-urban-challenge/?_ga=1.160675512.
469940421.1427281178.
[7] Strona główna produktu Simulink. http://www.mathworks.com/products/
simulink/.
[8] Strona główna projektu Mindcub3r. http://mindcuber.com/index.html.
[9] Strona główna projektu NASA Curiosity Rover.
https://www.nasa.gov/
mission_pages/msl/index.html.
[10] Strona
internetowa
Expansion
Set.
produktu
LEGO
Mindstorms
EV3
Education
https://education.lego.com/en-us/products/
lego-mindstorms-education-ev3-expansion-set/45560.
[11] Wstęp do Robotyki - Wykład 1. http://elka.pw/obieralne/wr/wyk/WR_cz1.
pdf.
45
46
BIBLIOGRAFIA
[12] Zintegrowane środowisko programistyczne - wikipedia definicja. https://pl.
wikipedia.org/wiki/Zintegrowane_środowisko_programistyczne.

Podobne dokumenty