Sterowanie sześcionożnym robotem kroczącym w

Transkrypt

Sterowanie sześcionożnym robotem kroczącym w
POLITECHNIKA WROCŁAWSKA
WYDZIAŁ ELEKTRONIKI
Kierunek:
Specjalność:
Automatyka i Robotyka (AIR)
Robotyka (ARR)
PRACA DYPLOMOWA
MAGISTERSKA
Sterowanie sześcionożnym robotem kroczącym
w nierównym terenie
Hexapod walking control over uneven terrain
Autor:
Maciej Patro
Prowadzący pracę:
dr inż. Robert Muszyński
Ocena pracy:
WROCŁAW 2014
Spis treści
1 Wstęp
3
2 Sterowanie
2.1 Chody sześcionogów . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Chód pełzający . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Chód gąsienicowy . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Chód trójpodporowy . . . . . . . . . . . . . . . . . . . . . . .
2.2 Sterowanie z wykorzystaniem krzywizny i prędkości . . . . . . . . . .
2.3 Generator wykorzystujący kratę Tody-Rayleigha . . . . . . . . . . . .
2.4 Połączenie kraty i sterowania z wykorzystaniem krzywizny i prędkości
2.5 Proste i odwrotne zadanie kinematyki . . . . . . . . . . . . . . . . . .
2.5.1 Proste zadanie kinematyki . . . . . . . . . . . . . . . . . . . .
2.5.2 Odwrotne zadanie kinematyki . . . . . . . . . . . . . . . . . .
2.6 Nawigacja w nierównym terenie . . . . . . . . . . . . . . . . . . . . .
3 Konstrukcja robota
3.1 Konstrukcja mechaniczna . . . . . . . . . . .
3.1.1 Korpus robota . . . . . . . . . . . . .
3.1.2 Projekt kończyny . . . . . . . . . . . .
3.1.3 Sensory . . . . . . . . . . . . . . . . .
3.2 Układy elektroniczne . . . . . . . . . . . . . .
3.2.1 Zasilanie . . . . . . . . . . . . . . . . .
3.2.2 Komunikacja MCU-Serwo . . . . . . .
3.2.3 Moduły Bluetooth i układ kamery . .
3.2.4 Mikrokontroler oraz pozostałe układy .
4 Oprogramowanie
4.1 Aplikacja użytkownika . . . . . . . . . . . .
4.1.1 Komunikacja z robotem . . . . . . .
4.1.2 Interfejs użytkownika . . . . . . . . .
4.1.3 Wizualizacja danych . . . . . . . . .
4.2 Inicjacja dodatkowych urządzeń . . . . . . .
4.2.1 Konfiguracja serwomechanizmów . .
4.2.2 Moduł Bluetooth . . . . . . . . . . .
4.3 Oprogramowanie mikrokontrolera . . . . . .
4.3.1 Komunikacja z serwomechanizmami
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
7
8
8
10
13
15
16
17
20
21
.
.
.
.
.
.
.
.
.
23
23
23
24
27
29
32
32
33
33
.
.
.
.
.
.
.
.
.
35
35
36
37
38
38
38
41
41
43
2
SPIS TREŚCI
4.3.2
4.3.3
4.3.4
4.3.5
Obsługa modułu MinIMU-9 [29] . . .
Odczyt danych z dalmierza IR . . . . .
Przerwania od czujników dotykowych .
Główne zadanie systemu — sterowanie
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
45
45
46
5 Badania
5.1 Symulacje w środowisku Simulink . . . . . . . . . . . . . .
5.1.1 Badania najniższej warstwy systemu . . . . . . . .
5.1.2 Warstwa zmian trybu chodu . . . . . . . . . . . . .
5.2 Badania rzeczywistego obiektu . . . . . . . . . . . . . . . .
5.2.1 Generator chodu . . . . . . . . . . . . . . . . . . .
5.2.2 Sterowanie z wykorzystaniem krzywizny i prędkości
5.2.3 Nawigacja w nierównym terenie . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
49
56
56
59
59
63
6 Podsumowanie
69
Dodatek A Płyta CD
71
Dodatek B Schematy elektroniczne
73
Bibilografia
82
Rozdział 1
Wstęp
Roboty w dzisiejszych czasach odgrywają coraz większą rolę w życiu człowieka. Jest
wiele specjalizowanych klas tych urządzeń, przeznaczonych do realizacji konkretnych
zadań. Jedną z takich grup są roboty mobilne. Ich podstawowym zadaniem jest przemieszczanie się w zadanej przestrzeni. Głównymi przedstawicielami tej grupy są maszyny kołowe oraz kroczące. Wprawdzie roboty kroczące mają w stosunku do kołowych
bardziej skomplikowaną konstrukcję, sterowanie oraz znaczne zużycie energii, jednakże
ich zaletami są większe możliwości poruszania się w przestrzeni, łatwość adaptacji do
otoczenia oraz możliwość poruszania w nierównym terenie, pokonywania przeszkód, czy
też manipulowania obiektami. Jak wiadomo człowiek bardzo często w swoich działaniach stara się naśladować rozwiązania zaobserwowane w naturze, dlatego szczególnymi
przedstawicielami maszyn mobilnych są urządzenia kroczące inspirowane zwierzętami
oraz ich sposobami poruszania się. Fakty pokazują, że człowiek interesował się takimi
urządzeniami już od tysięcy lat. Archeolodzy podczas swoich poszukiwań odkryli mechanicznego ”psa”, którego powstanie datowane jest na okres około 2 tysięcy lat przed
naszą erą [41], legendy hinduskie zawierają opisy mechanicznych słoni. W Chinach
w 231 roku naszej ery powstała maszyna krocząca MU NIU LIU MA, wykorzystywana
do transportu [6]. Mogła ona przewozić ładunki 200-250 kg pokonując około 10 kilometrów ścieżek górskich dziennie. Szkice projektowe tej maszyny zostały odnalezione
i na ich podstawie wykonano współczesną kopię.
Jedną z bardziej widocznych różnic między zwierzętami, jak i robotami kroczącymi,
jest posiadana liczba nóg. Jest ona różna ze względu na przystosowanie do środowiska
oraz zadania i cele. Im więcej kończyn posiada zwierzę czy maszyna, tym łatwiej utrzymać mu równowagę i stabilnie poruszać się w otoczeniu. Niestety konsekwencją dużej
liczby nóg jest znaczne utrudnienie sterowania. Dużo trudniej przestawiać w odpowiedni sposób osiem lub więcej nóg niż tylko dwie. Niniejsza praca porusza zagadnienia dotyczące robotów sześcionożnych ze względu na ich uniwersalność. Maszyna tego
typu ma możliwość pokonywania przeszkód, stabilnego kroczenia po nierównościach,
ponadto nie przewraca się po zatrzymaniu oraz może korzystać z wielu rodzajów chodu.
Z tych też powodów lokomocja na sześciu nogach jest popularna w naturze.
Jest wiele istniejących konstrukcji sześcionożnych robotów kroczących. Jednak zazwyczaj ich twórcy ograniczają się do prostych algorytmów sterowanie dających małe
możliwości lokomocji. Jedną z konstrukcji posiadających duże możliwości poruszania
się w różnym terenie jest robot RHex [26] charakteryzujący się prostą budową i wyko-
4
1. Wstęp
rzystaniem jedynie sześciu silników. Przykładem bardziej zaawansowanej konstrukcji
o dużym potencjale jest robot opisany w pracy [24]. Najciekawszy w tej konstrukcji
jest sposób generowania trajektorii końcówek nóg robota umożliwiający płynne rozpoczynanie ruchu oraz zatrzymywanie. Co więcej przechodzenie między różnymi trybami
chodu w tym rozwiązaniu jest bardzo intuicyjne oraz proste do realizacji.
Celem pracy jest zaprojektowanie, wykonanie konstrukcji mechanicznej oraz elektronicznej robota kroczącego, opracowanie algorytmów związanych z generacją chodu
oraz poruszaniem się w nierównym terenie, implementacja ich na jednostce centralnej
maszyny. Celem dodatkowym jest zbadanie działania wybranych rozwiązań w testowym środowisku. Konstrukcja mechaniczna robota musi cechować się dużym zakresem ruchów oraz funkcjonalnością. Rozwiązania związane z układami elektronicznymi
robota muszą zapewniać bezpieczeństwo dla użytkownika oraz robota, prostą rozszerzalność (możliwość dołączania dodatkowych sensorów lub funkcjonalności). Oprogramowanie opracowane w trakcie realizacji projektu musi przechowywać informacje
w odpowiednich strukturach danych tak, aby powstające w przyszłości moduły posiadały dostęp do informacji już przechowywanych w jednostce. Wykorzystane algorytmy
sterowania muszą zapewniać możliwie płynny ruch robota.
Praca podzielona jest na cztery główne rozdziały. Rozdział 2 poświęcony jest sterowaniu robota. Opisano w nim podstawy dotyczące chodu robotów, algorytmy generowania trajektorii dla końcówek nóg robota, sposób zadawania trajektorii maszynie, proste i odwrotne zadanie kinematyki oraz algorytmy związane z nawigacją w nierównym
terenie. W rozdziale 3 opisano konstrukcję mechaniczną robota, budowę korpusu, kończyn oraz zamocowane czujniki. Dodatkowo przedstawiono rozwiązania elektroniczne
zastosowane w robocie. Następnie rozdział 4 traktuje o oprogramowaniu robota, wykonanej aplikacji użytkownika oraz pracach związanych z odpowiednim ustawieniem
serwomechanizmów oraz modułu Bluetooth. Rozdział 5 pokazuje wyniki badań symulacyjnych oraz testy rzeczywistej konstrukcji robota. Ostatni rozdział podsumowuje
wykonane prace.
Rozdział 2
Sterowanie
Jest wiele różnych koncepcji oraz metod sterowania wielonożnymi robotami kroczącymi. Najważniejszym zadaniem sterowania robotem jest odpowiednie generowanie
chodu — formy lokomocji polegającej na synchronicznym przestawianiu odnóży powodującej przemieszanie. Często naukowcy czerpią inspirację z innych dziedzin nauki,
adaptując stworzone rozwiązania do własnej przestrzeni problemów. Jednym z takich
rozwiązań jest adaptacja kraty Tody-Rayleigha [19] opisana w pracy [24]. Z jej wykorzystaniem można generować chód dodając do niego funkcjonalności związane z poruszaniem się w nierównym terenie oraz wykonywaniem skomplikowanych manewrów.
W bieżącym rozdziale w sekcji 2.1 opisano podstawy związane z chodami sześcionożnych robotów kroczących. Następnie podrozdział 2.2 obrazuje sposób zadawanie
trajektorii maszynie poprzez parametry krzywizny i prędkości. Podrozdział 2.3 opisuje
generator chodu z wykorzystaniem kraty Tody-Rayleigha. Kolejna sekcja 2.4 łączy
zadane sterowanie poprzez krzywiznę i prędkość z generatorem chodu, aby umożliwić
śledzenie trajektorii. Następnie w podrozdziale 2.5 przedstawiono proste i odwrotne
zadanie kinematyki umożliwiające zamianę wartości współrzędnych kartezjańskich na
bezpośrednie wartości kątów ustawianych na silnikach. Ostatni podrozdział 2.6 poświęcony jest zagadnieniu modyfikacji otrzymywanych trajektorii nóg z generatora chodu
tak, aby umożliwić nawigację w nierównym terenie.
2.1 Chody sześcionogów
Podczas chodu każda z nóg robota jest kolejno podnoszona do góry, przesuwana wzdłuż
wektora ruchu, stawiana, a następnie przesuwana wzdłuż wektora o przeciwnym zwrocie do wektora ruchu. Na rysunku 2.1 przedstawiono przykładową trajektorię zakreślaną przez punkt końca kończyny podczas przestawiania. Końcówki nóg robota
zazwyczaj poruszają się po trajektorii przypominającej elipsę. Fragment ruchu nogi
w powietrzu jest nazywany fazą podnoszenia (protrakcji), natomiast faza podparcia
(retrakcji) następuje, gdy noga oparta jest o podłoże. Faza retrakcji powoduje ruch
robota w zadanym kierunku. Ponadto wyróżnia się dwie długości: wykrok — odcinek
na jaki noga wysuwa się do przodu — oraz zakrok — odcinek na jaki noga cofa się.
Suma wartości tych dwóch odcinków definiuje pełną długość kroku robota.
Przyjmuje się, że pozycja robota jest stabilna, gdy rzut jego środka ciężkości na
podłoże w kierunku zgodnym z siłą grawitacji znajduje się w środku figury geome-
6
2. Sterowanie
długość kroku
zakrok
wykrok
faza retrakcji
wysokość kroku
faza protrakcji
kierunek ruchu
Rysunek 2.1 Proces przestawiania nogi z parametrami
trycznej wyznaczonej przez punkty kontaktu nóg z podłożem. Figura ta nazywana
jest wielokątem podparcia. Przykład pozycji stabilnej sześcionoga można zobaczyć
na rysunku 2.2. Algorytmy chodu sześcionożnych robotów kroczących są inspirowane
między innymi sposobem poruszania się insektów [12]. Owady oraz roboty sześcionożne w opozycji do istot o mniejszej liczbie kończyn poruszają się w sposób stabilnie
statyczny. Maszyny kroczące statycznie stabilne charakteryzują się tym, że w każdej
fazie ruchu ich pozycja jest stała — zatrzymanie pracy silników w dowolnym momencie poruszania się nie spowoduje utraty stabilności. Dodatkowo ich ruch opisany jest
wyłącznie z wykorzystaniem metod kinematyki, a trajektorie zadawane są precyzyjnie
i ich realizacja powinna być dokładna [42]. Naukowcy zajmujący się entomologią podczas swoich obserwacji chodu owadów wprowadzili sześć prawidłowości dotyczących
algorytmów chodu [40, 42]:
• fale przemieszczeń nóg przenoszą się od tyłu do przodu ciała i żadna następna
noga nie zostanie podniesiona, zanim noga znajdująca się za nią nie zostanie
postawiona,
• naprzeciwległe nogi znajdujące się w tym samym segmencie ciała są przesunięte
w fazie ruchu (nie są przemieszczane równocześnie),
• czas przenoszenia jest stałą dla wszystkich nóg, niezależnie od prędkości ruchu,
• czas podparcia (styku z podłożem) maleje w miarę wzrostu prędkości ruchu,
rośnie więc częstość kroczenia (częstość przestawień nóg),
• odstęp czasu między podniesieniem nogi tylnej, a środkowej oraz między podniesieniem nogi środkowej i przedniej są porównywalne, podczas gdy taka różnica czasu
pomiędzy nogą tylną, a przednią zmienia się proporcjonalnie do częstości kroczenia,
• noga przednia (lub środkowa) jest podnoszona tylko wtedy, gdy noga poprzedzająca ją w sekwencji zostanie postawiona na podłoże.
2.1. Chody sześcionogów
7
b
b
b
b
b
środek masy
b
noga podpierająca
Rysunek 2.2 Wielokąt podparcia zaznaczony dla ruchu trójpodporowego
Korzystając z zaobserwowanych własności można zdefiniować kolejność kroczenia
nóg dla kilku podstawowych rodzajów chodu sześcionożnych maszyn kroczących. W tym
dla chodów opisanych w tej pracy: pełzającego 2.1.1, gąsienicowego 2.1.2 oraz trójpodporowego 2.1.3. Oznaczenia związane z numeracją nóg dla chodów pokrywają się
z oznaczeniami z rysunku 2.11.
Aby poprawnie opisać chód maszyny kroczącej niezbędne jest zdefiniowanie kilku
dodatkowych pojęć [42]:
• Okres chodu — jest to czas, w którym realizowane są pojedyńczo wszystkie fazy
ruchu (pełna sekwencja przestawiania każdej kończyny).
• Współczynnik obciążenia — stosunek czasu, w którym noga jest w powietrzu, do
okresu chodu.
• Zapas stabilności — określany jest jako odległość rzutu środka ciężkości od krawędzi wielokąta podparcia. Wielkość ta mierzona jest wzdłuż aktualnego wektora
ruchu środka ciężkości.
2.1.1
Chód pełzający
Najwolniejszym sposobem kroczenia sześcionogów jest chód pełzający (metachroniczny) [24]. Polega on na przestawianiu nóg jedna po drugiej. Współczynnik obciążenia
dla tego chodu jest równy 16 , ponieważ w każdej fazie ruchu tylko jedna noga znajduje
8
2. Sterowanie
Rysunek 2.3 Trajektorie poszczególnych nóg w chodzie metachronicznym
się w górze, pozostałe podtrzymują korpus sześcionoga. Oznacza to, że prędkość w fazie
retrakcji jest pięć razy mniejsza niż w fazie przenoszenia. Rysunek 2.3 pokazuje trajektorie wszystkich sześciu nóg podczas przemieszczania się chodem pełzającym. Na
rysunku 2.4 można zaobserwować wszystkie fazy chodu pełzającego wraz z wielokątem podparcia. Zapasy stabilności w tym rodzaju kroczenia są duże, co powoduje że
nawet w przypadku nieoczekiwanej przeszkody robot prawdopodobnie zachowa swoją
stabilność. Chód ten można określić jako zachowawczy.
2.1.2
Chód gąsienicowy
Chód gąsienicowy (czteropodporowy) nazwany w ten sposób ze względu na podobieństwo do charakterystycznego sposobu poruszania się gąsienic. Składa się on z trzech faz,
w trakcie których kolejno przestawiane są nogi tylne, środkowe i przednie, co przedstawiono na wykresie 2.5. Współczynnik obciążenia poszczególnych nóg wynosi 13 .
Rysunek 2.6 obrazuje sekwencje kroków robota oraz zmiany wielokąta podparcia podczas poszczególnych faz. Taki sposób poruszania się posiada niewielki zapas stabilności
dlatego wielkość zakroku i wykroku powinny być odpowiednie dobrane. Przy dużych
zakłóceniach (w postaci przeszkód) istnieje możliwość utraty stabilności. W teorii ten
rodzaj chodu przystosowany jest do pokonywania przeszkód o regularnym kształcie
(np. schodów) [42]. Nie spełnia on jednak drugiej prawidłowości opisanej wcześniej dla
sześcionogów. Prędkość ruchu nogi w fazie retrakcji jest dwa razy mniejsza niż w fazie
protrakcji.
2.1.3
Chód trójpodporowy
Chód trójpoporowy jest najszybszym stabilnym chodem jaki może być realizowany
przez roboty oraz organizmy sześcionożne. Trajektorie poszczególnych nóg podczas
2.1. Chody sześcionogów
Rysunek 2.4 Fazy chodu z wielokątami podparcia dla chodu pełzającego
Rysunek 2.5 Trajektorie poszczególnych nóg w chodzie gąsienicowym
9
10
2. Sterowanie
Rysunek 2.6 Fazy chodu z wielokątami podparcia dla chodu gąsienicowego
dwóch faz pokazano na rysunku 2.7. Współczynnik obciążenia dla tego chodu wynosi 12 . Na rysunku 2.8 pokazane są obie fazy ruchu wraz z wielokątami podparcia.
Nogi w tym ruchu przestawiane są trójkami — z tego powodu rozróżnialne są tylko
dwie fazy ruchu, gdyż pozostałe nakładają się na nie. Charakterystyczne dla tego ruchu
jest, że prędkość nóg w trakcie retrakcji i protrakcji jest równa. Chód trójpodporowy
jest chodem najczęściej wykorzystywanym do poruszania się w środowisku. Specjalny
rozstaw nóg u owadów pozwala na zwiększenie zapasu stabilności podczas przemieszczania się. Jest to ruch wykorzystywany często do przemieszczania się po płaskich
powierzchniach.
2.2
Sterowanie z wykorzystaniem krzywizny i prędkości
Sposób przenoszenia nóg robota zależy nie tylko od wybranego algorytmu chodu, ale
również od kształtu trajektorii, po której porusza się środek maszyny kroczącej. Trajektoria zadawana jest przez użytkownika i musi ona być jednoznaczna, aby uniemożliwić
maszynie ruch niezgodny z intencjami operatora. Z tego powodu do opisu trajektorii ruchu korpusu robota można wykorzystać pojęcie krzywizny, prędkości ruchu oraz
skręcenia1 [8]. Jednakże w tej pracy w miejsce skręcenia zastosowano wysokość utrzymywania korpusu nad powierzchnią ruchu, oznaczoną jako Z. Idąc za przykładem
zachowania żywych organizmów jako punkt odniesienia przyjmowany jest środek masy
1
W trakcie realizacji projektu korpus robota traktowany jest jako punkt, dlatego pomijane są
zagadnienia związane z jego orientacją. Ponieważ inspiracją dla projektu są owady i ich sposób
poruszania się, korpus robota jest domyślnie zorientowany równolegle do trajektorii ruchu
2.2. Sterowanie z wykorzystaniem krzywizny i prędkości
Rysunek 2.7 Trajektorie poszczególnych nóg w chodzie trójpodporowym
Rysunek 2.8 Fazy chodu z wielokątami podparcia dla chodu gąsienicowego
11
12
2. Sterowanie
Y0
Vi
Xsi
Ri
Ysi
ω
γ
V0
ω
S0
X0
R
Rysunek 2.9 Robot podczas kroczenia po łuku
robota.
Do odtworzenia zadanej trajektorii na płaszczyźnie X0Y , można wykorzystywać
fakt, iż funkcje x(t), y(t) kreślą lokalnie trajektorię charakteryzującą się daną krzywizną
K(t) lub promieniem R(t). Zależność między nimi jest następująca
R(t) =
1
,
K(t)
natomiast prędkość ruchu można opisać poprzez
√
v(t) = ẋ(t)2 + ẏ(t)2 .
(2.1)
(2.2)
Stąd prędkość kątowa ruchu jest opisywana wzorem
ω(t) =
v(t)
.
R(t)
(2.3)
Następnie można wyprowadzić wzór na promień krzywej, po której porusza się końcówka i-tej nogi robota
√
2
(t)
(2.4)
Ri (t) = (R(t) − |xis (t)|2 ) + yis
oraz jej prędkość
vi (t) = Ri (t)ω(t).
(2.5)
2.3. Generator wykorzystujący kratę Tody-Rayleigha
13
Aby koniec kończyny robota w trakcie przemieszczania się maszyny nie zmieniał położenia względem podłoża w fazie retrakcji, należy sterować nogą w taki sposób, by jej
prędkość viw (t) względem korpusu była równa
2
viw
(t) = v(t)2 + vi (t)2 − 2|v(t)||vi (t)| cos ψ,
(2.6)
gdzie
cos (ψ(t)) =
R(t) − xis (t)
.
Ri (t)
(2.7)
Uzyskana w ten sposób prędkość końca nogi jednoznacznie określa prędkości poszczególnych przegubów nogi robota zapewniając niezmienność punktów kontaktu z podłożem w trakcie zmiany pozycji. Prędkości te można obliczyć wykorzystując odwrotne
zadanie kinematyki opisane w podrozdziale 2.5.
2.3 Generator wykorzystujący kratę
Tody-Rayleigha
Bez możliwości generowania odpowiednich chodów dla robota, trudne jest stworzenie
poprawnie funkcjonującej konstrukcji. W trakcie prac nad tym projektem postanowiono posłużyć się kratą Tody-Rayleigha opisaną w pracy [24].
Kratą Tody-Rayleigha nazywa się sieć Tody [39], w której kolejne elementy sieci
to oscylatory Rayleigha [25]. Krata Tody (Toda lattice) jest to prosty model jednowymiarowego kryształu stosowany w fizyce ciała stałego opisujący nieskończony łańcuch
sąsiadujących elementów oraz ich wzajemnych relacji danych równaniem
{
ṗn = eyn−1 −yn − eyn −yn+1
,
(2.8)
ẏn = pn
gdzie yn reprezentuje przesunięcie n-tego elementu w sieci, natomiast pn to pęd tego
elementu, przy założeniu, że masa poszczególnych elementów kraty jest równa 1. Sieć
Tody [24] można modelować, jako układ mas połączonych ze sobą przy pomocy sprężyn. Sprężyny łączące kolejne elementy posiadają nieliniową charakterystykę sprężystości [24]. Gdy energia poszczególnych ogniw jest równa — układ jest stabilny. Jednak,
gdy do pewnego elementu łańcucha zostanie doprowadzone pobudzenie z zewnątrz,
zostanie ona rozpropagowana w postaci fali na sąsiednie elementy poprzez sprężyny.
Uzyskiwanym w ten sposób efektem są niegasnące fale propagowane przez kolejne masy
układu. Można również założyć, że sieć jest skończona i składa się z N elementów.
W ten sposób powstaje sieć w postaci pierścienia spełniająca zależność
yn+N = yn .
(2.9)
Konstruowany przez autora robot kroczący jest sześcionogiem, dlatego dla zastosowań
związanych z generacją chodów przyjmowane jest N = 6. Widok pierścienia reprezenstującego taką sieć znajduje się na rysunku 2.10.
14
2. Sterowanie
m1
m6
m2
m5
m3
m4
Rysunek 2.10 Sześcioelementowy pierścień sieci Tody
W artykule [20] po raz pierwszy zastosowano połączenie kraty Tody z nieliniowymi
oscylatorami Rayleigha opisywane równaniem
{
ṗn = ω02 (eyn−1 −yn − eyn −yn+1 ) + (µ − p2n )pn
,
(2.10)
ẏn = pn
gdzie ω0 oraz µ to współczynniki związane z oscylatorem Rayleigha oznaczające kolejno:
ω0 — współczynnik regulujący częstość oscylacji w układzie, µ — współczynnik wpływający na kształt cyklu granicznego. Równanie to charakteryzuje również wymianę
energii w sieci, jednak uogólnia ono to zjawisko dodając elementy odpowiadające za
wytracanie i pompowanie energii. Następnie w pracy [19] zaproponowano modyfikację
kraty Tody-Rayleigha,
{
ÿn = ω02 (eyn−1 −yn − eyn −yn+1 ) + f (y˙n − p0 ) − ωR2 yn
(2.11)
.
f (x) = (µ − x2 )x
Dodanie ujemnego sprzężenia zwrotnego w postaci członu ωR2 yn ma na celu stabilizację
oraz zapobieganie dryftowi niektórych rozwiązań cyklicznych. Dodatkowo uwzględniono przesunięcie rozwiązań w przestrzeni stanu o wartość p0 , które ma pełnić rolę
sygnału sterującego, przesuwając punkt wokół, którego tworzy się cykl graniczny. Takie podejście znacznie upraszcza przechodzenie między sąsiadującymi rozwiązaniami
cyklicznymi. Reprezentacja (2.16) umożliwia generację ruchu kolejnych chodów: pełzającego, gąsienicowego oraz trójpodporowego. Kolejne węzły kraty odpowiadają za
generację trajektorii ruchu dla odpowiednich końcówek nóg robota. Trajektoria otrzymywana z równania posiada jedynie współrzędne Y oraz Z nogi (według oznaczeń
z rysunku 2.12). Wartość współrzędnej X uznawana jest za stałą charakterystyczną
dla danego robota. Generowanie chodu zasadniczo posiada trzy fazy: fazę rozruchu,
fazę chodu właściwego oraz fazę zatrzymywania.
Faza rozruchu jest odpowiedzialna za zainicjowanie zadanego przez użytkownika
rodzaju chodu. W tym celu należy dobrać eksperymentalnie odpowiednie wartości
początkowe charakterystyczne dla tego chodu. Ważne jest, aby położyć nacisk na to,
by współrzędne osi Y w fazie rozruchu były równe zeru dla każdej z nóg. Gdy warunek
ten nie jest spełniony, występuje ”szuranie” nogi o podłoże, co powoduje niepotrzebne
straty energii oraz może powodować nienaturalny ruch robota.
2.4. Połączenie kraty i sterowania z wykorzystaniem krzywizny i prędkości
15
Faza chodu właściwego jest fazą naturalnie uzyskiwaną po rozruchu. Układ opisywany równaniem (2.16) po pewnym czasie stabilizuje swoje rozwiązanie oscylując
z daną częstotliwością, co odpowiada generacji trajektorii chodu właściwego dla wszystkich nóg robota.
Ważnym zagadnieniem jest również odpowiedni sposób zatrzymywania się maszyny
kroczącej. Ponieważ, jej zadaniem jest naśladowanie ruchu insektów, sposób poruszania
się jej powinien być płynny. Dlatego dynamika oscylatorów na czas fazy zatrzymania
jest zamieniana na równania oscylatorów harmonicznych tłumionych powodujące wytłumienie oscylacji do wartości końcowych, czyli płynne przesunięcie końcówek nóg
robota sześcionożnego do zadanej pozycji bazowej. Stąd w chwili rozpoczęcia fazy
zatrzymania równanie (2.16) przyjmuje postać
2
yn − Cn .
ÿn = −µy˙n − ωosc
(2.12)
Zaletą takiego rozwiązania jest możliwość zmiany zadanej pozycji bazowej Cn na jakiej robot ma się zatrzymać. Wykorzystując taką możliwość można w sposób płynny
przechodzić między różnymi sposobami chodu maszyny (np. gładkie przejście między
ruchem trójpodporowym, a czteropodporowym). Aby dokonać takiego przejścia należy
zrealizować następujące fazy:
• robot jest w fazie chodu właściwego, generator wykorzystuje dynamikę kraty
Tody-Rayleigha, rozwiązanie cykliczne odpowiada chodowi X,
• zadana jest zmiana trybu chodu z X na Y,
• wybierany jest odpowiedni punkt równowagi Cn dla chodu Y oraz realizowana
jest dynamika oscylatora tłumionego,
• gdy wartości zmiennych stanu yn osiągną zadane położenia Cn następuje przełączenie pracy na kratę Tody-Rayleigha ze stanu Cn ,
• układ zaczyna wykonywać oscylacje i po płynnym rozruchu rozpoczyna chód Y.
2.4 Połączenie kraty i sterowania z wykorzystaniem
krzywizny i prędkości
Sterowanie z wykorzystaniem krzywizny i prędkości należy w intuicyjny sposób połączyć z generatorem chodu wykorzystującym kratę Tody-Rayleigha. Krata TodyRayleigha generuje ruch jedynie w kierunku współrzędnych Y oraz Z, dlatego głównym
zadaniem połączenia sterowania jest umożliwienie zmiany pozycji nogi również wzdłuż
osi X.
Postanowiono rozwiązać ten problem dodając współczynniki pxi (t) oraz pyi (t) dla
i-tej końcówki nogi. Ich zadaniem jest modyfikacja wartości otrzymywanych z kraty
Tody-Rayleigha w taki sposób, by środek robota poruszał się zgodnie ze sterowaniem
wykorzystującym prędkość i krzywiznę. W ten sposób współrzędne (xwi (t) oraz ywi (t)
i-tej nogi w trakcie ruchu dane są równaniem
{
xwi (t) = pxi (t)Ytri (t)
(2.13)
,
ywi (t) = pyi (t)Ytri (t)
16
2. Sterowanie
gdzie Ytri (t) to współrzędna Y generowana przez kratę Tody-Rayleigha. Określenie
wartości współczynników pxi (t) oraz pyi (t) jest związane ze zmianą pozycji końca każdej z nóg względem osi X oraz Y w trakcie wykonywania pojedynczego kroku. W tym
celu należy określić pozycję początkową oraz końcową i-tej nogi w trakcie okresu jednego kroku. Pozycja początkowa jest znana, natomiast do obliczenia pozycji końcowej
niezbędne jest wyznaczenie kąta γ(t) widocznego na rysunku 2.9
γ(t) = atan2(yi , xi ∓ Ri (t)),
(2.14)
gdzie Ri (t) to promień ruchu i-tej nogi dany równaniem (2.4), natomiast (xi , yi ) to
współrzędne końca i-tej nogi robota w trakcie spoczynku. Znak przy promieniu określa,
w którą stronę ma skręcać robot, dodatni gdy skręt wykonywany jest w prawo, ujemny
gdy w przeciwną stronę. Aby obliczyć pozycję końcową nogi należy zwiększyć kąt
γ(t) o kąt przebyty w danej chwili równy co do wartości ω(t) (2.3).Przy danym kącie
określenie końcowych współrzędnych (xik (t), yik (t)) dane jest wzorem
{
xik (t) = Ri (t) cos(γ(t) + ω(t))
.
(2.15)
yik (t) = Ri (t) sin(γ(t) + ω(t))
Następnie wyznaczamy współczynniki pxi (t) oraz pyi (t) jako
{
pxi (t) = xik (t) − xi
.
pyi (t) = yik (t) − yi
(2.16)
Niestety tak uzyskane współczynniki mogą powodować, że generowana trajektoria będzie niemożliwa do realizacji przez rzeczywisty obiekt. Zwiększanie wartości krzywizny
powoduje zwiększanie również współczynników pxi (t) oraz pyi (t) dla stałej prędkości.
Dlatego niezbędne jest ograniczenie ich wartości. Mając ustaloną stałą pmax maksymalnego dystansu dla osi Y oraz X możliwego do pokonania w jednym ruchu należy
sprawdzić warunek
max|pi (t)| ≤ pmax ,
i
(2.17)
gdzie pi to współrzędne pxi (t) oraz pyi (t) i-tej nogi. Gdy warunek jest spełniony współczynniki pozostają bez zmian. W przeciwnym przypadku należy dokonać modyfikacji
wartości współczynników
{ k
pxi (t) = pxi (t)pmax (max|pi (t)|)−1
i
,
(2.18)
pkyi (t) = pyi (t)pmax (max|pi (t)|)−1
i
gdzie pkxi (t) i pkyi (t) to ostateczne wartości współczynników.
2.5
Proste i odwrotne zadanie kinematyki
Do zadawania odpowiedniej pozycji końca nogi robota niezbędne jest rozwiązanie prostego i odwrotnego zadania kinematyki dla kończyn. Zadanie proste kinematyki pozwala na wyznaczenie położenia końca nogi robota, jako funkcji zależności od nastaw
2.5. Proste i odwrotne zadanie kinematyki
17
poszczególnych przegubów kończyny. Jest ono wykorzystywane głównie do doboru odpowiednich pozycji bazowych ustawienia robota. Do realizacji chodu przydatne jest
również rozwiązanie odwrotnego zadania kinematyki, którego celem jest określenie odpowiednich nastaw przegubów nogi dla zadanego położenia jej końca.
Projektując i budując nogi robota kroczącego w sposób naturalny wykorzystywane
są przeguby obrotowe, ponieważ symulują one ruchy stawów organizmów biologicznych.
Kolejnym argumentem za takim wyborem są względy praktyczne: tego typu przeguby
redukują koszty i pozwalają na prostszą budowę mechaniczną. Jednak z tego powodu
proste i odwrotne zadanie kinematyki wymaga wyliczania funkcji trygonometrycznych,
co zwłaszcza w przypadku mniejszych mikrokontrolerów może być poważnym problemem ze względu na narzut obliczeniowy. Roboty kroczące zazwyczaj mają być systemami autonomicznymi, co powoduje, że z jednej strony należy dążyć do zastosowania
jak najprostszych i możliwie energooszczędnych rozwiązań elektronicznych, a z drugiej
strony należy pamiętać o zapewnieniu odpowiednio dużej mocy obliczeniowej dla projektowanego algorytmu. Dlatego należy możliwie zoptymalizować rozwiązanie odwrotnego zadania kinematyki względem liczby operacji trygonometrycznych wykorzystywanych w trakcie obliczeń. Ponadto podczas obliczania współrzędnych nogi robota na
podstawie położenia końcówki można natrafić na rozwiązania niejednoznaczne. Oznacza to, że zadane położenie końcówki nogi robota w przestrzeni kartezjańskiej można
uzyskać przez różne nastawy na poszczególnych przegubach kończyny. W tej pracy
większość niejednoznaczności została wyeliminowana ze względu na fizyczne ograniczenia ruchu przegubów.
Ponieważ, wszystkie nogi robota posiadają identyczną konstrukcję, obliczenia można
wykonać dla jednej nogi względem układu współrzędnych związanego z punktem jej
zamocowania, następnie w razie potrzeby dokonywać przekształcenia do współrzędnych związanych z środkiem masy robota. Na rysunku 2.11 przedstawiono układy
współrzędnych związane z poszczególnymi kończynami Xi Yi Zi oraz środkiem maszyny
X0 Y0 Z0 . Transformacje między układem nadrzędnym, a układami lokalnymi nóg mają
postać
Ti0 = T r(X, xi )T r(Y, yi )Rot(Z, αi ),
(2.19)
gdzie xi , yi to przesunięcie układu i-tej nogi względem układu nadrzędnego, natomiast
{
π
dla nóg 1, 2, 3
αi =
.
(2.20)
0
dla nóg 4, 5, 6
Macierz tego przekształcenia dana jest wzorem

cos αi − sin αi

sin αi cos αi
Ti0 = 
 0
0
0
0
2.5.1

0 xi
0 yi 
.
1 0
0 1
(2.21)
Proste zadanie kinematyki
Nogę wykonanej konstrukcji robota można przedstawić jako manipulator o trzech stopniach swobody z trzema przegubami rotacyjnymi. Rysunek 2.12 pokazuje nogą w tak
18
2. Sterowanie
Y1
X4
Y4
X1
Y0
Y2
X5
X2
X0
Y5
Y3
X6
X3
Y6
Rysunek 2.11 Robot z zaznaczonymi poszczególnymi układami współrzędnych
2.5. Proste i odwrotne zadanie kinematyki
Z0
19
Z2
Y0
X2
q3
Z1
q2
q1
X1
Z3
X0
X3
Rysunek 2.12 Kinematyka nogi robota
zwanej pozycji bazowej. Jest to pozycja wyjściowa, przyjmowana gdy robot stoi. Od
tej pozycji rozpoczyna się chód i w tej pozycji powinien się on zakończyć. Przyjęte
wartości położenia kątowego w poszczególnych przegubach w pozycji bazowej nogi wynoszą odpowiednio:
q1 = 0,
π
q2 = 12
,
7π
q3 = 12 .
(2.22)
Kinematyka pojedynczej nogi jest opisana jako transformacja T03 pomiędzy układem związanym z punktem zamocowania kończyny, a układem końca nogi. Poszczególne transformację między kolejnymi układami uzyskiwane są przy pomocy algorytmu
Denavita-Hartenberga [37] i opisane są zależnościami
T01 = Rot(Z, q1 )T r(X, l1 )Rot(X, − π2 ),
T12 = Rot(Z, q2 )T r(X, l2 ),
T23 = Rot(Z, q3 )T r(X, l3 ).
(2.23)
Stąd, na podstawie wzoru (2.23), wyliczamy przekształcenie T03 jako


c1 c23 −c1 s23 −s1 c1 (c23 l3 + c2 l2 + l1 )
s1 c23 −s1 s23 c1 s1 (c23 l3 + c2 l2 + l1 )
,
T03 = 
−s23 −c23
0
−(s23 l3 + s2 l2 ) 
0
0
0
1
(2.24)
gdzie ci = cos qi , si = sin qi , cij = cos(qi + qj ), sij = sin(qi + qj ). Elementy ostatniej
kolumny otrzymanej macierzy określają współrzędne (px , py , pz )T końca nogi maszyny
20
2. Sterowanie
Z
q3
α
l2
l3
l1
q2
β
X
γ
pz
r
d
Rysunek 2.13 Rzut nogi na płaszczyznę 0XZ dla q1 = 0
względem układu współrzędnych związanego z miejscem jej zamocowania:

 px = c1 (c23 l3 + c2 l2 + l1 )
py = s1 (c23 l3 + c2 l2 + l1 ) .

pz = −(s23 l3 + s2 l2 )
(2.25)
Długości członów w rzeczywistym obiekcie wynoszą: l1 = 43.5mm, l2 = 70.0mm,
l3 = 144.5mm, zaś zakresy ruchu przegubów ograniczono do q1 ∈ (− π2 , π2 ), q2 ∈ (− π2 , π2 )
oraz q3 ∈ (0, π).
2.5.2
Odwrotne zadanie kinematyki
Do obliczenia odwrotnego zadania kinematyki dla nogi robota postanowiono wykorzystać metodę algebraiczną, opisaną w [42]. Wartość kąta pierwszego przegubu rotacyjnego q1 można w prosty sposób obliczyć z zależności
q1 = atan2(py , px )
(2.26)
Korzystając z rysunku
√ 2.13 łatwo zauważyć, że długość nogi zrzutowanej na płaszczyznę 0XY wynosi p2x + p2y . Korzystając z twierdzenia cosinusów można dzięki temu
obliczyć kąt α, dla którego prawdziwa jest zależność
l22 + l32 − 2l2 l3 cos α = r2 + p2z ,
(2.27)
gdzie r to
r=
dla d =
√
√
d2 + p2z ,
(2.28)
p2x + p2y − l1 , co po uproszczeniu można zapisać jako
cos α =
l22 + l32 − d2 − p2z
.
2l2 l3
(2.29)
2.6. Nawigacja w nierównym terenie
21
Z rysunku 2.13 można wywnioskować, iż kąt trzeciego przegubu q3 jest równy q3 = π−α,
stąd można stwierdzić, iż
cos q3 =
d2 + p2z − l22 − l32
.
2l2 l3
(2.30)
Odpowiednią wartość kąta q2 można wyznaczyć z faktu, iż
q2 = β − γ.
(2.31)
Kąt β można uzyskać z twierdzenia cosinusów w analogiczny sposób, jak kąt α. Po
przeprowadzeniu obliczeń uzyskujemy:
l2 +r2 −l2
cos β = 2 2l2 r 3 ,
√
sin β = 1 − cos2 β.
(2.32)
Wartość kąta γ można wyliczyć, jako nachylenie prostej przechodzącej przez odcinek
r do osi 0X pomnożony przez −1. W ten sposób otrzymujemy wzór na kąt q2 w postaci
q2 = atan2(pz , d) + atan2(sin β, cos β).
(2.33)
2.6 Nawigacja w nierównym terenie
Ponieważ jednym z ważniejszych zadań stawianych przed robotem jest lokomocja w zróżnicowanym otoczeniu należy stworzyć odpowiedni sposób reagowania na nierówności
występujące w terenie. Do tego celu wykorzystywane są informacje z czujników dotykowych przymocowanych na końcach nóg robota. Z tego powodu zdefiniowano współczynniki λi oznaczające stan sensora znajdującego się na i-tej kończynie maszyny. Gdy
λi jest równa zero oznacza to, że dana noga nie ma kontaktu z podłożem. Wartość
parametrów λi równa 1 informuje o kontakcie i-tej nogi z podłożem.
Sterowanie w nierównym terenie jest złożonym procesem i nie zawsze można przewidzieć wszystkie możliwe sytuacje, które mogą zaistnieć w przestrzeni pracy robota.
Z tego powodu autor skupił się na możliwie prostym obliczeniowo rozwiązaniu problemu
zapewniającym robotowi możliwość poruszania się w wielu różnych środowiskach.
Mając zadaną trajektorię poruszania się końca i-tej nogi robota, należy modyfikować ją w taki sposób, by w momencie zaistnienia kontaktu z podłożem, dalszy ruch
wzdłuż współrzędnej Z obniżający pozycję nogi został zatrzymany. Do wykonania takiego rozwiązania modyfikowana jest wartość pzi (t) współrzędnej Z ustawianej na i-tej
nodze poprzez wzór
{
Ztri (t)
gdy λi = 0
(2.34)
pzi (t) =
,
max(Ztri (t), pzi (t − 1)) gdy λi = 1
gdzie Ztri (t) to współrzędna Z uzyskana z kraty Tody-Rayleigha, natomiast pzi (t − 1)
oznacza wartość pzi w poprzednim kwancie czasu. Takie rozwiązanie powoduje, że
robot przestaje naciskać na podłoże, gdy już na nim stoi, natomiast podnosi nogę gdy
należy to zrobić.
22
2. Sterowanie
Oprócz takiej modyfikacji podczas chodzenia, niezbędne jest zatrzymywanie robota
gdy przeszkoda, która pokonać ma maszyna jest zbyt głęboka. Należy zatrzymać
robota gdy minimum dla osi Z podczas cyklu chodu pzi (t) = pzmin robot nie natrafia
na podłoże λi = 0. W tym momencie wiadomo, iż robot opuszczając maksymalnie
nogę nie natrafia na stabilny punkt podparcia.
Rozwiązanie zaproponowane w równaniu (2.35) posiada pewną wadę. Gdy robot
natrafia na przeszkodę blisko maksymalnej pozycji wychylenia w osi Z, nie może podnieść nogi wystarczająco wysoko by zrobić kolejny krok. Dlatego dodano następujący
warunek

 max(Ztri (t), pzi (t − 1)) gdy λi = 1, Ztri (t) ≤ pzmax − 1[cm]
Ztri (t)
gdy λi = 1, Ztri (t) > pzmax − 1[cm] ,
pzi (t) =
(2.35)

Ztri (t)
gdy λi = 0,
umożliwiający dalsze kroczenie w takiej sytuacji.
Rozdział 3
Konstrukcja robota
Do przetestowania metod sterowania robota kroczącego w rzeczywistych warunkach
niezbędne jest przygotowanie konstrukcji robota będącej w stanie wykonywać konieczne
obliczenia oraz realizować zaimplementowane algorytmy sterowania. W tym celu powstała maszyna sześcionożna, której konstrukcja opisana jest w tym rozdziale. Poniżej
w sekcji 3.1 przedstawiono opis konstrukcji mechanicznej robota z wyszczególnionymi
założeniami dotyczącymi korpusu, nóg oraz przymocowania sensorów. Kolejna sekcja 3.2 poświęcona jest rozwiązaniom elektronicznym wykorzystanym w maszynie, opisuje wybrane układy elektryczne, zasilanie i podział na moduły.
3.1 Konstrukcja mechaniczna
Jednym z najbardziej podstawowych zadań podczas tworzenia maszyny kroczącej jest
wypracowanie przemyślanej konstrukcji umożliwiającej robotowi realizację zadań mu
przydzielanych. Dobrą metodą projektowania mechanizmów jest obserwacja rozwiązań
wypróbowanych w analogicznych warunkach przez naturę oraz próba ich naśladowania.
Autor pracy postanowił wzorować się na na żuku tygrysim, widocznym na rysunku 3.1.
Zaprojektowane elementy przypominają kształtem oraz proporcjami budowę żuka. Całość konstrukcji została zaprojektowana przy wykorzystaniu oprogramowania Autodesk
Inventor 2013 [3]. Złożony projekt oraz efekt końcowy realizacji widoczne są na rysunkach 3.10 i 3.11. Pliki z projektami poszczególnych elementów oraz złożeniami
konstrukcji dostępne są w dodatku A.
3.1.1
Korpus robota
Korpusy wielonożnych robotów, jak i insektów, posiadają odmienną budowę, zależną od
warunków, w których funkcjonują. Gdy przestrzeń pracy jest wypełniona przeszkodami
ich korpus tworzony jest na planie okręgu. Takie rozwiązanie zapewnia dużą zwrotność,
kosztem prędkości poruszania się. Gdy teren jest dość równy, insekty mogą poruszać
się szybciej, dlatego ich korpusy tworzone są na planie prostokątów, co zapewnia możliwość szybkiego przemieszczania się w wyznaczonym kierunku. Wadą tego rozwiązania
jest mała zwrotność. Żuki tygrysie funkcjonują w otoczeniu zróżnicowanym, przez co
ich przystosowanie jest kompromisem między dwoma poprzednimi strategiami. Korpus
tego insekta zbudowany jest na planie owalu, przez co umożliwia mu większą szybkość
24
3. Konstrukcja robota
Rysunek 3.1 Cicindela formosa generosa[17]
poruszania się, niż u stworzeń z tułowiem opartym o koło. Co więcej, takie rozwiązanie
daje możliwość efektywniejszego manewrowania, niż u insektów z korpusami na planie
prostokąta. Korpus robota, widoczny na rysunku 3.2, musi nie tylko zapewniać pożądane rozłożenie nóg, ale także w jak najmniejszym stopniu ograniczać ich możliwość
poruszania się. W tym celu podstawy pomiędzy kolejnymi kończynami są wklęsłe.
Do wykonania podstaw wykorzystano szkło akrylowe (pleksi), ponieważ przy zachowaniu odpowiedniej sztywności jest ono lekkie, a ponadto jest izolatorem, co zapobiega
przed przypadkowymi zwarciami. Dolna podstawa podtrzymuje cały ciężar nóg oraz
elektroniki, dlatego wykorzystano pleksi o grubości 5mm. Głównym zadaniem górnej
części jest zapewnienie sztywności w osiach obrotu nóg robota oraz zamknięcie bryły
konstrukcji. Do tego zadania wystarczy odchudzony materiał o przekroju 3mm. Podstawy między sobą połączone są kołkami dystansowymi.
3.1.2
Projekt kończyny
Jednym z ważniejszych elementów części mechanicznej robota są jego nogi. Główne
ograniczenie w projekcie nogi maszyny wprowadzają zastosowane serwomechanizmy.
Muszą one być wstanie działać poprawnie pod obciążeniem całej konstrukcji. Wymagany moment serw determinuje ich rozmiar i pośrednio projekt całej nogi. Standardowe serwomechanizmy (rysunek 3.3(a)) mają jedną oś napędu wyprowadzoną z swojej obudowy. Konstrukcja nogi posiadająca połączenie z taką osią napędu nie jest
wystarczająco sztywna do poprawnego funkcjonowania. Przez to projektant musi zapewnić sztuczną oś z drugiej strony silnika, by poprawić stabilność konstrukcji. Samodzielne dodanie takiej osi jest trudne, dlatego autor postanowił zastosować silniki
Hitec HSR8498HB [38] (rysunek 3.3(b)) posiadające obudowy z sztuczną osią po drugiej
stronie mechanizmu. Rozwiązanie takie znacznie upraszcza konstrukcję oraz sprawia,
3.1. Konstrukcja mechaniczna
25
(a) Widok 3D połączonych podstaw
(b) Widok z góry
Rysunek 3.2 Korpus robota
(a) Standardowe serwo [13]
(b) Serwo Hitec HSR8498HB [38]
Rysunek 3.3 Porównanie standardowych i robotycznych serwomechanizmów
że konstrukcja jest symetryczna — do obu stron serwa przymocowane są identyczne
orczyki — przez co projekt wymaga mniej różnych elementów.
Zaprojektowane kończyny podobnie jak u żuka tygrysiego powinny posiadać trzy
stopnie swobody (rysunek 3.4). Długość odcinka biodrowego (coxa), podobnie jak
u żuków tygrysich powinna być niewielka. Udo (femur) powinno być około dwukrotnie krótsze od połączonych piszczelu (tibia) i stawu skokowego (tarsus). Powierzchnia
końcówki nogi powinna być możliwie mała, jednocześnie zapewniając miejsce dla mocowania czujnika nacisku osłoniętego gumową oprawą w celu ochrony sensora oraz
zwiększenia tarcia. Podobne przystosowanie jest obserwowalne u żuków. Końcówki
odnóży zaopatrzone są w szpony zwiększające przyczepność insektów. Materiałem wybranym do wykonania nogi jest blacha aluminiowa o grubości 1,5mm. Jest ona bardzo
lekka oraz zapewnia odpowiednią sztywność. Kolejnym argumentem przemawiającym
na korzyść tego wyboru jest prosty sposób kształtowania materiału — wykonanie nacięć na linii gięcia umożliwia otrzymywanie odpowiednich zagięć przy użyciu imadła.
Model nogi oraz efekt końcowy widoczne są na rysunkach 3.5 i 3.6.
26
3. Konstrukcja robota
Rysunek 3.4 Jedno z odnóż Cicindela formosa generosa[17] z zaznaczonymi odcinkami
Rysunek 3.5 Projekt nogi robota w Autodesk Inventor 2013
3.1. Konstrukcja mechaniczna
27
Rysunek 3.6 Rzeczywista realizacja nogi maszyny kroczącej
3.1.3
Sensory
Każdy robot autonomiczny powinien posiadać sensory, aby móc rozpoznawać otoczenie.
Wykonana konstrukcja została zaopatrzona w szereg sensorów umożliwiających odbiór
informacji z otoczenia. Poniżej opisano poszczególne czujniki umieszczone na robocie
oraz sposób ich przymocowania do konstrukcji.
Czujniki nacisku
Jedną z najbardziej podstawowych informacji, które robot poruszający się w nierównym terenie powinien posiadać, to wiedza czy noga podczas stawiania dotyka podłoża.
Do uzyskiwania tych informacji robot posługuje się zamontowanymi na końcówkach
nóg przyciskami rozwiernymi PBS-10B [14]. Sposób podłączenia czujników widoczny
jest na rysunku 3.7. Sygnał otrzymywany z czujników zmienia wartość już przy ich
delikatnym wciśnięciu, przez co układ sterowania ma czas na reakcję.
Kamera oraz Dalmierz IR
Praktycznie każde stworzenie posiada głowę wyposażoną w oczy — system wizyjny.
Analogicznie jest w przypadku żuka tygrysiego. Aby upodobnić konstrukcję robota
oraz wyposażyć go w możliwość pobierania informacji z otoczenia poprzez system wizyjny stworzono moduł widoczny na rysunkach 3.8(a) i 3.8(b). Wyposażony jest on
w dwa serwomechanizmy typu mikro TowerPro SG-90 [31]. Dwa stopnie swobody
umożliwiają obrót układu względem osi X oraz Z w zakresach ±45o . Moduł kamery
(LinkSprite JPEG Color Camera [15]) i dalmierz IR (Sharp GP2Y0A21YKOF [32])
przymocowane są do serw za pomocą elementów wykonanych z 1,5mm grubości blachy
aluminiowej. Z identycznego materiału wykonano połączenie między orczykiem serwa
przymocowanego do podstawy a silnikiem podtrzymującym resztę układu głowy.
28
3. Konstrukcja robota
Rysunek 3.7 Sposób podłączenia przycisków rozwiernych
(a) Projekt w Autodesk Inventor 2013
(b) Rzeczywista realizacja
Rysunek 3.8 Moduł kamery oraz dalmierza
3.2. Układy elektroniczne
29
Rysunek 3.9 Sposób przymocowania modułu MinIMU-9
Moduł odczytu orientacji
Ważną informacją dla robota jest jego orientacja w stosunku do wektora układu odniesienia ziemi. Informacje, czy maszyna porusza się po równi pochyłej, w nierównym
terenie czy też powierzchnia jest płaska, mają duże znaczenie dla sposobu sterowania
robotem. W celu zdobywania wiedzy na temat własnej orientacji maszyna wyposażona jest w moduł MinIMU-9 [29], zawierający czujniki: akcelerometr, żyroskop oraz
magnetometr. Moduł, widoczny na rysunku 3.9, przymocowany jest na środku górnej
podstawy korpusu robota. Wybrano to miejsce do mocowania układów, aby zwiększyć odległość modułu od silników, które mogą zakłócać jego pracę. Ponadto moduł
ustawiony jest na gąbce z tworzywa sztucznego, znacznie zmniejszającej jego drgania
w trakcie ruchu, co minimalizuje błędy związane z tym zjawiskiem.
Odczyt pozycji serwomechanizmów
Sprzężenie zwrotne od położenia zadanego serwomechanizmom jest jednym z najbardziej podstawowych wymagań przy implementowaniu algorytmów sterowania. Wykorzystane w projekcie silniki [38] posiadają możliwość odczytu pomiaru wartości położenia serwomechanizmów poprzez specjalny protokół, dzięki czemu w projekcie nie
uwzględniano dodatkowych sensorów związanych z odczytem pozycji silników.
3.2 Układy elektroniczne
Konstrukcja mechaniczna robota jest bezużyteczna bez odpowiednich układów elektronicznych umożliwiających zasilanie oraz sterowanie maszyną. Zastosowane w robocie
rozwiązania elektroniczne zostały zgrupowane w dwóch oddzielnych układach: pierwszym — zawierającym mikrokontroler oraz zapewniającym odpowiednie wyjścia i wejścia do sterowania, oprogramowywania układu oraz przesyłania informacji, drugim —
odpowiedzialnym za zasilanie układów, kontrolę poziomów sygnałów i komunikację
3. Konstrukcja robota
30
Rysunek 3.10 Model robota w Autodesk Inventor 2013
31
3.2. Układy elektroniczne
Rysunek 3.11 Rzeczywista realizacja konstrukcji projektu
32
3. Konstrukcja robota
Rysunek 3.12 Schemat zasilania pojedynczej nogi robota
z serwomechanizmami. Schematy elektroniczne oraz widoki płytek PCB zaprojektowanych w ramach projektu zebrane zostały w dodatku B. Poniżej opisano rozwiązania
elektroniczne zawierające system zasilania, kontrolę serwomechanizmów, podział układów na odpowiednie moduły oraz połączenia między nimi.
3.2.1
Zasilanie
Do zasilania całej konstrukcji robota wykorzystywana jest bateria litowo-polimerowa
o napięciu 7, 4V , pojemności 3, 2Ah i maksymalnym prądzie rozładowania 20C (64A).
Serwomechanizmy wykorzystane w projekcie [38] wymagają napięcia zasilania 6V oraz
mogą pobierać prąd do 0, 5A. Dlatego w celu poprawnego ich funkcjonowania autor
postanowił pogrupować je po 3 (każda noga oddzielnie) oraz zasilać je poprzez osobne
dla każdej grupy stabilizatory MIC29502 [22]. Do ustawienia odpowiedniego napięcia
wykorzystano dzielnik napięcia złożony z rezystorów 100Ω i 390Ω. Ponieważ zastosowane stabilizatory są typu low-drop1 , baterię zasilającą robota można przeładowywać
do napięcia 8, 4V oraz rozładowywać do napięcia 7V , co przy poborze prądu serw pozwala na pracę ciągłą całego układu przez około 30 — 35 minut. Układ zasilania dla
pojedynczej nogi widoczny jest na rysunku 3.12.
Oprócz zasilania silników w nogach robota, niezbędne jest zapewnienie poprawnego
zasilania pozostałych układów robota. Napięcie 5V potrzebne do zasilania mikro serw,
dalmierza IR oraz modułu kamery uzyskiwane jest przy pomocy stabilizatora low-drop
LM1085R-5.0 [11]. Natomiast układ mikrokontrolera zasilany jest napięciem 3, 3V
wykorzystując LM2937IMP-3.3.
3.2.2
Komunikacja MCU-Serwo
Standardowe silniki mają możliwość sterowania pozycją za pomocą sygnału PWM
o okresie 20ms i szerokości 1 − 2ms. Oprócz standardowego sterowania serwomechanizmy użyte w nogach robota posiadają własny protokół HMI (opisany dokładniej w rozdziale 4). Protokół ten umożliwia dwustronną komunikację między serwem
a mikrokontrolerem, jednak wymaga specjalnego podłączenia widocznego na schemacie
z rysunku 3.13. Serwa wykorzystywane w module kamery i dalmierza są standardowe
— podłączone są poprzez translator poziomów ST2378E [35] do wyjść mikrokontrolera.
1
funkcjonujące poprawnie także przy małej różnicy pomiędzy napięciem wyjściowym a wejściowym
3.2. Układy elektroniczne
33
Rysunek 3.13 Schemat komunikacji między serwem a mikrokontrolerem
3.2.3
Moduły Bluetooth i układ kamery
W projekcie wykorzystywane są dwa moduły bluetooth. Pierwszy z nich niezbędny jest
do nawiązywania komunikacji między aplikacją komputerową, a jednostką na robocie.
Połączenie między modułem KAmodBTM222 [28] a mikrokontrolerem jest wykonane
poprzez jedno złącze 4x1 z sygnałami: GND, 3, 3V , TX (transmisja UART) oraz RX
(odbiór UART). Drugi moduł jest całkowicie niezależny od systemu na maszynie i jego
zadaniem jest przesyłanie obrazu z kamery do komputera. Zdecydowano się na takie rozwiązanie w celu odciążenia jednostki centralnej oraz umożliwienia przyszłego
rozwoju systemu wizyjnego, z większymi możliwościami obliczeniowymi na komputerze. Układ kamery jest zasilany napięciem 5V . Połączenie modułu bluetooth i układu
kamery realizowane jest przez transmisję UART.
3.2.4
Mikrokontroler oraz pozostałe układy
Do projektu wykorzystano mikrokontroler STM32F407VGT6 [36]. Wybór ten związany
jest z 32-bitową architekturą jednostki oraz sprzętowym wsparciem obliczeń zmiennoprzecinkowych pojedynczej precyzji niezbędnym przy tego typu projekcie. Schemat
poprawnego podłączenia procesora do układu pokazano na rysunku 3.14. Procesor
taktowany jest zewnętrznym kwarcem o częstotliwości 8M Hz. W celu umożliwienia
zaawansowanego programowania oraz debugowania kodu do układu dodano złącze 6x1
pozwalająca na łączenie modułu z programatorem na płytce testowej STM32F4 Discovery Board [34]. Dzięki takiemu rozwiązaniu można wykorzystywać SWD do prac
testowych na mikrokontrolerze.
34
3. Konstrukcja robota
Rysunek 3.14 Schemat podłączenia mikrokontrolera STM32F407VGT6
Dalmierz IR oraz napięcie z baterii podłączone są do mikrokontrolera poprzez dzielniki napięcia, tak by napięcia otrzymywane podczas pomiarów były mniejsze od napięcia odniesienia. Ponadto układ wyposażono w 5 diod LED służących do wyświetlania
informacji dla użytkownika. Diody łączone są z wyjściami jednostki za pomocą złącza
2x5, które umożliwia wykorzystanie tych pinów również do innych celów lub poprzez
zworki do łączenia z wcześniej wymienionymi diodami. Kolejnym ważnym elementem
układu jest złącze do komunikacji po magistrali I 2 C z modułem żyroskopu, akcelerometru i magnetometru. Sygnały przesyłane przez złącze 4x1 to: SDA, SCL, 3, 3V oraz
GND. Dodatkowo na płytce mikrokontrolera zamieszczono układ FT232RL [7] połączony ze złączem micro USB 2.0A żeńskim. Takie rozwiązanie umożliwia przesyłanie
dodatkowych danych do komputera podczas testów jednostki.
Rozdział 4
Oprogramowanie
Szkielet robota nie jest w stanie poruszać się samodzielnie bez odpowiedniego oprogramowania. Ważne jest, by zastosowana architektura oprogramowania była odpowiednio
przemyślana, tak by stworzone rozwiązania zapewniały nie tylko pełną realizację powierzonych zadań, ale również były łatwo rozszerzalne. Oprogramowanie robota jest
podzielone na dwie oddzielne aplikacje: aplikację użytkownika oraz oprogramowanie
systemu wbudowanego. Celem aplikacji użytkownika, opisanej dokładniej w podrozdziale 4.1, jest zadawanie sterowania maszynie kroczącej z wykorzystaniem krzywizny i prędkości. Oprogramowanie osadzone na mikrokontrolerze, opisane w podrozdziale 4.3, jest odpowiedzialne za obsługę urządzeń peryferyjnych robota oraz realizację zadań związanych z chodem. Dodatkowo, w podrozdziale 4.2 opisano sposób
konfiguracji serwomechanizmów i modułu Bluetooth w odpowiednich trybach pracy.
4.1 Aplikacja użytkownika
Aplikacja użytkownika ma za zadanie dostarczać prosty interfejs graficzny dla operatora robota, umożliwiający komunikację z robotem poprzez Bluetooth oraz wizualizację
danych pochodzących z czujników. Musi ona zapewniać możliwość prostego i szybkiego zadawania odpowiednich wartości do sterowania maszyny. Dodatkowo powinna
być skonstruowana w taki sposób, by dodawanie nowy funkcjonalności nie stanowiło
wyzwania.
Program wykonano przy użyciu języka C++ wykorzystując biblioteki Qt [30]. Wybór tych bibliotek związany jest z możliwością przenoszenia napisanych z ich wykorzystaniem aplikacji między różnymi systemami operacyjnymi. Do tworzenia interfejsu
graficznego użytkownika postanowiono wykorzystać system zakładek, przez co dodawanie kolejnych funkcjonalności polega na zwiększaniu liczby zakładek, dzięki czemu
gotowe elementy oprogramowania pozostają bez zmian.
Aplikacja użytkownika realizuje trzy główne zadania opisane dokładniej w kolejnych
podrozdziałach pracy. Pierwszym zadaniem jest uzyskiwanie informacji od użytkownika o sposobie poruszania się robota. Kolejne zadanie to nawiązywanie komunikacji
oraz wymiana informacji pomiędzy maszyną kroczącą a programem komputerowym.
Ostatnie zadanie to wizualizacja części danych sensorycznych uzyskiwanych przez robota. Połączenie funkcjonalności wykonujących te zadania jest realizowane przy pomocy mechanizmu rozsyłania zdarzeń jako sygnałów (signals) do gniazd (slots).
36
4. Oprogramowanie
(a) telegram
(b) potwierdzenie ack
Rysunek 4.1 Schemat ramki Profibus [5] typu telegram dla stałej długości danych
Oznaczenie Objaśnienie znaczenia
SD
Znacznik początku ramki — wartość 0xA2
DA
Adres docelowy — urządzenia, do którego wiadomość zostanie wyłana
SA
Adres nadawcy — urządzenia, z którego wysyłana jest ramka danych
FC
Suma kontrolna — obliczana jako suma danych DU modulo 256
Data
8 bajtów danych przesyłanych
FCS
Powtórzenie sumy kontrolnej
ED
Znak końca ramki — wartość 0x16
Tabela. 4.1 Oznaczenia ramki Profibus
4.1.1
Komunikacja z robotem
Komunikacja pomiędzy komputerem, a znajdującym się wewnątrz robota mikrokontrolerem, jest bezprzewodowa. Połączenie między urządzeniami realizowane jest przez
odpowiednie moduły wykorzystujące technologię Bluetooth [27]. Wymiana informacji
z punktu widzenia obu jednostek prowadzona jest poprzez interfejs szeregowy. Parametry połączenia posiadają następujące wartości:
• prędkość transmisji sygnału — 115200 bitów na sekundę,
• długość pojedyńczego słowa — 8 bitów,
• liczba bitów stopu — 1,
• brak kontroli parzystości,
• brak kontroli sprzętowej.
Wprawdzie zastosowana technologia Bluetooth zapewnia bezstratną komunikację,
jednakże możliwa jest utrata części danych podczas przesyłu pomiędzy mikrokontrolerem a modułem na robocie oraz między urządzeniem Bluetooth a jednostką centralną
komputera. Z tego powodu, do kontroli transmisji postanowiono wykorzystać pakiety
zgodne z ramką Profibus [5] dla telegramów o stałej długości. Format ramki oraz potwierdzenia odbioru (ack) można zobaczyć na rysunku 4.1, objaśnienia do oznaczeń
zamieszczone są w tabeli 4.1.
4.1. Aplikacja użytkownika
trybhtrójpodporowyh[3]
37
trybhczteropodporowyh[4]
trybhpięciopodporowyh[5]
inicjacjahpołączeniah
zhportemhszeregowym
wysyłaniehramkih[Enter]
trybhkomunikacjihciągłej
ustawieniehprędkościh
[W]h-hzwiększeniehprędkościh
[S]h-hzmniejszeniehprędkości
h
ustawieniehkrzywizny
[D]h-hzwiększeniehkrzywizny
[A]h-hzmniejszeniehkrzywizny
ustawieniehprędkościh
serwomechanizmówh[0-100F]h
[R]h-hzwiększenieh
[F]h-hredukcjah
Rysunek 4.2 Interfejs użytkownika do sterowania robotem
4.1.2
Interfejs użytkownika
Zadawanie sterowania maszynie jest niezbędne do jej poprawnego funkcjonowania, dlatego należy wykonać odpowiedni interfejs umożliwiający proste i szybkie zadawanie
sterowania w czasie rzeczywistym. Główny nacisk w tej części projektu położono na
intuicyjność obsługi aplikacji. Autorowi zależało na tym, by użytkownik pierwszy raz
korzystający z interfejsu był w stanie kontrolować robota. Poza sterowaniem za pomocą myszki interfejs pozwala na wykorzystanie skrótów klawiszowych analogicznych
do stosowanych powszechnie w grach komputerowych. Na rysunku 4.2 przedstawiono
panel sterowania wraz z opisem skrótów klawiaturowych wykorzystywanych do sterowania. Ustawienia umożliwiają wybór jednego z trzech trybów chodu oraz przesyłu
danych w sposób cykliczny (co okres 100 milisekund) lub zdarzeniowo (po wciśnięciu
przycisku Send albo klawisza Enter na klawiaturze). Najistotniejsze dla użytkownika
jest sterowanie krzywizną oraz prędkością. Możliwe jest to poprzez korzystanie z przycisków WSAD. Aby zwiększyć prędkości maszyny należy wcisnąć klawisz W, natomiast
zmniejszanie oraz ruch wstecz uzyskujemy poprzez klawisz S. Jednostką prędkości za, gdzie T to okres pełnego cyklu chodu. Aby robot mógł
dawaną w aplikacji jest cm
T
skręcać niezbędne jest zadanie mu odpowiedniej krzywizny. Wartość tego parametru
interpretowana jest w jednostkach m1 , jej odwrotność określa współrzędną X środka
okręgu leżącego na prostej y = 0, po którego obwodzie powinna poruszać się maszyna.
Klawisz D odpowiedzialny jest za zwiększanie krzywizny, natomiast przeciwną rolę
pełni wykorzystywanie przycisku A. Dodatkowo możliwe jest sterowanie prędkością samych serwomechanizmów użytych w projekcie. Zmiana tego parametru możliwa jest
w zakresie od 0 do 100% prędkości bazowej.
38
4. Oprogramowanie
Rysunek 4.3 Wizualizacja danych otrzymywanych z modułu MinIMU-9
4.1.3
Wizualizacja danych
Sensoryka robota pozwala na gromadzenie wielu danych dotyczących stanu robota.
Większość z nich jest istotna dla określania sposobu poruszania się robota w nierównym
terenie. Jednym z ważniejszych aspektów dotyczących tego zagadnienia jest określenie
orientacji robota względem ziemi. Informacje te uzyskiwane są z jednostki centralnej robota w postaci kwaternionów, czyli struktury algebraicznej wyprowadzonej przez
Williama Hamiltona do opisu mechaniki w przestrzeni trójwymiarowej [9]. Ponieważ
taki zapis jest abstrakcyjny, trudno wyobrazić sobie orientację robota w przestrzeni na
podstawie tego zapisu. Z tego powodu wykonano trójwymiarową kostkę (rysunek 4.3),
wizualizującą orientację przekazywaną przez robota. Do tego celu wykorzystano bibliotekę OpenGL [4] doskonale współpracującą z Qt oraz przykłady umieszczone na
stronie projektu [30].
4.2
Inicjacja dodatkowych urządzeń
Oprócz wykonania oprogramowania mikrokontrolera do obsługi systemu niezbędne jest
odpowiednie ustawienie serwomechanizmów oraz modułu Bluetooth, tak by można
wykorzystać ich cały potencjał podczas sterowania robotem kroczącym.
4.2.1
Konfiguracja serwomechanizmów
W projekcie wykorzystano serwomechanizmy firmy Hitec typu HSR8498HB [38]. Silniki
te posiadają możliwość komunikacji na kilka sposobów:
• komunikacji za pomocą sygnału PWM o okresie 20ms i wypełnieniu 1-2ms, jak
w standardowych serwomechanizmach,
• rozszerzonej komunikacji za pomocą protokołu wykorzystującego sygnał PWM,
dostępnej dla niektórych serw cyfrowych,
4.2. Inicjacja dodatkowych urządzeń
39
Rysunek 4.4 Schemat ramki i odpowiedzi dla protokołu HMI serwomechanizmów
• protokołu HMI umożliwiającego komunikację po UART ze znajdującym się wewnątrz serwomechanizmu mikrokontrolerem.
Niestety zastosowanie pierwszej z wymienionych metod komunikacji z serwami zapewnia jedynie kontrolę ich pozycji, natomiast sterowanie rozszerzonym protokołem wykorzystującym PWM nie spełnia ograniczeń czasowych nałożonych na konstrukcję —
niemożliwa jest odpowiednia kontrola robota ze sterowaniem o częstotliwości 2-3 Hz.
Z tych powodów w robocie wykorzystano protokół HMI. Jednakże zastosowanie tego
protokołu jest utrudnione z powodu braku dokumentacji producenta i konieczności bazowania na niepełnych informacjach ze źródeł niezależnych [21]. Autor pracy opierając
się na tych danych opracował prostą aplikację umożliwiającą sterowanie oraz programowanie serw.
Parametry komunikacji szeregowej są następujące:
• prędkość transmisji sygnału — 19200 bitów na sekundę,
• długość pojedyńczego słowa — 8 bitów,
• liczba bitów stopu — 2,
• brak kontroli parzystości,
• brak kontroli sprzętowej.
Każda przesyłana ramka danych składa się z siedmiu bajtów danych: początku
ramki (0x80h), komendy, dwóch bajtów parametrów, sumy kontrolnej oraz dwóch bajtów końcowych. Bajty te przyjmują wartość (0x00h) gdy są nadawane, serwomechanizm odpowiada analogiczną ramką modyfikując dwa ostatnie bajty jako odpowiedź
do systemu. Schemat ramki widoczny jest na rysunku 4.4. Suma kontrolna ramki dana
jest wzorem
Checksum = 256 − (0x80 + CM D + P 1 + P 2) mod 256,
(4.1)
gdzie CM D to numer danej komendy, a P 1 i P 2 to parametry komendy.
Aby zapewnić poprawną pracę serwomechanizmu dla wymagań robota niezbędne
jest nadanie mu odpowiedniego numeru ID, tak by każde serwo mogło być sterowane
niezależnie od reszty. W tym celu należy odczytać aktualny numer ID (domyślnie
wartość: 0), wpisać nowy wybrany numer ID oraz odczytać i nadpisać komórkę w pamięci EEPROM o adresie 44 reprezentującą sumę kontrolną. Krok ten jest niezbędny,
ponieważ sama zmiana ID nie wystarcza do zapewnienia serwu poprawnego funkcjonowania. Fragment kodu 4.1 obrazuje przykład takiej sekwencji komunikacji pozwalającej
na nadanie poprawnego adresu ID.
40
1
2
3
4
5
6
7
8
4. Oprogramowanie
SEND
: 0x80 0xE1
RECEIVE : 0x80 0xE1
SEND
: 0x80 0xE2
RECEIVE : 0x80 0xE2
SEND
: 0x80 0xE1
checksum
RECEIVE : 0x80 0xE1
SEND
: 0x80 0xE2
checksum to 0x98
RECEIVE : 0x80 0xE2
0x29
0x29
0x29
0x29
0x44
0x00
0x00
0x0A
0x0A
0x00
0x8A
0x8A
0x95
0x95
0xA6
0x00
0x00
0x00
0x03
0x00
0x00
0x03
0x00
0x03
0x00
// Get ID
// ID 0
// Set ID to 10
// ACK
// Get servo EEPROM
0x44 0x00 0xA6 0xA2 0x03 // Servo checksum A2
0x44 0x98 0x3e 0x00 0x00 // Set servo EEPROM
0x44 0x98 0x3e 0x03 0x03 // ACK
Fragment kodu 4.1 Zmiana ID serwomechanizmu
Oprócz rozróżniania serw poprzez ID niezbędne jest ustawienie odpowiedniej pozycji bazowej silnika, dzięki czemu wszystkie serwa po zadaniu jednakowego sterowania
będą osiągały identyczną pozycję. Ustawienia fabrycznie nowych serwomechanizmów
mogą nieznacznie różnić się od siebie, dlatego warto programowo skorygować pozycję, tak by minimalizować różnice między ustawieniem poszczególnych mechanizmów
w trakcie ich pracy. Pozycja początkowa w pamięci mikrokontrolera serwomechanizmu
jest zapisana w postaci liczby typu int16_t z zakresu (−1500, 1500). Adresy komórek
pamięci przechowujących te dane to 7 oraz 8. Aby poprawnie zmienić pozycję początkową należy postąpić analogicznie do ustawiania ID, odczytać stare wartości, zmienić
na nowe, odczytać sumę kontrolną oraz zmienić ją o ich różnicę. Obrazuje to fragment
kodu 4.2 dla nowej pozycji zerowej przesuniętej o 300.
1
2
3
4
5
6
7
8
9
10
11
12
SEND
: 0x80 0xE1 0x07 0x00
position
RECEIVE : 0x80 0xE1 0x07 0x00
SEND
: 0x80 0xE1 0x08 0x00
position
RECEIVE : 0x80 0xE1 0x08 0x00
SEND
: 0x80 0xE2 0x07 0x01
position to 0x01h
RECEIVE : 0x80 0xE2 0x07 0x01
SEND
: 0x80 0xE2 0x08 0x2C
position 0x2Ch
RECEIVE : 0x80 0xE2 0x08 0x2C
SEND
: 0x80 0xE1 0x44 0x00
checksum
RECEIVE : 0x80 0xE1 0x44 0x00
SEND
: 0x80 0xE2 0x44 0xCE
checksum to (0 xA2+ 0x12C) %
RECEIVE : 0x80 0xE2 0x44 0xCE
0x68 0x00 0x00 // Get higher byte of
0x68 0x00 0x03 // Higher byte 0
0x69 0x00 0x00 // Get lower byte of
0x69 0x00 0x03 // Lower byte 0
0x6A 0x00 0x00 // Set higher byte of
0x6A 0x03 0x03 // ACK
0x96 0x00 0x00 // Set lower byte of
0x06 0x03 0x03 // ACK
0xA6 0x00 0x00 // Get servo EEPROM
0xA6 0xA2 0x03 // Servo checksum A2
0x74 0x00 0x00 // Set servo EEPROM
0x100 = 0xCE
0x74 0x03 0x03 // ACK
Fragment kodu 4.2 Ustawienie pozycji bazowej serwomechanizmu
4.3. Oprogramowanie mikrokontrolera
4.2.2
41
Moduł Bluetooth
W projekcie wykorzystany został moduł KAmodBTM222 [28]. Należy go odpowiednio
skonfigurować do ustawień zgodnych z wymaganiami ramki Profibus oraz aby uprościć nawiązywanie komunikacji między urządzeniami. W tym celu podłączono moduł
do komputera poprzez port szeregowy oraz przy wykorzystaniu programu Hercules [2]
nawiązano z nim połączenie z modułem oraz dokonano inicjalizacji przy użyciu następujących komend:
• ATN=Hexapod_Mgr — ustawienie nazwy urządzenia,
• ATR1 — tryb Slave,
• ATC0 — wyłączenie sprzętowej kontroli przepływu (linii CTS/RTS),
• ATM0 — brak bitu kontroli parzystości,
• ATK0 — 1 bit stopu,
• ATP=1234 — ustawienie pinu na 1234,
• ATH1 — ustawienie trybu urządzenia jako widocznego dla innych,
• ATE0 - wyłączenie echa komend AT
• ATQ1 - wyłączenie informacji zwrotnych z modułu
• ATL9 — zmiana szybkości transmisji na 115200.
Tak skonfigurowane urządzenie przy ponownym włączeniu do prądu jest gotowe do
komunikacji z wykorzystaniem ramki Profibus.
4.3 Oprogramowanie mikrokontrolera
Oprogramowanie systemu umieszczonego na maszynie jest jednym z największych wyzwań podczas tworzenia robota kroczącego. Należy zapewnić obsługę niezbędnych
peryferiów, komunikację między robotem a otoczeniem, algorytmy związane z poruszaniem się maszyny oraz przetwarzaniem danych uzyskiwanych z sensorów. Najważniejsze w tego typu przedsięwzięciu jest zamknięcie całego oprogramowania w ramy
czasu rzeczywistego. Z tego powodu postanowiono wykorzystać system czasu rzeczywistego FreeRTOS [1].
Zdecydowano się na wybór tego systemu czasu rzeczywistego z powodu statycznej
architektury systemu i sposobu planowania procesów za pomocą strategii planowania
priorytetowego z wywłaszczaniem [23]. Co więcej system ten jest jednym z najbardziej popularnych rozwiązań, co powoduje, iż łatwo znaleźć pomoc lub rozwiazanie
napotkanych problemów. Ponadto wiele projektów tworzonych jest z myślą o systemie FreeRTOS, przez co dostępnych jest wiele bibliotek wspierających programistę
w trakcie tworzenia projektu. Posiada on wiele wbudowanych funkcji bazowych takich jak: semafory, kolejki, blokady, liczniki oraz zadania. Niezależność tego systemu
42
4. Oprogramowanie
SERVOlCONTROL
gSETlpositionlandlservoSpeed
gGETlposition
speed
UARTl(gPlservos
UARTlWg()lservos
UARTl(4g(xlservos
float[(x]lpositionINlllluintx_tlspeedINllllfloat[(x]lpositionOUT
position
llllllLEGlSENSORlTASK
gGETlinformationlwhetherllegl
lllislsetlonlthelgroundl3EXTIB
velocityylgaitylcurvature
maxDistance
minDistance
headldirection
gsendlack
floatlvelocityOUTlllllllllllllllllllfloatlcurvatureOUT
uintx_tlgaitOUT
MAINlTASK
bool[P]llegIsTouchingGround
BLUETOOTHlCOMMUNICATION
USINGlUART
greceiveldatalfromlapplication
l
orientation
HEADlCONTROL
lllllORIENTATIONlTASK
gGETldatalfromlgyroscopey
lllaccelerometerycompassl3I)CB
gcalculatelorientationlusinglAHRS
float[Q]lorientationQOUT
gdirectionlcontrol
gdistancelmeasurement
ADCldistance
measurement
PWMlgl)lservosl
control
floatlmaxDistOUTllllfloatlminDistOUTlllluint(P_t[)]lservoPosINllll
Rysunek 4.5 Schemat systemu znajdującego się na mikrokontrolerze
od mikrokontrolera umożliwia również proste łączenie kodu generowanego przez różne
programy, jak na przykład pakiet Embedded Coder z środowiska Matlab. Takie rozwiązanie daje możliwość rozwijania projektu oraz tworzenia algorytmów dla systemu
z wykorzystaniem modeli skonstruowanych w Simulink środowiska Matlab.
Stworzenie odpowiedniej architektury dla systemu jest niezbędne do poprawnego
oraz szybkiego funkcjonowania robota z wykorzystaniem systemu czasu rzeczywistego [33, 16]. Większość zadań wykonywanych w systemie jest niezależna od pozostałych
elementów systemu. Z tego powodu zostały one podzielone na zadania (tasks) systemu
stanowiące autonomiczne części udostępniające jedynie informacje w postaci zmiennych
globalnych widocznych dla pozostałych elementów systemu, które chce się do nich odwołać. Dostęp do zmiennych jest zależny od charakteru zadań. Gdy zadanie generujące
wartości danej zmiennej jest przerwaniem o wysokim priorytecie (np. zdobywanie informacji o styczności nogi z podłożem) dostęp jest wolny. Natomiast w przypadku gdy
istnieje ryzyko, iż zmienne są w tle przetwarzane (np. dane o orientacji robota), dostęp
do zmiennych może być uzyskiwany tylko z wykorzystaniem zabezpieczeń komunikacji
między wątkami w postaci mutexów lub semaforów. Schemat architektury systemu
widoczny jest na rysunku 4.5. Zmienne opisane w poszczególnych zadaniach są globalnie dostępne oraz zabezpieczone przed błędami związanymi z dostępem do nich.
Nowe zadania dodawane w przyszłości mogą z nich korzystać bez przeszkód. Zadania
związane z obsługą serwomechanizmów zostały połączone w jedną grupę, ponieważ
realizują te same zadania dla różnych silników. Obsługa głowy robota polega na ustawianiu pozycji 2 serw sterujących nią oraz odbieraniu informacji na temat maksymalnej
4.3. Oprogramowanie mikrokontrolera
43
i minimalnej odległości od czujnika w trakcie pomiarów (100 ms). W kolejnych podrozdziałach przedstawiono w bardziej szczegółowy sposób część zadań wykonywanych
przez system.
4.3.1
Komunikacja z serwomechanizmami
Jednym z głównych zadań stawianych przed systemem jest sterowanie osiemnastoma
serwomechanizmami. Serwomechanizm reaguje na komendę zmiany pozycji, podobnie
jak standardowe serwo co 20ms, dlatego należy przesyłać zadane sterowanie w tych
ramach czasowych. Sterowanie składa się z dwóch komend: zadawania położenia oraz
ustawiania prędkości serwomechanizmu. Komenda sterująca prędkością jako odpowiedź zwraca aktualną pozycję danego serwa. Aby zmieścić się w ograniczeniu czasowym, wykorzystując jeden UART, można sterować maksymalnie sześcioma silnikami.
Z tego powodu serwa pogrupowano po 6 (2 nogi) i każda grupa posiada oddzielne
sterowanie po innym kanale UART. Aby ograniczyć wykorzystywanie jednostki obliczeniowej do przesyłu danych wykorzystywany jest moduł DMA (bezpośredni dostęp
do pamięci), co umożliwia wykonywanie innych zadań w trakcie przesyłu danych. Komunikacja inicjowana jest przez wysłanie pierwszej ramki danych (pozycji pierwszego
z sześciu serwomechanizmów obsługiwanych przez dany kanał), następnie po uzyskaniu
odpowiedzi DMA wystawia przerwanie od odbioru, przekazywana jest kolejna ramka
danych (ustawienie prędkości) do bufora pamięci oraz uwalniany jest semafor inicjujący kolejne wysyłanie danych. Proces ten powtarzany jest ciągle dla kolejnych serw.
Z odpowiedzi na ramkę związaną ze sterowaniem prędkością odczytywana jest wartość
aktualnego położenia.
4.3.2
Obsługa modułu MinIMU-9 [29]
Sensoryka robota pozwala na gromadzenie wielu danych dotyczących stanu robota.
Większość z nich jest istotna dla określania sposobu poruszania się robota w nierównym
terenie. Jednym z ważniejszych aspektów dotyczących tego zagadnienia jest określenie
orientacji robota względem ziemi. Do tego celu wykorzystano moduł MinIMU-9 [29],
który pozwala uzyskać informacje na temat przyspieszenia, prędkości kątowej oraz pola
magnetycznego.
Odpowiednie ustawienie czujników oraz zapewnienie poprawnego okresowego odczytu danych jest jednym z ważniejszych zadań układu związanych z sensorami. Do
komunikacji z czujnikami wykorzystano magistralę I 2 C z ustawioną prędkością 400kHz.
Do poprawnego zainicjowania komunikacji poprzez tą magistralę należy wywołać funkcję widoczną we fragmencie kodu 4.3.
1
void init_I2C1 (void) {
2
3
4
GPIO_InitTypeDef GPIO_InitStruct ;
I2C_InitTypeDef I2C_InitStruct ;
5
6
7
8
// enable APB1 peripheral clock for I2C1
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_I2C1 , ENABLE );
RCC_APB1PeriphResetCmd ( RCC_APB1Periph_I2C1 , ENABLE );
44
4. Oprogramowanie
RCC_APB1PeriphResetCmd ( RCC_APB1Periph_I2C1 , DISABLE );
// enable clock for SCL and SDA pins
RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOB , ENABLE );
9
10
11
12
// setup SCL and SDA pins SCL on PB6 and SDA on PB7
GPIO_InitStruct . GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 ;
GPIO_InitStruct . GPIO_Mode = GPIO_Mode_AF ; // set pins to alternate
function
GPIO_InitStruct . GPIO_Speed = GPIO_Speed_100MHz ; // set GPIO speed
GPIO_InitStruct . GPIO_OType = GPIO_OType_OD ; // set output to output
drain
GPIO_InitStruct . GPIO_PuPd = GPIO_PuPd_UP ; // enable pull up
resistors
GPIO_Init (GPIOB , & GPIO_InitStruct ); // init GPIOB
13
14
15
16
17
18
19
20
// Connect I2C1 pins to AF
GPIO_PinAFConfig (GPIOB , GPIO_PinSource6 , GPIO_AF_I2C1 ); // SCL
GPIO_PinAFConfig (GPIOB , GPIO_PinSource7 , GPIO_AF_I2C1 ); // SDA
21
22
23
24
// configure I2C1
I2C_InitStruct . I2C_ClockSpeed = 400000; // 400 kHz
I2C_InitStruct . I2C_Mode = I2C_Mode_I2C ; // I2C mode
I2C_InitStruct . I2C_DutyCycle = I2C_DutyCycle_2 ; // 50% duty cycle
--> standard
I2C_InitStruct . I2C_OwnAddress1 = 0x00; // own address , not relevant
in master mode
I2C_InitStruct . I2C_Ack = I2C_Ack_Enable ; // enable acknowledge when
reading
I2C_InitStruct . I2C_AcknowledgedAddress =
I2C_AcknowledgedAddress_7bit ; // set address length to 7 bit
addresses
I2C_Init (I2C1 , & I2C_InitStruct ); // init I2C1
25
26
27
28
29
30
31
32
33
// enable I2C1
I2C_Cmd (I2C1 , ENABLE );
34
35
36
}
Fragment kodu 4.3 Inicjacja magistrali I 2 C
Fragment kodu (4.3) podłącza zegar do odpowiednich peryferiów związanych z I 2 C
oraz magistralą portu B, gdzie znajdują się piny wykorzystywane do komunikacji. Następnie ustawiany jest odpowiedni tryb dla pinów oraz konfigurowany jest moduł I 2 C.
Ustawiono częstotliwość transmisji 400 kHz, tryb Master, 7 bitowe adresy oraz wysyłanie ACK (potwierdzenie).
Kolejnym krokiem wykonanym podczas realizacji odczytu danych jest odpowiednie ustawienie sensorów zgodnie z notami katalogowymi. L3G4200D ustawiono tak,
aby uzyskać częstotliwość próbkowania równą 800Hz oraz otrzymywać dane z zakresu
±1000o /s. Podobnie ustawiono LSM303DLH na częstotliwość próbkowania równą
1000Hz oraz zakres ±4g/s. W obu czujnikach ustawiono tryb wysyłania danych w postaci Little Endian.
Dane odbierane są przez mikrokontroler w przerwaniu od zegara. Częstotliwość
przerwań to 800Hz. Aby poprawić jakość uzyskiwanych pomiarów dokonywane jest
4.3. Oprogramowanie mikrokontrolera
45
filtrowanie górnoprzepustowe usuwające zbyt małe wartości próbek, które według not
katalogowych można uznać za szumy. Kolejnym usprawnieniem jest uśrednianie 16
kolejnych próbek, aby zminimalizować wpływ błędów grubych (spowodowanych poruszeniem kablami lub innymi losowymi zdarzeniami). Dodatkowo dla żyroskopu przed
filtrowaniem dokonywana jest jeszcze kalibracja zera, czyli od pomiarów odejmowana
jest wartość początkowa (uśredniona wartość z 4096 pomiarów w stanie nieruchomym).
Ostatnim etapem obróbki pomiarów jest przeliczenie wartości liczbowych na rzeczywiste wartości fizyczne.
Oprócz obróbki niezbędna jest fuzja danych, tak aby wykorzystując pomiary przyspieszenia, prędkości kątowej oraz pola magnetycznego, uzyskiwać informację na temat
orientacji robota względem układu odniesienia związanego z podłożem. Z powodu,
iż problem ten nie jest głównym aspektem pracy autor zdecydował się na wykorzystanie istniejących rozwiązań. W projekcie tym wykorzystano filtr MARG oraz jego
implementację opisaną w pracy [18]. Wykorzystana implementacja wymaga od użytkownika jedynie dobrania stałych dla członów proporcjonalnego i całkującego, tak by
uzyskiwane rozwiązania były odpowiednio filtrowane w zależności od warunków pracy
modułu. Uzyskiwane wartości orientacji zapisywane są w postaci kwaternionów [9].
4.3.3
Odczyt danych z dalmierza IR
Jednym z założeń sterowania robotem jest założenie, iż układ współrzędnych związany
z robotem porusza się zawsze stycznie do krzywizny ruchu. Z tego względu ważnym
aspektem jest posiadanie czujników z przodu konstrukcji umożliwiających wykrywanie
przeszkód i zmian w terenie. Do tego celu w projektowanej konstrukcji robota wykorzystywany jest dalmierz IR Sharp GP2Y0A21YKOF [32] o zakresie pracy (4, 30) cm.
Jest to sensor analogowy, dlatego do jego obsługi wykorzystywany jest przetwornik
ADC3 z wsparciem DMA (podobnie jak w przypadku komunikacji z serwomechanizmami). Z powodu, że charakterystyka zależności odległości od napięcia tego czujnika
przedstawiona w dokumentacji jest niedokładna niezbędna jest jej identyfikacja. Do
uzyskania rzeczywistych wartości odległości od czujnika wykonano serię pomiarów. Ponieważ charakterystyka zależności odległości od napięcia jest nieliniowa, postanowiono
dokonać jej interpolacji (rysunek 4.6) wykorzystując wcześniej uzyskane i uśrednione
pomiary. System robota ma postawione wiele zadań, które należy wykonać w danej
jednostce czasu, dlatego postanowiono stablicować uzyskane w procesie interpolacji
wartości co 10mV i dokonywać jedynie przybliżenia prostą na małym odcinku pomiędzy
wyznaczonymi wartościami. Ten sposób przybliżenia przy takiej liczbie punktów jest
wystarczająco dokładny, natomiast zysk czasowy wynikający z odczytywania wartości
z tablicy, zamiast obliczania wartości według skomplikowanego wzoru matematycznego
jest znaczny.
4.3.4
Przerwania od czujników dotykowych
Najbardziej podstawową informacją wykorzystywaną przy nawigacji w nierównym terenie jest informacja o tym, czy dana noga jest postawiona na podłożu, czy porusza się
ponad powierzchnią, po której wykonywany jest ruch robota. Do uzyskiwania tej informacji wykorzystywane są czujniki rozwierne zamontowane na końcówkach nóg. Ich
46
4. Oprogramowanie
Rysunek 4.6 Interpolacja pomiarów uzyskiwanych z dalmierza IR wraz z naniesionymi
punktami pomiarowymi
obsługa przez mikrokontroler jest oprogramowana w prosty sposób. Ponieważ zmiana
stanu czujnika występuje stosunkowo rzadko, a informacja ta powinna jak najszybciej
trafić do systemu, postanowiono obsługiwać zdarzenia te w postaci przerwań o wysokim
priorytecie. W ten sposób informacje na temat stanu poszczególnych nóg zapisywane
są w zmiennych globalnych w sposób niezależny od całego systemu oraz ich zmiana nie
powoduje problemów związanych z dostępem do pamięci przez więcej niż jedno zadanie w danym czasie. Przyciski podłączone są do wyjść procesora na różnych liniach
przez to przerwanie dla każdej nogi ma bardzo krótki czas realizacji. Przykład obsługi
przerwania widoczny jest we fragmencie kodu 4.4.
1
2
3
4
5
6
7
8
void EXTI4_IRQHandler (void)
{
if( EXTI_GetITStatus ( EXTI_Line4 ) != RESET )
{
h_push_leg_RF = (GPIOE ->IDR & 0x10) == 0 ? 0 : 1;
EXTI_ClearITPendingBit ( EXTI_Line4 );
}
}
Fragment kodu 4.4 Przerwanie od zewnętrznego zdarzenia na linii 4
4.3.5
Główne zadanie systemu — sterowanie
Głównym zadaniem systemu jest realizacja sterowania robotem kroczącym implementując wybrane algorytmy. Przyjęte rozwiązania w sposób hierarchiczny oddziaływają
4.3. Oprogramowanie mikrokontrolera
SensorSdata
47
UnevenSterrainSnavigation
Velocity
Curvature
Gait
Velocity&CurvatureScontrol
Gait&PhaseScontroller
Toda-RayleighSlatticeS
DampingSoscillator
InverseSkinematics servoSvalues
Rysunek 4.7 Schemat warstw sterowania robotem kroczącym
na siebie, z tego powodu zadanie sterowania postanowiono zaimplementować z wykorzystaniem rozwiązań warstwowych [10]. Schemat obrazujący działanie tego zadania
widoczny jest na rysunku 4.7.
Najniższą warstwą jest warstwa generująca trajektorie ruchu dla poszczególnych
nóg z wykorzystaniem kraty Tody-Rayleigha lub oscylatorów tłumionych. Ich implementacja wymaga numerycznego całkowania kolejnych kroków w czasie. Częstotliwość
całkowania została ustawiona na 1kHz. Dzięki temu prosta metoda całkowania metodą
prostokątów jest wystarczająca, ponieważ zapewnia większą dokładność, niż rozdzielczość ustawiania pozycji nogi.
Kolejną warstwą jest warstwa decyzyjna, ustawiająca odpowiednie parametry związane z trybem chodu oraz decydująca o przejściu między kratą a oscylatorem, w zależności od informacji uzyskiwanych z warstwy wyższej.
Następną warstwą jest warstwa sterująca. Otrzymuje ona informacje odnośnie sterowania z wykorzystaniem krzywizny i prędkości. Posiadając te informacje warstwa ta
modyfikuje w odpowiedni sposób mnożniki dla odpowiednich wartości uzyskiwanych
z najniższej warstwy, w taki sposób, by robot podążał po wyznaczonej trajektorii.
Najwyższa warstwa wykorzystuje informacje z otoczenia do poruszania się w nierównym terenie. Jej zadaniem jest określanie sposobu sterowania robotem uwzględniającego informacje sensoryczne uzyskiwane przez robota w trakcie pracy.
Rozdział 5
Badania
Rozdział ten poświęcony jest testowaniu oraz określaniu przydatności rozwiązań wykorzystanych podczas konstrukcji oraz sterowania robota kroczącego. Niezbędne jest
stwierdzenie, czy dane rozwiązania spełniają swoje funkcje oraz czy uzasadnione jest
wykorzystywanie ich w innych projektach realizujących podobne zadania. Pierwszym
etapem badań są symulacje zachowania kraty Tody-Rayleigha opisane w podrozdziale 5.1. Następnie w podrozdziale 5.2 badane jest zachowanie rzeczywistego robota
w testowym środowisku.
5.1 Symulacje w środowisku Simulink
W celu przeprowadzenia badań stworzono w środowisku Simulink odpowiednie modele
(dostępne w dodatku A na płycie CD) implementujące działanie poszczególnych części
systemu. Pierwszym elementem wykonanym było zamodelowanie połączenia dwóch
najniższych warstw czyli kraty Tody-Rayleigha oraz warstwy decyzyjnej, a następnie przebadanie działania modelu w celu dobrania odpowiednich parametrów modelu
oraz wyznaczenia wartości początkowych do efektywnego rozpoczynania pracy różnych
rodzajów chodu w fazie rozruchu robota. Schemat finalnego modelu (bez bloków wizualizacji) do testów przedstawiono na rysunku 5.1.
5.1.1
Badania najniższej warstwy systemu
Pierwszym zadaniem było zbadanie poprawności funkcjonowania kraty Tody-Rayleiha.
W tym celu niezbędne jest określenie wartości współczynników ω02 , ωR2 oraz µ z wzoru (2.16). Uzyskiwana trajektoria dla wybranych parametrów powinna być ograniczona
zakresem wartości (−5, 5), natomiast amplitudy na osi Z winny być odpowiednio duże
by robot mógł swobodnie kroczyć. Po dokonaniu serii testów ustalono zadane parametry na wartości:
ω02 = 3.3,
ωR2 = 1.8,
µ = 4.
(5.1)
Kolejnym etap prac było ustalenie odpowiednich współrzędnych początkowych umożliwiających inicjowanie następnych kroków oraz spełniających założenie, że współ-
50
5. Badania
Rysunek 5.1 Schemat dwóch najniższych warstw systemu sterowania w środowisku
Simulink
rzędne osi Y dla każdej z nóg są równe 0 by nie występowało zjawisko ”szurania”
nogi o podłoże.
Chód trójpodporowy
Podczas poszukiwania rozwiązań natrafiono na prawidłowość polegające na tym, że
ustawiając przeciwne wartości współrzędnych dla nóg 1,3,5 oraz 2,4,6 (zgodnie z numeracją z rysunku 2.11) zwykle można uzyskać chód trójpodporowy. Dodatkowo przeprowadzono serię testów dla różnych wartości współrzędnych w celu uzyskania płynnej
fazy rozruchu wprowadzającej jak najmniej zaburzeń. Wyniki badań przedstawiono na
rysunku 5.2. Można z nich wnioskować, iż niezależnie od współrzędnych początkowych
Z0 układ stabilizuje się na tym samym rozwiązaniu. Widać również, że wartości powyżej pewnej granicy (rysunki 5.2(a) i 5.2(b)) od razu zostają ograniczone. Ponieważ
zadaniem robota jest naśladowanie poruszania się insektów, rozpoczęcie ruchu musi
być łagodne i dopiero kolejne fazy (kroki) powinny osiągać maksymalną amplitudę.
Dodatkowo warto wystrzegać się przesterowań dlatego zdecydowano się na warunki
początkowe Z0 = 10 · (1, −1, 1, −1, 1, −1)T . Dla takiego rozwiązania ślad nogi poruszającej się po linii prostej obrazuje rysunek 5.3.
Chód gąsienicowy
Podobnie jak w przypadku chodu trójpodporowego najprostszym sposobem znalezienia chodu czteropodporowego jest ustawienie wartości początkowych w sposób taki,
5.1. Symulacje w środowisku Simulink
51
0.5
2.5
X1 , X3 , X5
X2 , X4 , X6
0.4
0.3
1.5
1
Coordinate Z [cm]
0.2
Coordinate X [cm]
Z1 , Z3 , Z5
Z2 , Z4 , Z6
2
0.1
0
−0.1
0.5
0
−0.5
−0.2
−1
−0.3
−1.5
−0.4
−2
−0.5
−2.5
0
1
2
3
4
5
0
1
2
Time t [s]
3
4
5
Time t [s]
(a) X = f (t) dla Z0 = 10 · (1, −1, 1, −1, 1, −1)T (b) Z = f (t) dla Z0 = 10 · (1, −1, 1, −1, 1, −1)T
0.6
4
X1 , X3 , X5
X2 , X4 , X6
Z1 , Z3 , Z5
Z2 , Z4 , Z6
3
0.4
2
Coordinate Z [cm]
Coordinate X [cm]
0.2
0
−0.2
−0.4
0
−1
−2
−0.6
−0.8
1
−3
0
1
2
3
4
−4
5
0
1
2
Time t [s]
(c) X = f (t) dla Z0 = (5, −5, 5, −5, 5, −5)T
4
5
(d) Z = f (t) dla Z0 = (5, −5, 5, −5, 5, −5)T
0.5
2.5
X1 , X3 , X5
X2 , X4 , X6
0.4
Z1 , Z3 , Z5
Z2 , Z4 , Z6
2
0.3
1.5
1
Coordinate Z [cm]
0.2
Coordinate X [cm]
3
Time t [s]
0.1
0
−0.1
0.5
0
−0.5
−0.2
−1
−0.3
−1.5
−0.4
−2
−0.5
−2.5
0
1
2
3
4
5
Time t [s]
(e) X = f (t) dla Z0 = ( 12 , − 12 , 12 , − 12 , 12 , − 12 )T
0
1
2
3
4
5
Time t [s]
(f) Z = f (t) dla Z0 = ( 12 , − 12 , 21 , − 12 , 12 , − 21 )T
Rysunek 5.2 Chód trójpodporowy — rozruch kraty Tody-Rayleigha
52
5. Badania
2.5
2
1.5
Coordinate Z [cm]
1
0.5
0
−0.5
−1
−1.5
−2
−2.5
−0.5
0
Coordinate X [cm]
0.5
Rysunek 5.3 Ślad nogi dla wybranych wartości początkowych chodu trójpodporowego
z fazą rozruchu
by pogrupować nogi w pary: (1,4), (2,5) oraz (3,6), a następnie zadawać różne współrzędne początkowe osi Z kolejnym parom. Podczas prowadzenia badań zauważono
jednak, iż znacznie trudniej uzyskać cykl odpowiadający temu sposobowi kroczenia.
Na rysunku 5.4 przedstawiono wyniki badań dla chodu gąsienicowego. Obserwacja zachowania układu pokazuje, iż różnice między wartościami kolejnych par nie mogą być
zbyt duże oraz jedna para musi posiadać przeciwny znak w stosunku do pozostałych.
Gdy niespełniane są te założenia układ stabilizuje się na innym rozwiązaniu cyklicznym, który nie reprezentuje znanego chodu insektów. Rysunek 5.4 pokazuje również,
że przy niewielkich różnicach warunków początkowych uzyskiwane są jakościowo różne
rozwiązania. Układ może tworzyć przesterowania, które utrudniałyby rzeczywistemu
obiektowi poprawne rozpoczęcie ruchu (rysunki 5.4(e) i 5.4(f)). Z tego powodu wybrano do fazy rozruchu chodu czteropodporowego współrzędne początkowe dla osi Z
równe Z0 = (1.4, −0.7, 0.2, 1.4, −0.7, 0.2)T . Ślad ruchu pojedynczej kończyny robota
dla tych wartości obrazuje rysunek 5.5.
Chód pełzający
Chód pełzający jest najtrudniejszym do uzyskania sposobem poruszania się robota
przy pomocy kraty Tody-Rayleigha. Podczas eksperymentów z kratą nie udało się autorowi pracy znaleźć rozwiązania cyklicznego odpowiadającego temu rodzajowi chodu
spełniającego założenie X0 = 0. Zmiany wartości początkowych dla współrzędnej Z
nie pozwalały na uzyskanie odpowiednich wyników, dlatego zdecydowano się na próby
odszukania rozwiązań cyklicznych modyfikując współrzędne początkowe osi X przy
Z0 = 0. Po dokonaniu serii prób uzyskano rozwiązania widoczne na rysunku 5.6.
Warunki początkowe mają podobny wpływ na fazę rozruchu, jak w przypadku chodu
gąsienicowego. Oddziaływają one na wielkość przesterowań oraz długość fazy rozpo-
5.1. Symulacje w środowisku Simulink
53
1.2
3
1
2
Coordinate Z [cm]
Coordinate X [cm]
0.8
0.6
0.4
0.2
1
0
−1
0
−0.4
−2
X1 , X4
X2 , X5
X3 , X6
−0.2
0
2
4
6
8
−3
10
Z1 , Z4
Z2 , Z5
Z3 , Z6
0
2
4
Time t [s]
(a) X
=
f (t)
dla
(1.4, −0.7, 0.2, 1.4, −0.7, 0.2)T
8
= (b) Z
=
f (t)
dla
(1.4, −0.7, 0.2, 1.4, −0.7, 0.2)T
Z0
1.6
10
Z0
=
3
X1 , X4
X2 , X5
X3 , X6
1.4
Z1 , Z4
Z2 , Z5
Z3 , Z6
2
1.2
Coordinate Z [cm]
1
Coordinate X [cm]
6
Time t [s]
0.8
0.6
0.4
0.2
0
1
0
−1
−2
−0.2
−0.4
0
2
4
6
8
−3
10
0
2
4
Time t [s]
6
8
(c) X
=
f (t)
(2, −0.7, 1.2, 2, −0.7, 1.2)T
dla
= (d) Z
=
f (t)
(2, −0.7, 1.2, 2, −0.7, 1.2)T
Z0
1.5
dla
Z0
Z1 , Z4
Z2 , Z5
Z3 , Z6
1
2
0.5
1
Coordinate Z [cm]
Coordinate X [cm]
=
3
X1 , X4
X2 , X5
X3 , X6
0
−0.5
−1
−1.5
10
Time t [s]
0
−1
−2
0
2
4
6
8
10
Time t [s]
(e) X
=
f (t)
dla
(−2, 0.8, −0.5, −2, 0.8, −0.5)T
−3
0
2
4
6
8
10
Time t [s]
Z0
= (f) Z
=
f (t)
dla
(−2, 0.8, −0.5, −2, 0.8, −0.5)T
Z0
Rysunek 5.4 Chód czteropodporowy — rozruch kraty Tody-Rayleigha
=
54
5. Badania
3
Coordinate Z [cm]
2
1
0
−1
−2
−3
−0.2
0
0.2
0.4
0.6
Coordinate X [cm]
0.8
1
1.2
Rysunek 5.5 Ślad nogi dla wybranych wartości początkowych chodu czteropodporowego z fazą rozruchu
czynającej kroczenie robota. Wadą rozwiązań uzyskanych podczas testów jest fakt,
iż punkt startowy leży poza cyklicznym rozwiązaniem. Fakt ten widoczny jest na
rysunku 5.7 obrazującym ślad ruchu dla współrzędnych X0 = (−1, 1, −1, 1, 0.4, 2)T .
Z powodu znacznego ”szurania” występującego pomiędzy nogą fizycznego obiektu
a podłożem wynikającego z X0 ̸= 0 rozwiązanie to nie jest zaimplementowane w rzeczywistym obiekcie.
Zatrzymywanie robota
Gdy robot dostaje komendę zatrzymania włączany jest oscylator tłumiony, którego
zadaniem jest zatrzymanie w płynny sposób kończyny robota na zadanej wartości koń2
cowej (Xk , 0). Głównym zadaniem jest dobranie odpowiedniego współczynnika ωosc
występującego w równaniu oscylatora (2.12). Załóżmy, że współczynnik ten powinien
zapewnić stabilizację układu na zadanej wartości w czasie około 3 sekund. Zdecydowano się na taki okres fazy zatrzymywania z powodu, iż każdy żywy organizm potrzebuje trochę czasu na wyhamowanie i zatrzymanie się. Gdyby konstrukcja robota
zatrzymywała się szybciej, wyglądałoby to nienaturalnie, a jednym z celów pracy jest
naśladowanie zachowań żywego organizmu. Podczas testów dokonano też obserwacji,
iż aby uzyskać oczekiwaną wartość współrzędnej Xk przy zakończeniu ruchu niezbędne
2
. W przeciwnym wypadku
jest przemnożenie tej wartości przez współczynnik −ωosc
układ stabilizuje się, na innej wartości, niż zadana. Po serii testów stwierdzono, że
2
= 10 daje satysfakcjonujące rezultaty fazy zatrzymywania dla różnych rodzajów
ωosc
chodu.
5.1. Symulacje w środowisku Simulink
55
3.5
3
1
2.5
0.5
2
Coordinate Z [cm]
Coordinate X [cm]
2
1.5
0
−0.5
−1
1.5
1
0.5
−1.5
0
−2
−0.5
−2.5
−1
−3
−1.5
0
5
X1
X2
10
Time t [s]
X3
X4
15
X5
X6
0
5
Z1
Z2
10
Time t [s]
Z3
Z4
15
Z5
Z6
3
4
2
3
1
2
Coordinate Z [cm]
Coordinate X [cm]
(a) X = f (t) dla X0 = (1.25, −1.25, −0.5, 0, 0)T (b) Z = f (t) dla X0 = (1.25, −1.25, −0.5, 0, 0)T
0
−1
−2
−3
1
0
−1
0
5
X1
X2
10
Time t [s]
X3
X4
−2
15
X5
0
X6
5
Z1
Z2
10
Time t [s]
Z3
Z4
15
Z5
Z6
(c) X = f (t) dla X0 = (2, −1.25, −0.5, 1, 0, 0)T (d) Z = f (t) dla X0 = (2, −1.25, −0.5, 1, 0, 0)T
4
4
3
3
Coordinate Z [cm]
Coordinate X [cm]
2
1
0
2
1
0
−1
−1
−2
−3
0
5
X1
X2
10
Time t [s]
X3
X4
15
X5
X6
(e) X = f (t) dla X0 = (−1, 1, −2, 1, 0.4, 2)T
−2
0
5
Z1
Z2
10
Time t [s]
Z3
Z4
15
Z5
Z6
(f) Z = f (t) dla X0 = (−1, 1, −2, 1, 0.4, 2)T
Rysunek 5.6 Chód pięciopodporowy — rozruch kraty Tody-Rayleigha
56
5. Badania
4
Coordinate Z [cm]
3
2
1
0
−1
−2
−3
−2
−1
0
Coordinate X [cm]
1
2
Rysunek 5.7 Ślad nogi dla wybranych wartości początkowych chodu pięciopodporowego
z fazą rozruchu
5.1.2
Warstwa zmian trybu chodu
Gdy stwierdzono, że najniższa warstwa działa poprawnie kolejnym etapem było sprawdzenie funkcjonowania warstwy decydującej o trybie kroczenia. Jedną z zalet wykorzystania do generacji trajektorii poszczególnych nóg robota kraty Tody-Rayleigha jest
fakt, iż umożliwia ona płynne przechodzenie między różnymi rodzajami chodu. Przejście takie wymaga, zastosowania odpowiedniej sekwencji (opisanej dokładniej w podrozdziale 2.3).
Postanowiono przeprowadzić testy działania zmiany trybu chodu. Rysunek 5.8
przedstawia wizualizację takiego przejścia zarówno dla wartości poszczególnych współrzędnych X oraz Z, jak i śladu pojedynczej nogi robota. Test polegał na rozpoczęciu
ruchu trójpodporowego oraz kroczenia w fazie właściwej przez okres 7 sekund, następnie zasymulowano zdarzenie zmiany sposobu kroczenia, co spowodowało wymuszenie
fazy zatrzymywania trwającej około 3 sekundy oraz następnie rozpoczęcie rozruchu
dla chodu czteropodporowego przez następne 5 sekund. Podobny test przeprowadzono
dla odwrotnej sytuacji przejścia z fazy właściwej chodu czteropodporowego do chodu
trójpodporowego. Jego rezultaty widoczne są na rysunku 5.9.
Porównując oba przejścia widać, że zmiana trybu chodu przechodzi poprawnie oraz
jest ona odwracalna. Widać również, że różnice występują w fazie zatrzymywania
w zależności od momentu, w którym nastąpi zmiana trybu kroczenia.
5.2
Badania rzeczywistego obiektu
Ważnym etapem prac nad projektem jest badanie funkcjonowania rzeczywistej konstrukcji robota. Pozwala ono określić przydatność rozwiązań zastosowanych w trakcie
5.2. Badania rzeczywistego obiektu
57
1.2
3
1
2
0.6
Coordinate Z [cm]
Coordinate X [cm]
0.8
0.4
0.2
0
1
0
−1
−0.2
−2
−0.4
−0.6
0
5
10
15
−3
0
5
10
Time t [s]
15
Time t [s]
(a) X = f (t)
(b) Z = f (t)
3
tripod gait
damping
quadropod gait
Coordinate Z [cm]
2
1
0
−1
−2
−3
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
Coordinate X [cm]
0.8
1
1.2
(c) Ślad końcówki nogi przy zmianie chodu
Rysunek 5.8 Przejście pomiędzy chodem trójpodporowym, a czteropodporowym
58
5. Badania
1.2
3
1
2
0.6
Coordinate Z [cm]
Coordinate X [cm]
0.8
0.4
0.2
0
1
0
−1
−0.2
−2
−0.4
−0.6
0
5
10
15
−3
0
5
10
Time t [s]
15
Time t [s]
(a) X = f (t)
(b) Z = f (t)
3
tripod gait
damping
quadropod gait
Coordinate Z [cm]
2
1
0
−1
−2
−3
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
Coordinate X [cm]
0.8
1
1.2
(c) Ślad końcówki nogi przy zmianie chodu
Rysunek 5.9 Przejście pomiędzy chodem czteropodporowym, a trójpodporowym
5.2. Badania rzeczywistego obiektu
59
jego realizacji oraz dalsze możliwości rozwoju a także elementy, które należy zmodyfikować w celu usprawnienia działania. Badania swoim zakresem obejmowały: sprawdzenie i porównanie działania symulacji kraty Tody-Rayleigha a implementacji na robocie,
określenie poprawności działania sterowania z wykorzystaniem prędkości i krzywizny
oraz porównanie poruszania się robota w nierównym terenie sterowanego algorytmem
nieuwzględniającym i uwzględniającym sygnały z czujników dotykowych. Filmy z przeprowadzonych badań zostały zamieszczone w dodatku A na płycie CD.
5.2.1
Generator chodu
Pierwszym etapem testów wykonanego robota kroczącego było sprawdzenie poprawności funkcjonowania kraty Tody-Rayleigha. W tym celu przeprowadzono najpierw testy,
w których obserwowano zachowanie pojedynczej nogi robota podczas generowania trajektorii przez kratę. Na rysunku 5.10 przedstawiono zdjęcia poklatkowe trajektorii
poruszania się końcówki jednej z nóg robota. Porównując ślad ruchu końcówki nogi
na zdjęciach z naniesionym na nie śladem z symulacji w programie Simulink można
stwierdzić, iż działanie dyskretnej implementacji kraty Tody-Rayleigha dla pojedynczej kończyny jest poprawne.
Kolejnym testem było ustawienie chodu trójpodporowego oraz sprawdzenie kroczenia robota. Maszyna wykonywała ruchy w sposób prawidłowy zmieniając naprzemiennie pozycję dla trzech nóg. Dodatkowo stwierdzono, że konstrukcja robota porusza się
po linii prostej na odcinku około 10m. Pozwala to przyjąć, iż generowany w ten sposób
chód trójpodporowy jest poprawny oraz może być wykorzystywany do efektywnego
poruszania się robotem po płaskim podłożu.
Następnie przeprowadzono podobne testy dla ruchu gąsienicowego. Ich wynik potwierdził poprawność działania kraty Tody-Rayleigha również w tym zakresie. Ruch
ten zgodnie z teorią jest na granicy stabilności. W trakcie badań zauważono, że robot
ma tendencję do przechylania się w stronę kierunku ruchu. Powodem tego jest zbyt
wysoko umieszczony środek ciężkości konstrukcji, którego przemieszczenie w różnych
fazach ruchu powoduje przekroczenie granicy stabilności.
Podczas wykonanych testów dokonano jeszcze jednej ważnej obserwacji. Robot
jest bardzo czuły na zmianę chropowatości powierzchni, po której się porusza. Gdy
krocząc po płaszczyźnie natrafia na zmianę ośrodka na przykład przechodzi z parkietu
na dywan robot ma tendencję do zmiany kierunku ruchu. Zachowanie to może być
problematyczne gdy zadaniem robota będzie autonomiczne poruszanie się w terenie.
W takich wypadkach konstrukcją musi zostać wyposażona w możliwość rozpoznawania
takich sytuacji i niwelowania ich skutków.
5.2.2
Sterowanie z wykorzystaniem krzywizny i prędkości
Gdy stwierdzono, że podstawowe sposoby poruszania się robota kroczącego funkcjonują zgodnie z założeniami rozpoczęto badanie sterowania zadawanego przez operatora
z komputera.
Pierwszym etapem było sprawdzenie wpływu prędkości na maszynę. Aby sprawdzić poprawność działania ustawiono robota w pozycji początkowej, a następnie nakazywano mu chód trójpodporowy z zadaną prędkością przez czas 5 sekund. Gdy robot
5. Badania
60
Rysunek 5.10 Zdjęcia poklatkowe pokazujące trajektorię pojedynczej nogi
5.2. Badania rzeczywistego obiektu
61
ID
Tryb chodu
Prędkość [ cm
] Odległość zmierzona [cm]
T
1
trójpodoporowy
1.0
8.75
2
trójpodoporowy
1.0
8.75
3
trójpodoporowy
1.0
9.00
4
trójpodoporowy
2.5
22.00
5
trójpodoporowy
2.5
21.50
6
trójpodoporowy
2.5
21.75
7
trójpodoporowy
5.0
43.50
8
trójpodoporowy
5.0
44.00
9
trójpodoporowy
5.0
44.25
10
czteropodporowy 1.0
6.50
11
czteropodporowy 1.0
6.25
12
czteropodporowy 1.0
6.50
13
czteropodporowy 2.5
16.25
14
czteropodporowy 2.5
16.75
15
czteropodporowy 2.5
17.00
16
czteropodporowy 5.0
33.00
17
czteropodporowy 5.0
34.00
18
czteropodporowy 5.0
34.25
Tabela. 5.1 Wyniki badań sterowania prędkością robota dla różnych trybów chodu
kończył wykonywanie ruchu mierzono jego odległość od punktu początkowego. Test
ten powtórzono trzykrotnie, aby zbadać powtarzalność ruchu. Gdy stwierdzono, że
ruch jest powtarzalny wykonano analogiczne testy dla różnych prędkości w celu sprawdzenia, zachowania proporcji ruchu. Testy potwierdziły poprawne funkcjonowanie sterowania za pomocą prędkości. Dwukrotne zwiększenie prędkości powoduje dwukrotne
zwiększenie pokonanego dystansu w zadanym czasie. Wyniki testów przedstawiono
w tabeli 5.1. Uzyskane dane pokazują również, iż niezbędne jest odpowiednie przeskalowanie współczynników długości kroku dla poszczególnych chodów w taki sposób, by
uzyskiwać jednakowe odległości przy danej prędkości dla każdego trybu chodu.
Następnie, sprawdzono poprawność wpływu krzywizny na sterowanie robotem. Do
tego celu przeprowadzono kilka testów. Pierwszym podstawowym testem było sprawdzenie, czy robot krocząc po zadanym promieniu ze stałą prędkością pokonuje w danych
odcinkach czasu te same odległości po okręgu o zadanym promieniu. Wyniki testów
przedstawiono na rysunku 5.11. Na ich podstawie można stwierdzić, że robot porusza się poprawnie w takich warunkach. Kolejnym testem był wpływ zmiany prędkości
na sposób kroczenia po zadanej stałej krzywiźnie. Testowano zachowanie to sprawdzając czy robot zmieniając prędkość podczas kroczenia po okręgu stałym promieniu
5. Badania
62
Rysunek 5.11 Zdjęcia poklatkowe pokazujące sposób kroczenia po okręgu
5.2. Badania rzeczywistego obiektu
63
będzie w pewnym momencie ruchu przecinał punkt początkowy z odpowiednią orientacją. Badania te pokazały, że robot z każdym okrążeniem lekko zbacza wybranej trasy.
Przy pierwszym okrążeniu dla okręgu o promieniu jednego metra jest to praktycznie
niezauważalne. Jednak kolejne okrążenia pokazują, że maszyna zbacza coraz mocniej
z zadanej trasy. Zachowanie takie jest prawdopodobnie związane z niedokładnościami
wynikającymi z konstrukcji mechanicznej robota oraz błędami związanymi wpływem
współczynników wykorzystywanych do sterowania na dyskretną implementację karty
Tody-Rayleigha.
5.2.3
Nawigacja w nierównym terenie
Ostatnim etapem badań było porównanie zachowania rzeczywistego obiektu w nierównym terenie sterowanego algorytmami nieuwzględniającymi i uwzględniającymi informację z czujników dotykowych na końcach nóg robota. Do badań wykorzystano różne
otoczenia: płaski teren z pojedynczymi oraz wieloma przeszkodami o kształcie wielościanów, teren pokryty trawą oraz teren kamienisty. Filmy z testów przeprowadzonych
dostępne są w dodatku A na płycie CD.
Pierwszym porównaniem dokonanym w trakcie badań był wpływ uwzględniania
informacji z czujników dotykowych na trajektorię końca nogi stawianej na danej powierzchni. Na rysunku 5.12 przedstawiono wyniki testów zachowania robota stawiającego nogi na przeszkodach. Widać, że napotkanie przeszkody powoduje zatrzymanie
ruchu nogi w kierunku osi Z do momentu, w którym noga jest znów podnoszona.
Zmiana ta w stosunku do trajektorii generowanej z pominięciem informacji z czujników na końcach nóg robota (rysunek 5.10) jest wyraźna. Rozwiązanie wykorzystujące
sensory umożliwia lepszą kontrolę orientacji robota względem podłoża, dzięki czemu
ruch wykorzystujący to podejście wizualnie wygląda płynniej.
Kolejnym etapem testów było porównanie działania robota w przestrzeni płaskiej,
gdzie przeszkody to niewielkie wielościany rzadko występujące. Taki teren widoczny
jest na rysunku 5.13. Zarówno w przypadku, gdy robot poruszał się wykorzystując
informacje z czujników dotyku, jak i bez tych informacji, był wstanie pokonać bez
większych problemów tego typu przeszkody. Widoczna różnica następowała w orientacji robota, nie posiadając informacji robot miał tendencje do przechylania się na
boki. W trakcie testów zauważono również, że gdy jedna z kończyn maszyny ślizga się
przy wchodzeniu na przeszkodę, może powodować to zmianę kierunku ruchu robota.
Nie jest to większym problemem, gdy robot sterowany jest przez operatora. Jednak
w przypadku tworzenia konstrukcji do zadań związanych z autonomicznym przemieszczaniem się w danym środowisku, należy rozpoznawać takie sytuacje oraz korygować
kierunek ruchu.
Następnie przeprowadzono badania w płaskim terenie z dużą ilością zróżnicowanych przeszkód w kształcie wielościanów. Robota w trakcie pokonywania przeszkód
tego typu przedstawiono na rysunku 5.14. Poruszanie w tego typu terenie jest znacznie bardziej wymagające i robot bez wsparcia czujników nie potrafi pokonywać tego
typu przeszkód. Natomiast wykorzystując informacje z sensorów dotykowych robot pokonuje tego typu przeszkody. Spowodowane jest to dużymi zmianami w poziomie na
którym znajduje się część robota w danej chwili. Maszyna wchodząc po równi pochyłej
ma przód podniesiony do góry, natomiast tył robota skierowany jest w dół, ponieważ
5. Badania
64
Rysunek 5.12 Zdjęcia poklatkowe pokazujące wpływ korzystania z czujników dotyku na trajektorię końca nogi
5.2. Badania rzeczywistego obiektu
65
Rysunek 5.13 Robot podczas pokonywania płaskiego terenu z niewielkimi przeszkodami
Rysunek 5.14 Robot w trakcie pokonywania płaskiego terenu ze zróżnicowanymi przeszkodami
66
5. Badania
Rysunek 5.15 Maszyna krocząca w trawiastym środowisku
nie ma żadnej kontroli orientacji robot przy wykroku podnosi przednie kończyny zbyt
wysoko i traci przyczepność stawiając je. To powoduje losowe zmiany kierunku ruchu,
a przy odpowiednio dużym nachyleniu podejścia zsuwanie się konstrukcji. Robot wykorzystujący czujniki przesuwa swój środek ciężkości w stronę przodu konstrukcji co
powoduje większą stabilność podczas pokonywania tego typu przeszkody i umożliwia
mu wejście na nią.
Oprócz poruszania się w sztucznych środowiskach z prosto zdefiniowanymi przeszkodami robot musi być wstanie poruszać się w naturalnym otoczeniu, dlatego kolejne
testy polegały na ocenie funkcjonowania robota w rzeczywistych warunkach. Pierwsze badania przeprowadzono na trawie (rysunek 5.15). Przestrzeń pracy tego typu
nie stanowi dużego wyzwania. Przeszkody są znacznie mniejsze od konstrukcji robota
i pokonywanie ich zarówna bez informacji z czujników jak również posiadając je jest łatwe. Jedyny problem, który konstrukcja robota może natrafić w takich warunkach jest
zahaczenie się o trawę i zablokowanie nogi. Jednakże rozwiązanie tego problemu jest
proste — wystarczy zabezpieczyć konstrukcję kończyn przed możliwością zaistnienia
takiej sytuacji poprzez założenie koszulek ochronnych lub oklejenie taśmą izolacyjną.
Najtrudniejszą przestrzenią pracy, w której wykonywano testy jest kamieniste podłoże. Robot chodzący po takiej powierzchni widoczny jest na rysunku 5.16. Kroczenie
po tego typu terenie jest możliwe przy wykorzystaniu czujników dotykowych na końcach nóg robota. Jednak podczas poruszania się w takim terenie trudne jest zachowanie
odpowiedniego kierunku ruchu przez robota, jako że często jego nogi ”ślizgają” się na
kamieniach. Bez odpowiedniej kontroli nóg wykorzystującej informację z czujników
robot ma tendencję do klinowania swoich kończyn pomiędzy kamieniami co powoduje
niemożliwość dalszego poruszania się. Lokomocja w bardziej zróżnicowanych środowiskach wymaga od robota uwzględniania większej ilości informacji o otoczeniu podczas
kroczenia.
5.2. Badania rzeczywistego obiektu
Rysunek 5.16 Robot kroczący po kamienistym terenie
67
Rozdział 6
Podsumowanie
Główny cel pracy, czyli wykonanie sześcionożnego robota kroczącego posiadającego
umiejętność przemieszczania się w nierównym terenie, został osiągnięty. Zaprojektowano konstrukcję mechaniczną robota kroczącego oraz dobrano odpowiednie układy
elektroniczne i wykonano płytki PCB. Następnie oprogramowano robota oraz wykonano aplikację sterującą maszyną. Ostatnim etapem prac było przebadanie działania
zaproponowanej konstrukcji oraz algorytmów związanych z generacją chodu, sterowaniem z wykorzystaniem krzywizny i prędkości oraz poruszania się w nierównym terenie.
Zarówno systemy elektroniczne, jak i oprogramowanie zostały zaprojektowane w taki
sposób, by ich dalszy rozwój był możliwie prosty.
Badania przeprowadzono na dwa sposoby: najpierw symulacyjnie sprawdzono poprawność działania niższych warstw robota, następnie dokonywano testów na rzeczywistym obiekcie. Wyniki badań pozwalają stwierdzić, iż krata Tody-Rayleigha jest
dobrym rozwiązaniem do implementacji generatora chodu robotów. Dodatkowo, sterowanie z wykorzystaniem krzywizny i prędkości umożliwia intuicyjne i jednoznaczne
sterowanie obiektem. Ostatni etap badań pokazał, że algorytm wykorzystujący informacje z czujników dotyku na końcach nóg znacznie zwiększa możliwości lokomocyjne
robota w nierównym terenie.
Zaproponowana konstrukcja może być rozwijana na wiele sposobów. Jednym z nich
jest rozszerzanie oprogramowania robota w stronę większej autonomii konstrukcji umożliwiającej eksplorację nieznanego terenu. W tym wypadku dobrym pomysłem jest wyposażenie jednostki w dodatkowe sensory pozwalające na tworzenie map otoczenia,
które znacznie upraszczają zadanie poruszania się w nierównym terenie — każdy organizm porusza się pewniej w znanym otoczeniu, niż w warunkach, gdy nie posiada
wystarczających informacji na temat jego.
Kolejną możliwością rozwijania robota jest tworzenie jednostki zwiadowczej lub
saperskiej prowadzonej przez operatora. Do tego celu niezbędne jest rozwinięcie interfejsu kontrolnego oraz wyposażenie robota w kamerę z tyłu konstrukcji. Dodatkowo
w zależności od zadań stawianych przed robotem, konstrukcja powinna być rozszerzona
o specjalistyczne sprzęty niezbędne do wykonywania tych zadań. W przypadku kroczącego robota zwiadowczego, jego przewaga nad robotami kołowymi polega na większych
możliwościach poruszania się w trudnym terenie. Wyposażenie konstrukcji w sensory
określające skład powietrza może być przydatne dla robotów pracujących w kopalniach.
Czujniki wykrywania ruchu lub kamery termowizyjne mogą być wykorzystywane w ra-
70
6. Podsumowanie
zie trzęsień ziemi. Robot zwiadowczy może dojść w miejsca zbyt wąskie i trudne do
poruszania się dla człowieka, może również transportować do ludzi uwięzionych pod
ziemią żywność, wodę oraz środki medyczne. Zastosowanie saperskie wymaga wykonania robota w większej skali oraz przystosowania go do korzystania z manipulatora do
przenoszenia różnych obiektów. W stosunku do robotów kołowych wykonujących tego
typu zadania dużą zaletą takiej maszyny może być fakt, iż przednie nogi mogą również
być wykorzystywane do manipulacji obiektami.
Trudno porównywać poruszanie się żywych insektów w stosunku do maszyny kroczącej, gdyż różnice w rozwiązaniach występujące w dziedzinie materiałów, napędu oraz
miniaturyzacji pozostają niedoścignione. Nie powinno to jednak zniechęcać badaczy do
dalszego rozwoju. Obserwacje działania wzorców biologicznych są zwykle najlepszymi
wzorcami do budowy konstrukcji maszyn oraz tworzenia nowych algorytmów ruchu
gwarantujących zadawalające efekty kroczenia, a często najlepsze z możliwych. Wraz
z rozwojem materiałów oraz mechanizmów, możliwe jest tworzenie coraz to bardziej
zaawansowanych konstrukcji posiadających większe możliwości lokomocji.
Autor pracy planuje dalszy rozwój projektu mając na celu stworzenie konstrukcji
robota zwiadowczego, posiadającego możliwość poruszania się w opuszczonych budynkach z możliwością wspinania się po schodach. Jest to zadanie rozległe oraz otwarte
dla przyszłych badań.
Dodatek A
Płyta CD
Płyta CD zawiera:
• Elektroniczną wersję pracy magisterskiej,
• Projekt aplikacji komputerowej dla środowiska QtCreator,
• Projekt oprogramowania mikrokontrolera dla środowiska Keil µVision,
• Projekty poszczególnych elementów robota oraz rysunki złożeniowe dla Autodesk
Inventor,
• Schematy elektroniczne oraz płytek PCB wykonane w programie Eagle,
• Filmy nakręcone podczas badań funkcjonowania robota,
• Noty katalogowe elementów wykorzystanych w projekcie.
Dodatek B
Schematy elektroniczne
W dodatku zamieszczono schematy elektroczniczne oraz schematy płytek PCB:
• Schemat elektroniczny płytki z zasilaniem,
• Schemat PCB płytcki z zasilaniem,
• Schemat elektroniczny płytki mikrokontrolera,
• Schemat PCB płytcki mikrokontrolera,
Fragmenty kodu zawarte w pracy :
4.1
4.2
4.3
4.4
Zmiana ID serwomechanizmu . . . . . . . . . .
Ustawienie pozycji bazowej serwomechanizmu .
Inicjacja magistrali I 2 C . . . . . . . . . . . . .
Przerwanie od zewnętrznego zdarzenia na linii 4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
43
46
Spis rysunków
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
Proces przestawiania nogi z parametrami . . . . . . . . . . . . .
Wielokąt podparcia zaznaczony dla ruchu trójpodporowego . . .
Trajektorie poszczególnych nóg w chodzie metachronicznym . .
Fazy chodu z wielokątami podparcia dla chodu pełzającego . . .
Trajektorie poszczególnych nóg w chodzie gąsienicowym . . . .
Fazy chodu z wielokątami podparcia dla chodu gąsienicowego .
Trajektorie poszczególnych nóg w chodzie trójpodporowym . . .
Fazy chodu z wielokątami podparcia dla chodu gąsienicowego .
Robot podczas kroczenia po łuku . . . . . . . . . . . . . . . . .
Sześcioelementowy pierścień sieci Tody . . . . . . . . . . . . . .
Robot z zaznaczonymi poszczególnymi układami współrzędnych
Kinematyka nogi robota . . . . . . . . . . . . . . . . . . . . . .
Rzut nogi na płaszczyznę 0XZ dla q1 = 0 . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
7
8
9
9
10
11
11
12
14
18
19
20
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
Cicindela formosa generosa[17] . . . . . . . . . . . . . . . . . . . . . .
Korpus robota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Porównanie standardowych i robotycznych serwomechanizmów . . . . .
Jedno z odnóż Cicindela formosa generosa[17] z zaznaczonymi odcinkami
Projekt nogi robota w Autodesk Inventor 2013 . . . . . . . . . . . . . .
Rzeczywista realizacja nogi maszyny kroczącej . . . . . . . . . . . . . .
Sposób podłączenia przycisków rozwiernych . . . . . . . . . . . . . . .
Moduł kamery oraz dalmierza . . . . . . . . . . . . . . . . . . . . . . .
Sposób przymocowania modułu MinIMU-9 . . . . . . . . . . . . . . . .
Model robota w Autodesk Inventor 2013 . . . . . . . . . . . . . . . . .
Rzeczywista realizacja konstrukcji projektu . . . . . . . . . . . . . . . .
Schemat zasilania pojedynczej nogi robota . . . . . . . . . . . . . . . .
Schemat komunikacji między serwem a mikrokontrolerem . . . . . . . .
Schemat podłączenia mikrokontrolera STM32F407VGT6 . . . . . . . .
24
25
25
26
26
27
28
28
29
30
31
32
33
34
4.1
4.2
4.3
4.4
4.5
4.6
Schemat ramki Profibus [5] typu telegram dla stałej długości danych . .
Interfejs użytkownika do sterowania robotem . . . . . . . . . . . . . . .
Wizualizacja danych otrzymywanych z modułu MinIMU-9 . . . . . . .
Schemat ramki i odpowiedzi dla protokołu HMI serwomechanizmów . .
Schemat systemu znajdującego się na mikrokontrolerze . . . . . . . . .
Interpolacja pomiarów uzyskiwanych z dalmierza IR wraz z naniesionymi punktami pomiarowymi . . . . . . . . . . . . . . . . . . . . . . .
36
37
38
39
42
46
82
SPIS RYSUNKÓW
4.7
Schemat warstw sterowania robotem kroczącym . . . . . . . . . . . . .
5.1
Schemat dwóch najniższych warstw systemu sterowania w środowisku
Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chód trójpodporowy — rozruch kraty Tody-Rayleigha . . . . . . . . .
Ślad nogi dla wybranych wartości początkowych chodu trójpodporowego
z fazą rozruchu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chód czteropodporowy — rozruch kraty Tody-Rayleigha . . . . . . . .
Ślad nogi dla wybranych wartości początkowych chodu czteropodporowego z fazą rozruchu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chód pięciopodporowy — rozruch kraty Tody-Rayleigha . . . . . . . .
Ślad nogi dla wybranych wartości początkowych chodu pięciopodporowego z fazą rozruchu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przejście pomiędzy chodem trójpodporowym, a czteropodporowym . .
Przejście pomiędzy chodem czteropodporowym, a trójpodporowym . .
Zdjęcia poklatkowe pokazujące trajektorię pojedynczej nogi . . . . . . .
Zdjęcia poklatkowe pokazujące sposób kroczenia po okręgu . . . . . . .
Zdjęcia poklatkowe pokazujące wpływ korzystania z czujników dotyku
na trajektorię końca nogi . . . . . . . . . . . . . . . . . . . . . . . . . .
Robot podczas pokonywania płaskiego terenu z niewielkimi przeszkodami
Robot w trakcie pokonywania płaskiego terenu ze zróżnicowanymi przeszkodami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Maszyna krocząca w trawiastym środowisku . . . . . . . . . . . . . . .
Robot kroczący po kamienistym terenie . . . . . . . . . . . . . . . . .
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
47
50
51
52
53
54
55
56
57
58
60
62
64
65
65
66
67
Bibliografia
[1] FreeRTOS – market leading RTOS. http://www.freertos.org/, 2014.
[2] RS232 terminal, serial port terminal, udp terminal, tcp/ip client server - hercules.
http://www.hw-group.com/products/hercules/index_en.html, 2014.
[3] 3D CAD Software | Inventor 3D CAD | Autodesk. http://www.autodesk.com/
products/autodesk-inventor-family/overview#, 2014.
[4] OpenGL – The Industry Standard forHigh Performance Graphics. http://www.
opengl.org/, 2014.
[5] Acromag Incorporated. Introduction to Profibus DP, 2002.
[6] S. Bai. The Kinematics of the Terrain-adaptive Locomotion of Walking Machines.
Praca doktorska, Aalborg University Singapore, 2000.
[7] FTDI Chip. FT232R USB UART IC, 2010.
[8] R. Gierczak. Laboratoryjny robot kroczący. Praca magisterska, Politechnika
Wrocławska, 2012.
[9] W. R. Hamilton, W. E. Hamilton. Elements of quaternions. London: Longmans,
Green, & Company, 1866.
[10] D. Hatley, P. Hruschka, I. Pirbhai. Process for system architecture and requirements engineering. Addison-Wesley, 2013.
[11] HTC Korea TAEJIN Technology Co. 3A L.D.O. VOLTAGE REGULATOR (Adjustable & Fixed) LM1085, 2010.
[12] K. Inagaki. Study of leg arrangement for hexapod walking robot with gait seek
algorithm. Mobile Robotics. Solutions and Challenges. World Scientific Pub Co
Inc, 2009.
[13] HS-5585MH economical, high voltage, high torque, coreless, metal gear digital sport servo | HITEC RCD USA.
http://
hitecrcd.com/products/servos/sport-servos/digital-sport-servos/
hs-5585mh-economical-high-torque-digital-coreless-servo/product,
2014.
84
BIBLIOGRAFIA
[14] Jameco Electronics. Pushbutton Switches 104-0010-EVX, 104-0011-EVX, 1040012-EVX, 104-0013-EVX, 2005.
[15] LinkSprite. LinkSprite JPEG Color Camera Serial UART Interface, 2010.
[16] Z. Liu, L. Wang, C. P. Chen, X. Zeng, Y. Zhang, Y. Wang. Energy-efficiencybased gait control system architecture and algorithm for biped robots. Systems,
Man, and Cybernetics, Part C: Applications and Reviews, IEEE Transactions on,
42(6):926–933, 2012.
[17] T. MacRae. Cicindela formosa generosa (eastern sand tiger beetle) | flickr - photo
sharing! https://www.flickr.com/photos/49679700@N07/5720649177/, 2014.
[18] S. Madgwick. An efficient orientation filter for inertial and inertial/magnetic sensor
arrays. Report x-io and University of Bristol (UK), 2010.
[19] V. A. Makarov, E. Del Rio, W. Ebeling, M. G. Velarde. Dissipative toda-rayleigh
lattice and its oscillatory modes. Physical review – series E, 64(3; PART 2), 2001.
[20] V. A. Makarov, W. Ebeling, M. G. Velarde. Soliton-like waves on dissipative toda
lattice. International Journal of Bifurcation and Chaos, 10(5):1075–1089, 2000.
[21] S. Messlinger. Hitec Robot Servos. http://www.staff.uni-bayreuth.de/
~bt150361/cmt2007/geraete/hitec_hsr/HSR_Serial_communication.pdf,
2007.
[22] Micrel. MIC29150/29300/29500/29750 High-Current Low-Dropout Regulators,
2005.
[23] M. Patro. Analiza porównawcza systemów czasu rzeczywistego dedykowanych pod
mikrokontrolery z rdzeniem Cortex-M4, 2014. Projekt inżynierski.
[24] M. Piątek. Problemy sterowania robotami kroczącymi — generatory chodu hexapoda. Praca doktorska, Akademia Górniczo-Hutnicza Kraków, 2012.
[25] J. W. S. Rayleigh. The theory of sound. Macmillan and co., 1877.
[26] U. Saranli, M. Buehler, D. E. Koditschek. Rhex: A simple and highly mobile
hexapod robot. The International Journal of Robotics Research, 20(7):616–631,
2001.
[27] Bluetooth – Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/
Bluetooth, 2014.
[28] KAmodBTM222 � Kamami.pl - sklep internetowy dla elektroników. http://www.
kamami.pl/index.php?productID=137699, 2014.
[29] Pololu – MinIMU-9 gyro, accelerometer, and compass (L3G4200D and
LSM303DLH carrier). http://www.pololu.com/product/1264, 2014.
[30] Qt Project. http://qt-project.org/, 2014.
BIBLIOGRAFIA
85
[31] TowerPro SG90 servo specifications and reviews. http://www.servodatabase.
com/servo/towerpro/sg90, 2014.
[32] Sharp Corporation. GP2D12 Optoelectronic Device, 2005.
[33] A. Silberschatz, P. B. Galvin, Z. Płoski, J. L. Peterson. Podstawy systemów operacyjnych. Wydawnictwa Naukowo-Techniczne, 1996.
[34] STMicroelectronics. Getting started with software and firmware environments for
the STM32F4DISCOVERY Kit, 2011.
[35] STMicroelectronics. ST2378E 8-bit dual supply 1.71 to 5.5 V level translator with
I/O VCC ± 15 KV ESD protection, 2012.
[36] STMicroelectronics. STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx
and STM32F43xxx advanced ARM®-based 32-bit MCUs, 2014.
[37] K. Tchoń, A. Mazur, I. Dulęba, R. Hossa, R. Muszyński. Manipulatory i roboty
mobilne. Akademicka Oficyna Wydawnicza PLJ, 2000.
[38] HSR-8498HB HMI standard robot servo | HITEC RCD USA.
http://
hitecrcd.com/products/servos/discontinued-servos-servo-accessories/
hsr-8498hb-hmi-standard-robot-servo/product, 2014.
[39] M. Toda. Theory of Nonlinear Lattices. Springer, wydanie 2, 1989.
[40] D. M. Wilson. Insect walking. Annual Rev. Entomology, strony 103–122, 1996.
[41] W. A. Wolovich. Robotics: Basic Analysis and Design. Oxford University Press,
1995.
[42] T. Zielińska. Maszyny kroczące. Wydawnictwo Naukowe PWN, 2013.

Podobne dokumenty