Instytut Cybernetyki Technicznej Praca Magisterska Mały robot mobilny obserwujący otoczenie przy pomocy kamery Tomasz Salamon Promotor: dr Marek Wnuk Ocena: Wrocław 2005 Dedykuje RODZICOM Spis treści Spis rysunków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Spis tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1. Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1. Cel i zakres pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Realizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 2. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3. Konstrukcja mechaniczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4. Część elektroniczna . . . . . . . . . . 4.1. Sterownik . . . . . . . . . . . . . . 4.2. Układ napędowy . . . . . . . . . . 4.3. Kodery . . . . . . . . . . . . . . . . 4.4. Czujniki . . . . . . . . . . . . . . . 4.4.1. Moduł kompasu . . . . . . . 4.4.2. Moduł sonaru . . . . . . . . 4.4.3. Dalmierz optyczny . . . . . 4.5. Kamera . . . . . . . . . . . . . . . 4.6. Moduł transceivera . . . . . . . . . 4.6.1. Opis ogólny układu . . . . . 4.6.2. Rozwiązanie układowe . . . 4.6.3. Format transmisji radiowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 18 20 22 24 24 25 26 28 30 30 32 35 5. Oprogramowanie . . . . . . . . . . . . . . . 5.1. Środowisko programistyczne . . . . . . . 5.2. Mikrokontrolery - oprogramowanie . . . 5.3. Opis ważniejszych procedur . . . . . . . 5.3.1. Sterowanie serwomechanizmami . 5.3.2. Obsługa czujników . . . . . . . . 5.3.3. Sterowanie układem napędowym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 36 38 38 40 42 6. Przebieg i wyniki eksperymentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 A. 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spis rysunków 2.1 2.2 2.3 2.4 Model podwozia Rocker-Bogi . . . . . . . . . Sześciokołowy robot Fido . . . . . . . . . . . Robot SIMROV2 podczas obrotu w miejscu Widok robota w fazie konstrukcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 10 11 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 Widok ogólny konstrukcji robota . . . . . . . . . . . . Widok robota z boku . . . . . . . . . . . . . . . . . . Widok robota z przodu . . . . . . . . . . . . . . . . . Widok robota z tyłu . . . . . . . . . . . . . . . . . . . Budowa zawieszenia konstrukcji . . . . . . . . . . . . Zachowanie się robota podczas najazdu na przeszkodę Budowa wewnętrzna serwomechanizmu HS-311 . . . . Sprzężenie serwomechanizmu z kołem zewnętrznym . Montaż układów kół skrętnych do konstrukcji . . . . . Ustawienie kół podczas obrotu w miejscu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 13 13 14 14 15 15 16 17 17 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 Główne funkcje sterowników . . . . . . . . . . . . . . . . . . . Poszczególne bloki sterownika . . . . . . . . . . . . . . . . . . . Silnik RH158-12-200 . . . . . . . . . . . . . . . . . . . . . . . . Struktura wewnętrzna mostka L298N . . . . . . . . . . . . . . Zależność prędkości silnika od sterującego sygnału PWM . . . Zasada działania układu AS5040 . . . . . . . . . . . . . . . . . Sprzężenie kodera z silnikem . . . . . . . . . . . . . . . . . . . Widok i opis wyprowadzeń modułu CMPS03 . . . . . . . . . . Widok i opis wyprowadzeń modułu SFR08 . . . . . . . . . . . Charakterystyka przetwarzania czujnika GP2Y02A02YK . . . Wynik aproksymacji charakterystyki czujnika GP2Y02A02YK Widok dalmierza GP2Y02A02YK . . . . . . . . . . . . . . . . Bezprzewodowa kamera WS-212AS wraz z odbiornikiem . . . . Obrotowy korpus kamery . . . . . . . . . . . . . . . . . . . . . Moduł CC1000 . . . . . . . . . . . . . . . . . . . . . . . . . . . Schemat modułu CC1000 . . . . . . . . . . . . . . . . . . . . . Schemat radiomodemu . . . . . . . . . . . . . . . . . . . . . . Format ramki przesyłanych danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 19 20 21 21 22 23 24 25 26 27 27 28 29 30 30 33 35 5.1 5.2 5.3 5.4 5.5 Sposób wyliczenia kątów skętu kół . . . . . . . . . . . Format instrukcji sterującej procesorem pomocniczym Sygnał sterujący serwomechanizmem . . . . . . . . . . Odpowiedź silnika na skok jednostkowy . . . . . . . . Symulacja obiektu silnika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 39 39 44 44 6.1 6.2 6.3 6.4 6.5 Pomiar odległości do obiektu - seria 1 . . . . . . . . Pomiar odległości do obiektu - seria 2 . . . . . . . . Robot podczas obrotu w miejscu . . . . . . . . . . . Robot podczas pokonywania przeszkody . . . . . . . Widok z kamery zarejestrowany podczas pracy nocą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 46 47 48 49 A.1 A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9 Schemat układów radiomodemów . . Schemat płytki procesora ATmega128 Schemat sterownika . . . . . . . . . . Widok płytki sterownika . . . . . . . Widok płytki procesora ATmega128 . Widok płytki radiomodemu . . . . . . Widok ścieżek płytki sterownika . . . Widok ścieżek płytki procesora . . . Widok ścieżek płytki radiomodemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 55 56 57 57 57 58 58 58 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spis tablic 4.1 4.2 4.3 4.4 4.5 4.6 Parametry silników RH158-12-200 . . . . . . . . Sterowanie silnikiem za pomocą mostka L298N . Zawartość rejestrów kompasu CMPS03 . . . . . Zawartość rejestrów sonaru SFR08 . . . . . . . . Niektóre komendy konfiguracyjne sonaru SFR08 Parametry kamery i odbiornika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 22 24 25 26 29 6.1 6.2 Wyniki pierwszej serii pomiarów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wyniki drugiej serii pomiarów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 47 Rozdział 1 Wstęp Od końca lat sześćdziesiątych ubiegłego wieku kiedy to został stworzony pierwszy, autonomiczny robot mobilny - Shakey, robotyka a w szczególności robotyka mobilna, posunęła się daleko naprzód. Inteligentne maszyny znajdują coraz więcej zastosowań, podbijają kosmos, trafiają do fabryk oraz zwykłych domów. Używane są w systemach dozoru, do penetracji i identyfikacji nieznanego terenu. Powstają, bo mają pomagać i zastępować człowieka w rzeczach niebezpiecznych, nudnych oraz precyzyjnych, gdyż potrafią pracować cały czas z tą samą jakością, niezależną od pory dnia czy istniejącego zagrożenia. Z wielu typów robotów mobilnych dużą, popularną grupę stanowią roboty zdalnie sterowane, które oczywiście posiadając pewną autonomię, wiele zadań wykonują samodzielnie. Rola człowieka sprowadza się jedynie do czuwania nad prawidłowym przebiegiem całej operacji oraz podejmowania krytycznych decyzji. Mając do dyspozycji robota wyposażonego w odpowiedni do otoczenia system lokomocyjny, czujniki oraz odpowiednią kamerę, człowiek może na odległość badać, obserwować środowiska gdzie jego fizyczna obecność jest niemożliwa, niebezpieczna, zagrożona. Słynny przykład takiego zastosowania robotów mobilnych stanowią misje robotów marsjańskich, dzięki którym zebrano tak wiele informacji o miejscach gdzie jeszcze nie stanęła ludzka stopa. 1.1. Cel i zakres pracy Podstawowym celem pracy była budowa mobilnego robota wyposażonego w kamerę umożliwiającą obserwację otoczenia w jakim robot miałby się poruszać. Informacje o środowisku zebrane przy pomocy kamery oraz innych sensorów powinny być przesyłane drogą radiową do sterownika zewnętrznego lub komputera PC. Robot powinien mieć własne źródło zasilania pozwalające mu pracować nieprzerwanie przez czas nie krótszy niż dwie godziny. System lokomocyjny robota ma umożliwiać mu także poruszanie się po niewielkich nierównościach podłoża. 1.2. Realizacja Realizacja powyższych założeń musiała zostać poprzedzona analizą i wyborem odpowiedniego systemu lokomocyjnego. To właśnie typ podwozia definiował kierunek kolejnych prac 8 Mały robot mobilny obserwujący otoczenie przy pomocy kamery konstrukcyjnych. Układ jezdny robota zbudowano w oparciu o podwozie sześciokołowe, którego cztery zewnętrzne koła są skrętne, a dwa środkowe to koła napędowe. Realizacja właśnie tych założeń, ze względu na pewien stopień skomplikowania, pochłonęła znaczną część czasu. Dopiero po zbudowaniu wózka rozpoczęto dalsze prace nad: • mechanizmem sterowania kamerą umożliwiającym poruszanie nią w pionie i poziomie; • budową pary radiomodemów zapewniających bezprzewodową komunikację z robotem oraz dwustronne przesyłanie danych; • budową sterownika pokładowego i zewnętrznego sterownika pomocniczego; • budową zasilacza impulsowego współpracującego z pokładowym akumulatorem żelowym w jaki wyposażono robota oraz opracowaniem odpowiedniego układu jego ładowarki; • opracowaniem odpowiednich procedur sterowania wynikających z konstrukcji robota; • przeprowadzeniu badań, testów i eksperymentów wstępnych; • napisaniem odpowiedniego oprogramowania zajmującego się sterowaniem robota, obsługą czujników i komunikacją ze sterownikiem zewnętrznym; • przeprowadzeniem testów i eksperymentów końcowych; • opracowaniem kilku algorytmów autonomicznego poruszania się robota. Niniejsze opracowanie opisuje budowę małego robota mobilnego, posiadającego cechy robota inspekcyjnego, którego konstrukcję w znacznym stopniu wzorowano na robotach znanych nam z eksploracji Marsa. Opis konstrukcji mechanicznej robota zawarto w Rozdziale 3. Szczególną uwagę zwrócono tu na własnośći układu jezdnego oraz pewne wynikające ograniczenia. Rozdział 4 poświęcono opisowi części elektronicznej. Zawarto w nim opisy sterownika robota, układu napędowego, oraz czujników w jakie został wyposażony. Wskazano tu również na przesłanki jakie kierowały doborem poszczególnych podzespołów. Oba rozdziały uzupełnione zostały zdjęciami oraz poglądowymi rysunkami. Oprogramowanie robota zostało opisane w Rozdziale 5. Po wstępie naświetlającym strukture oprogramowania przedstawiono sposób w jaki realizowane są poszczególne funkcje robota, jego komunikacja z zewnętrznym sterownikiem oraz sposób obsługi czujników. Niektóre opisy uzupełniono fragmentami rzeczywistego kodu źródłowego napisanego w jezyku C. W Rozdziale 6 opisano sposób realizacji, przebieg oraz wyniki doświadczeń i eksperymentów przeprowadzonych przy wykorzystaniu gotowej konstrukcji robota. Dodatek A zawiera schematy ideowe, widoki zaprojektowanych płytek oraz schematy montażowe. Rozdział 2 Wprowadzenie Pierwowzorem układu jezdnego konstruowanego robota było podwozie opracowane przez inżyniera mechanika Don’a Bicklera[1] w Jet Propulsion Laboratory (JPL) mieszczącego się w California Institute of Technology. Podwozie to, zwane Rocker-Bogi (Rys. A.9), opatentowane przez JPL w 1989 r. [2] wykorzystywane było przez NASA w budowie wielu robotów, w tym we wszystkich robotach marsjańskich. Rys. 2.1. Model podwozia Rocker-Bogi Dzięki specyficznej konstrukcji takie sześciokołowe zawieszenie umożliwiać miało poruszanie się robota nawet po bardzo nierównej, kamienistej powierzchni. Z oczywistych względów, zanim pierwszy robot wyposażony w takie podwozie mógł zostać wysłany w przestrzeń kosmiczną, musiało ono zostać poddane szeregowi testów i eksperymentów, zwłaszcza w trudnych warunkach przypominających kamienistą powierzchnię Marsa. W laboratoriach NASA powstało szereg robotów o takim podwoziu lub jego różnych modyfikacjach, które następnie musiały sprostać trudnym, pustynnym warunkom. 10 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Na Rys. 2.2 przedstawiono robota FIDO - jednego z pierwszych robotów z takim układem lokomocji, odbywającego testy na pustyni Nevada. Rys. 2.2. Sześciokołowy robot Fido Takie sześciokołowe zawieszenie wymaga specjalnego sterowania. Specyficzny dla takiego podwozia sposób ustawienia zewnętrznych kół sterujących podczas obrotu robota w miejscu przedstawia Rys. 2.3. Rys. 2.3. Robot SIMROV2 podczas obrotu w miejscu Rozdział 2. Wprowadzenie 11 W niniejszej pracy przedstawiono opis konstrukcji robota mobilnego o układzie lokomocyjnym wzorowanym na podwoziu Rocker-Bogi. Z oczywistych względów wynikających z ograniczeń w dostępie do profesjonalnych, często bardzo drogich, materiałów tudzież narzędzi, zbudowana konstrukcja układu jezdnego robota odbiega parametrami od swych pierwowzorów zbudowanych w laboratoriach NASA. Niemniej jednak, mając na uwadze założenia co do środowiska pracy konstruowanego robota, stanowi ona zwartą, solidną konstrukcję z łatwością spełniającą stawiane jej oczekiwania. W niniejszym dokumencie pominięto dokładną analizę mechaniczno - kinematyczną takiego typu zawieszenia z racji mnogości tego typu opracowań chociażby w [1] i [3], skupiono sie natomiast na przedstawieniu jej możliwości, zalet, a także pewnych trudności wynikających ze sposobu sterowania. Praca przedstawia przebieg i sposób powstawania konstrukcji mechanicznej i elektronicznej robota, opisuje jego możliwości oraz sposób w jaki został oprogramowany. Dokument ten podsumowuje pewien zamknięty etap prac wykonanych nad robotem, którego możliwości ciągle są i będą poszerzane, poprzez rozwój oprogramowania, udoskonalanie konstrukcji czy wyposażenie w kolejne czujniki. Poniższy Rys. 2.4 przedstawia zdjęcie budowanego robota wykonane podczas końcowej fazy konstrukcji. Rys. 2.4. Widok robota w fazie konstrukcji Rozdział 3 Konstrukcja mechaniczna Widok ogólny konstrukcji robota przedstawiono na Rys. 3.1. W celu uzyskania wytrzymałej konstrukcji o możliwie małym ciężarze, większość z jej komponentów składowych została wykonana z aluminium. We wszystkich miejscach konstrukcji związanych z ruchem obrotowym zostały zastosowane łożyska toczne. Większość mocowań łożysk wykonano z aluminium. W miejscach narażonych na większe obciążenia stosowano mocowania wytoczone z mosiądzu. Układ jezdny bazuje na sześciu kołach zaopatrzonych w gumowe opony, które zwiększają ich Rys. 3.1. Widok ogólny konstrukcji robota przyczepność do podłoża. W konstrukcji wykorzystano koła zakupione w sklepie ze sprzętem AGD jako części zamienne do odkurzaczy. W cztery zewnętrzne koła, po odpowiednim rozwierceniu, wtłoczono po dwa łożyska toczne. Dwa pozostałe, zfrezowano w ich środkowej części do płaskiej powierzchni, do której przykręcono tuleje w których osadzono wały silników napędowych. Kamerę za pomocą dwóch łożysk osadzono w aluminiowym korpusie, który umożliwia jej obrót w pionie, cały korpus może obracać się w poziomie dzięki łożysku osadzonemu na górnej, poziomej płycie pleksi. Płyta ta zamocowana jest na podwoziu za pomocą czterech wsporników dystansowych. Na kolejnych rysunkach: Rys. 3.2, Rys. 3.3 i Rys. 3.4, wyszczególnione zostały części składowe konstrukcji robota. Rozdział 3. Konstrukcja mechaniczna Rys. 3.2. Widok robota z boku 1. 2. 3. 4. 5. - serwomechanizmy modelarskie; łożyska z mocowaniami; akumulator żelowy; płyta z pleksi; wachacze z aluminium. Rys. 3.3. Widok robota z przodu 1. 2. 3. 4. 5. 6. - silniki napędowe; przekładnie planetarne; kamera; moduł sonaru; łożyska z mocowaniami; wsporniki dystansowe. 13 14 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Rys. 3.4. Widok robota z tyłu 1. 2. 3. 4. - łożyska z mocowaniami; widełki aluminiowe; wsporniki dystansowe; obrotowy korpus kamery. Akumulator oraz płytki sterownika i zasilacza, umieszczono na kwadratowej, aluminiowej płycie zamocowanej poprzez łożyska do trzech charakterystycznych punktów robota. Jak pokazuje Rys. 3.5, punkty te leżą na planie trójkąta równobocznego. Cała konstrukcja robota, w tym także górna płyta poprzez cztery wsporniki dystansowe, zawieszona jest na łożyskach umieszczonych właśnie w tych punktach. W środku tak powstałego trójkąta znajduje się środek ciężkości całej konstrukcji robota. Rys. 3.5. Budowa zawieszenia konstrukcji Rozdział 3. Konstrukcja mechaniczna 15 Każde z tych trzech miejsc mocowania konstrukcji leży w połowie odcinka łączącego dwa koła podwozia. Dzięki temu, wszelkie podniesienia kół powstałe w wyniku pokonywania przeszkód, przenoszone są połowicznie na konstrukcję robota - Rys. 3.6. Rys. 3.6. Zachowanie się robota podczas najazdu na przeszkodę Skręty kołami zewnętrznymi, a także obroty kamerą w pionie i poziomie, realizowane są za pomocą serwomechanizmów modelarskich. W uproszczeniu, serwomechanizm składa się z silnika prądu stałego o dużej sprawności oraz przekładni mechanicznej, której zadaniem jest redukcja wysokich obrotów silnika oraz zapewnienie dużego momentu obrotowego. W konstrukcji użyto sześciu standardowych serwomechanizmów typu HS-311 firmy Hitec, o momencie znamionowym 3, 5 kg · cm, których zakres obrotu wynosił nieco ponad 180◦ . Budowę wewnętrzną takiego serwomechanizmu przedstawia Rys. 3.7. Rys. 3.7. Budowa wewnętrzna serwomechanizmu HS-311 16 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Na Rys. 3.8 przedstawiono przekrój poprzeczny połączenia serwomechanizmu z jednym z zewnętrznych kół skrętnych. W ten sam sposób zrealizowane jest sprzężenie serw z pozostałymi kołami oraz obrotowym korpusem kamery. Widoczna na rysunku pionowa oś obrotowa, została na końcu odpowiednio zfrezowana i osadzona na wcisk w wyprofilowanym otworze. Wystające końce osi poziomej po nagwintowaniu zaopatrzone zostały w ozdobne nakrętki. Cały układ osadzony jest w aluminiowym profilu mocującym do którego przykręcono serwa i który stanowi punkt mocowania układu do konstrukcji. Rys. 3.8. Sprzężenie serwomechanizmu z kołem zewnętrznym 1. 2. 3. 4. 5. 6. 7. 8. 9. - serwo z końcówką tarczową; koło z oponą; aluminiowe widełki; łożyska; tuleje dystansowe; mocowanie łożyska; oś obrotowa pionowa; oś obrotowa pozioma; aluminiowy profil mocujący. W celu zachowania jednotorowości kół przednich i tylnych, układy kół przednich przykręcono do konstrukcji krótszym bokiem profilu natomiast tylne dłuższym (Rys. 3.9). Rozdział 3. Konstrukcja mechaniczna 17 Rys. 3.9. Montaż układów kół skrętnych do konstrukcji Dodatkową zaletą konstrukcji opartych o podwozie sześciokołowe, oprócz oczywistej możliwości przewożenia większych ciężarów, jest bardzo dobra stabilizacja toru jazdy robota. Zewnetrzne koła skrętne ustawione do jazdy na wprost, doskonale stabilizują prostoliniowy tor jazdy robota nawet przy nieznacznej różnicy w prędkościach kół napędowych umieszczonych pośrodku. Zewnetrzne koła ustawione pod odpowiednim katem (Rys. 3.10), także dobrze stabilizuja obrót Rys. 3.10. Ustawienie kół podczas obrotu w miejscu robota w miejscu, nawet podczas ruchu robota po stosunkowo nierównej nawierzchni. Do wad zaliczyć można jedynie trudniejsze sterowanie robotem oraz pewien stopień skomplikowania mechaniki konstrukcji. Rozdział 4 Część elektroniczna 4.1. Sterownik Konstruowany robot posiada wewnetrzny sterownik nadający robotowi charakter autonomicznego. Sterownik dokonuje pomiaru wszystkich niezbędnych parametrów ruchu, wylicza i wymusza odpowiednią prędkość kół napędowych i odpowiedni skręt kół sterujących. Dzięki temu robot potrafi samodzielnie poruszać się w otoczeniu, a także odpowiednio reagować na napotkane przeszkody. Sterownik ponadto zapewnia radiową komunikację ze sterownikiem zewnętrznym, umożliwiającym przejęcie kontroli nad robotem przez operatora lub komuter PC. Główne funkcje sterowników przedstawione zostały w postaci schematu blokowego na Rys. 4.1. Rys. 4.1. Główne funkcje sterowników Rozdział 4. Część elektroniczna 19 Poszczególne bloki wchodzące w skład układu elektronicznego sterownika pokładowego przedstawiono na Rys. 4.2. Rys. 4.2. Poszczególne bloki sterownika ”Sercem” całego układu elektronicznego jest nowoczesny mikrokontroler ATmega128 zawierający między innymi: • dwa 8-bitowe timery/liczniki z osobnymi preskalerami, mogące dodatkowo pracować w trybie porównania; • dwa 16-bitowe timery/liczniki z osobnymi preskalerami, mogące dodatkowo pracować w trybie porównania lub przechwytywania; • licznik czasu rzeczywistego współpracyjący z osobnym zewnętrznym oscylatorem; • dwa 8-bitowe kanały PWM; • sześć kanałów PWM z programowaną rozdzielczością od 2 do 16 bitów; • sześć kanałów 10 bitowego przetwornika A/C; • podwójny USART; • sprzętowy interfejs I2 C; • sprzętowy interfejs SPI; • 128 kB pamięci typu FLASH; • 4 kB pamięci typu SRAM; • 4 kB pamięci EEPROM. 20 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Fizycznie, układ sterownika podzielony jest na trzy osobne płytki: • płytkę radiomodemu; • płytkę zasilacza impulsowego (przetwornicy); • płytkę sterownika właściwego, obejmującą: ◦ mikrokontroler główny ATmega128; ◦ mikrokontroler pomocniczy ATmega8; ◦ sterownik silników L298N; ◦ złącza serwomechanizmów; ◦ złącza czujników; ◦ złącza magistral I2 C, SPI, RS232; ◦ złącze interfejsu JTAG do programowania uP. Szczegółowy schemat układu wraz z widokami płytek zamieszczono w Dodatku A. 4.2. Układ napędowy Do budowy układu napędowego konstruowanego robota wykorzystano dwa silniki typu RH158-12-2001 produkcji Micromotors (Rys. 4.3), których parametry zestawiono w Tabeli 4.1. Rys. 4.3. Silnik RH158-12-200 Tabela 4.1. Parametry silników RH158-12-200 Napięcie Pobór prądu przy max. obciążeniu Pobór prądu bez obciążenia Prędkość przy max. obciążeniu Prędkość bez obciążenia Przekładnia Max. moment 1 12 V 580 mA < 140 mA 23 rpm 33 rpm 198,5:1 100 Ncm Silniki bezpłatnie ofiarowała firma DiscoTECH z Warszawy - www.discotech.waw.pl Rozdział 4. Część elektroniczna 21 Do bezpośredniego sterowania silnikami użyto podwójnego mostka L298N, umożliwiającego sterowanienie dwoma silnikami za pomocą sygnałów PWM i sygnałów wyboru kierunku. Jego strukturę wewnętrzną przedstawiono na Rys. 4.4. Rys. 4.4. Struktura wewnętrzna mostka L298N Wejścia sterujące EnA i EnB układu L298N zostały dołączone do wyjść PWM mikrokontrolera, na których generowany jest sygnał o stałej częstotliwości. Programowa zmiana jego współczynnika wypełnienia decyduje o prędkości obrotowej silników. Poniższy Rys. 4.5, przedstawia rzeczywistą zależność wpływu sygnału PWM na prędkość silników podczas poruszania się robota. Prędkość zmierzona na podstawie impulsów z koderów przeliczona została na prędkość obrotową kół napędowych, oraz wynikającą z niej prędkość postępową robota. Rys. 4.5. Zależność prędkości silnika od sterującego sygnału PWM 22 Mały robot mobilny obserwujący otoczenie przy pomocy kamery O kierunkach obrotów silników decydują stany podawane na wejścia In1, In2 oraz In3, In4. W Tabeli 4.2 przedstawiono sekwencję sygnałów sterujących silnikiem dołączonym do wyjść Out1 i Out2 drivera L298N. Podobnie zrealizowane jest sterowanie drugim z silników dołączonym do wyjść Out3 i Out4. Tabela 4.2. Sterowanie silnikiem za pomocą mostka L298N 4.3. Kodery Ponieważ użyte w układzie napędowym silniki nie posiadały wbudowanych koderów, koniecznym stało się wyposażenie powyższych silników w odpowiednie układy pełniące taką rolę. Do tego celu użyte zostały 10 bitowe, magnetyczne kodery AS5040 produkowane przez Austriamicrosystems. Charakteryzują się one m.in. : • dwoma rodzajami informacji wyjściowej: ◦ interfejs szeregowy; ◦ wyjście typu PWM. • trzema programowanymi rodzajami sygnałów wyjściowych: ◦ - kwadraturowe A i B; ◦ - impulsy + kierunek obrotu; ◦ - 3 fazowe (np.dla silników bezszczotkowych). • programowalną przez użytkownika rozdzielczością 7, 8, 9 lub 10 bitów; • maksmalną prędkością pracy do 10 000 rpm. Rys. 4.6. Zasada działania układu AS5040 Szczegółowy opis można znaleźć w nocie aplikacyjnej [4]. Użytkownik drogą programowania może skonfigurować rozdzielczość oraz odpowiedni typ sygnałów wyjściowych. Domyślnie, Rozdział 4. Część elektroniczna 23 układy te ustawione mają 10 bitową rozdzielczość i tryb generacji sygnałów kwadraturowych. Oznacza to, że na pełen obrót współpracującego z nimi magnesu (Rys. 4.6), układ generuje dwa przesunięte w fazie sygnały po 256 impulsów. Właśnie tak skonfigurowane układy zostały zaadaptowane do pracy z silnikami napędowymi robota. Sposób montażu ilustruje Rys. 4.7. Rys. 4.7. Sprzężenie kodera z silnikem 1. 2. 3. 4. 5. magnes; tuleja mocująca; uklad AS5040; płytka drukowana; obejma mocująca. 24 Mały robot mobilny obserwujący otoczenie przy pomocy kamery 4.4. Czujniki 4.4.1. Moduł kompasu Użyty w projekcie moduł kompasu CMPS03 (Rys. 4.8) jest układem zaprojektowanym specjalnie do zastosowań w robotyce, głównie do celów nawigacji. Zbudowany został w oparciu o magnetyczne sensory Philipsa KMZ51 i mikroprocesor PIC 16F872 o bardzo niskim poborze prądu. Układ zasilany jest napięciem 5V i nominalnie pobiera 15mA prądu. Rys. 4.8. Widok i opis wyprowadzeń modułu CMPS03 Informacje o aktualnym kącie obrotu możemy uzyskać na dwa sposoby : • poprzez wyjście PWM (Pin 4) na którym dostępny jest sygnał o współczynniku wypełnienia proporcjonalnym do kąta obrotu: od 1ms dla 0◦ do 36,99ms dla 359.9◦ • poprzez odczyt odpowiednich rejestrów mikroprocesora PIC za pomocą magistrali I2 C w których dostępne są już gotowe, wstępnie przetworzone informacje Opis zawartości dostępnych rejestrów wraz z ich adresami zestawiono w Tabeli 4.3: Tabela 4.3. Zawartość rejestrów kompasu CMPS03 Adres 0 1 2, 3 4, 5 6, 7 8, 9 10, 11 15 Funkcja Numer wersji oprogramowania Zgrubna, bajtowa informacja od 0 dla 0◦ do 255 dla 359.9◦ Informacja dokładna w postaci słowa 2 bajtowego od 0 dla 0◦ do 3599 dla 359.9◦ Test Wewnętrzny - Sensor1 Test Wewnętrzny - Sensor2 Test Wewnętrzny - kalibracja wartości sensora 1 Test Wewnętrzny - kalibracja wartości sensora 2 Kalibracja W celu prawidłowego funkcjonowania moduł kompasu wymaga zamontowania go w pozycji poziomej. W konstrukcji robota moduł ten został zamontowany pod górną płytą z pleksi. Główny sterownik robota komunikuje się z kompasem za pomocą magistrali I2 C, z poziomu której układ ten dostępny jest pod fabrycznie przypisanym adresem C0h. Rozdział 4. Część elektroniczna 25 4.4.2. Moduł sonaru Jednym z głównych czujników w jakie został wyposażony robot jest moduł sonaru SFR08, którego widok przedstawiono na Rys. 4.9. Układ ten zbudowano w oparciu o mikroprocesor PIC 16F872 gwarantujący niski pobór prądu, (typowo od 12mA w trybie skanowania do 3mA w trybie oczekiwania). Komunikacja z modułem odbywa się za pomocą magistrali I2 C i w obsłudze przypomina komunikację z szeregową pamięcią typu 24xx. Sonar, dostępny jest z poziomu magistrali pod adresem E0h, lecz adres ten w razie potrzeby można zmienić zmieniając wartość w odpowiednich rejestrach. Rys. 4.9. Widok i opis wyprowadzeń modułu SFR08 Dzięki wyposażeniu sonaru w fotorezystor, oprócz informacji o odległości do najbliższej przeszkody, możemy odczytać z modułu informację o natężeniu światła padającego na układ. Opis zawartości rejestrów sonaru wraz z ich adresami zestawiono w Tabeli 4.4. Wszystkie 36 rejestrów układu mogą być z powodzeniem odczytywane, jednak tylko pierwsze trzy nadają się również do zapisu. Odczytując zawartość rejestru o adresie 1, uzyskujemy informację o natężeniu światła padającego na sonar. Tabela 4.4. Zawartość rejestrów sonaru SFR08 Adres 0 1 2 3 .. . Odczyt Wersja oprogramowania Foto Sensor 1 echo MSB 1 echo LSB .. . Zapis Konfiguracja Rejestr wzmocnienia Rejestr zasięgu — .. . 34 35 17 echo MSB 17 echo LSB — — Informacja ta odświeżana jest przy każdym pomiarze odległości i zmienia się od 2-3 dla całkowitej ciemności do 248 dla bardzo silnego światła padającego na moduł. Wpisując informację do tego rejestru zmieniamy dopuszczalne wzmocnienie analogowe układu. Odczytując kolejne dwa rejestry (2 i 3), uzyskamy 2-bajtowy wynik ostatniego pomiaru odległości, w rejestrze 2 znajduje sie starszy bajt (MSB) informacji, a w rejestrze 2 młodszy (LSB). W zależności od konfiguracji, powyższy wynik pomiaru może zawierać informację w calach, centymetrach lub 26 Mały robot mobilny obserwujący otoczenie przy pomocy kamery mikrosekundach. Wpisując informację do rejestru 2 wpływamy na dopuszczalny zasięg dokonywanych pomiarów. Odczyt rejestru 0 niesie ze sobą informację o wersji oprogramowania modułu. W czasie wykonywania pomiaru, sonar ustawia magistralę w stan wysoki. Próba odczytu w tym czasie wersji oprogramowania (rejestru 0) kończy się zwrotem wartości 255 (FFh). Udana próba odczytu rejestru 0, świadczy o zakończeniu przez moduł przetwarzania informacji i uaktualnieniu rejestrów zawierających dane o odległości. Rozpoczęcie pomiaru następuje wraz z chwilą zapisu do rejestru konfiguracyjnego (rejestr 0) odpowiedniej komendy. Pełny spis dostępnych komend i szczegółowy opis modułu znaleźć można w nocie katalogowej [5]. Kilka najczęściej używanych zestawiono w Tabeli 4.5. Tabela 4.5. Niektóre komendy konfiguracyjne sonaru SFR08 KOMENDA [hex] 0x50 0x51 0x52 AKCJA Pomiar - wynik zwracany w calach Pomiar - wynik zwracany w centymetrach Pomiar - wynik zwracany w mikrosekundach 0xA0 0xA5 0xAA 1 sekwencja dla zmiany adresu I2 C 3 sekwencja dla zmiany adresu I2 C 2 sekwencja dla zmiany adresu I2 C 4.4.3. Dalmierz optyczny Kolejnym z czujników w jakie został wyposażony robot jest odbiciowy sensor GP2Y02A02YK produkcji SHARP’a. Umożliwia on pomiar odległości w zakresie od 20 do 150cm. Obsługa czujnika sprowadza się do pomiaru napięcia wystawianego przez sensor, którego zależność od odległości przedstawia charakterystyka na Rys. 4.10. Rys. 4.10. Charakterystyka przetwarzania czujnika GP2Y02A02YK Rozdział 4. Część elektroniczna 27 Rys. 4.11. Wynik aproksymacji charakterystyki czujnika GP2Y02A02YK Ponieważ powyższa charakterystyka nie jest liniowa, do wyliczenia odległości przeszkody odbijającej światło posłużono się jej aproksymacją (Rys. 4.11) wielomianem2 piątego stopnia (4.1). Y [mm] = −11.395x5 + 105.11x4 − 385.15x3 + 710.25x2 − 690.56x + 333.08 (4.1) gdzie x – napięcie wystawiane przez czujnik Napięcie na czujniku mierzone jest za pomocą wewnętrznego przetwornika A/C mikroprocesora sterującego, który przy pomocy procedury zawierającej powyższy wielomian wylicza dystans do przeszkody. Czujnik, jak to pokazuje Rys. 4.12, został umieszczony na obrotowym korpusie sprzężonym mechanicznie z kamerą. Rys. 4.12. Widok dalmierza GP2Y02A02YK 2 Postać wielomianu opracowana została przez jednego z użytkowników forum dyskusyjnego portalu www.avrfreaks.net 28 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Takie rozmieszczenie obu widocznych na zdjęciu sensorów, daje dodatkową możliwość pomiaru odległości do obiektów obserwowanych za pośrednictwem kamery. Wzbogaca to możliwości konstruowanego robota w cechy robota inspekcyjnego. Ponadto, przy najczęstszym, poziomym ustawieniu kamery istnieje możliwość wzajemnej weryfikacji danych otrzymanych z obu czujników, co jak wykazały badania i eksperymenty szerzej opisane w Rozdziale 6, ma swoje uzasadnienie. W zależności od rodzaju przeszkody (materiału z jakiego jest zbudowana, koloru powierzchni, itp.), dane pomiarowe każdego z tych czujników mogą być obarczone różnym błędem. Pomiary dokonane przez dwa różne czujniki, plus dodatkowa informacja w postaci obrazu z kamery, pozwala operatorowi w sposób wiarygodny i dokładny ocenić dystans dzielący robota od obiektu. 4.5. Kamera W konstrukcji robota użyta została bezprzewodowa, kolorowa kamera typu WS-212AS 3 firmy JMK. Kamera posiada wbudowany nadajnik o mocy 50 mW. Obraz za pomocą odpowiedniego odbiornika można oglądać na ekranie telewizora, komputera wyposażonego w kartę TV lub innego urządzenia posiadającego wejście Video. Na Rys. 4.14 przedstawiono widok całego zestawu. Rys. 4.13. Bezprzewodowa kamera WS-212AS wraz z odbiornikiem Kamera wyposażona jest w zestaw dwunastu podświetlających diod IRED, umożliwiających pracę kamery w całkowitej ciemności. Podświetlanie włączane jest automatycznie przy spadku zewnętrznego oświetlenia poniżej określonej wartości. Dokładne parametry powyższego zestawu zestawiono w poniższej Tabeli 4.6. 3 Kamerę wraz z odbiornikiem nabyto dzięki uprzejmości firmy Multitech http://multitech.pl, która to udzieliła na ten zestaw bardzo dużego rabatu. Rozdział 4. Część elektroniczna 29 Tabela 4.6. Parametry kamery i odbiornika System Rozdzielczość Czułość Automatyczna migawka Częstotliwość pracy Moc wyj. nadajnika Zasięg Zasilanie PAL 380 linii TV 0,1 LUX (F 2.0) 1/60 sec - 1/6000 sec 900 - 1200 MHz 50 mW do 100m w otwartej przestrzeni DC 9 - 12V (do 500 mA) Kamera, jak to ukazuje Rys. 4.14, została zamocowana za pomocą łożysk tocznych w obrotowym korpusie i sprzężona mechanicznie z serwomechanizmem umożliwiającym obracanie kamerą w kierunku pionowym. Cały korpus osadzony na łożysku zamocowanym do górnej płyty robota, może być obracany w kierunku poziomym za pomocą kolejnego serwomechanizmu. Rys. 4.14. Obrotowy korpus kamery Powyższy mechanizm, ze względu na zastosowanie serwomechanizmów, pozwala na obracanie kamerą w prawo, w lewo i do góry o kąt maksymalnie 90◦ . Obrót kamery w dół ograniczony jest do ok. - 60◦ ze względu na śrubę mocującą korpus do łożyska. Niemniej jednak spoglądanie kamerą bezpośrednio pod siebie nie wydaje się mieć konkretnego zastosowania. 30 Mały robot mobilny obserwujący otoczenie przy pomocy kamery 4.6. Moduł transceivera 4.6.1. Opis ogólny układu Układ transceivera CC1000 jest jednoukładowym nadajnikiem/odbiornikiem danych cyfrowych pracującym w zakresie częstotliwości 300-1000 MHz. Biorąc pod uwagę możliwości tego układu w stosunku do jego ceny, stanowi on idealne rozwiązanie problemu dwukierunkowej transmisji danych na niewielkie odległości. Do budowy toru radiowego współpracującego z robotem wykorzystano dwa gotowe moduły4 (Rys. 4.15) zawierające układ CC1000 wraz z kilkoma niezbędnymi elementami, przystosowującymi go do pracy w paśmie 433 MHz. Rys. 4.15. Moduł CC1000 Schemat ideowy przedstawiono na Rys. 4.16. Podłączony układ CC1000 należy zaprogramować ponieważ wszystkie parametry przechowywane są w wewnętrznej pamięci RAM i po włączeniu zasilania przyjmują wartości domyślne. Rys. 4.16. Schemat modułu CC1000 4 Moduły zakupiono dzięki uprzejmości firmy Propox www.propox.com, która udzieliła na nie bardzo dużego rabatu Rozdział 4. Część elektroniczna 31 Programowanie odbywa się poprzez trzy linie oznaczone na schemacie jako: • PCLK – sygnał zegarowy (wejście); • PDATA – sygnał danych (wejście/wyjście); • PALE – sygnał wybóru dane/adres (wejście). Wykresy czasowe są dokładnie przedstawione w nocie aplikacyjnej [6]. Dostęp do określonego rejestru uzyskuje się wysyłając do układu najpierw adres rejestru przy linii PALE ustawionej w stan niski po czym należy zmienić jej stan na wysoki i zapisać lub odczytać dany rejestr. Adres rejestru jest 7-bitowy. Najmłodszy bit odpowiada za kierunek przesyłu danych (podobnie jak dla magistrali I2 C). Stan wysoki oznacza zapis, niski odczyt z układu. Przed wysłaniem bajt adresu trzeba przesunąć o jedną pozycję w lewo, wsuwając na pozycję b0 bit określąjący kierunek przesłania danych. Z internetowej strony producenta można pobrać darmowy program SmartRF Studio, który generuje pełny zestaw nastaw, którymi należy zaprogramować rejestry układu by uzyskać odpowiednie parametry transmisji łącza. Układ posiada zaawansowany system zarządzania energią. Poszczególne bloki funkcjonalne można załączyć lub wyłączyć przestawiając bity w rejestrze MAIN (adres 00h). Aby można było zaprogramować rejestry musi być włączony przynajmniej oscylator (bit CORE PD ustawiony na L). Przed rozpoczęciem programowania należy wykonać reset układu. Aby to zrobić należy włączyć oscylator (bit CORE PD ustawiony na L), a następnie kolejno wyzerować i ustawić bit RESET N (w rejestrze MAIN). Reset powoduje wpis wartości domyślnych do wszystkich rejestrów. Dlatego też po jego wykonaniu trzeba programować wszystkie rejestry. W karcie katalogowej układu [6] przedstawione są procedury czasowe, których zachowanie jest konieczne dla poprawnego uruchomienia poszczególnych bloków oraz sposobu przełączania nadawanie/odbiór. Jeśli nie ma konieczności każdorazowego przełączania układu w tryb obniżonego poboru mocy można przełączać bezpośrednio z nadawania na odbiór i odwrotnie co upraszcza procedury sterowania transceiverem. Przełączenie wymaga zmiany wpisów w następujących rejestrach: • Nadawanie: PA POW (adres 0Bh) = 00h MAIN (adres 00h) = 0E1h CURRENT (adres 09h) = 81h Odczekać 200uS PA POW (adres0Bh) = 0F F h • Odbiór: MAIN = 11h CURRENT = 44h Odczekać 200uS Ze względu na zastosowany sposób modulacji sygnału (FSK) częstotliwości nadawania i odbioru są różne (wpisy do rejestrów FREQ xA oraz FREQ xB). Różnica wynika z zadanej częstotliwości separacji (odstęp między częstotliwością reprezentującą jedynkę logiczną i zero). Dokładne wzory podaje nota katalogowa. Odstęp między częstotliwościami nadawania i odbioru jest równy połowie częstotliwości separacji. Trzeba jednak pamiętać, że częstotliwość pracy zależy także od ustawionego współczynnika podziału, który wpisuje się do rejestru PLL (adres 32 Mały robot mobilny obserwujący otoczenie przy pomocy kamery 0Ch, bity REFDIV). Jeśli program przyjmie różne współczynniki dla nadawania i odbioru (bardzo często), podczas przełączania nadawanie/odbiór należy także każdorazowo zmieniać wpis do rejestru PLL. I tu ważna uwaga wynikająca z erraty [7] : podczas zmiany częstotliwości pracy w niektórych sytuacjach może nastąpić zatrzaśnięcie się generatora, który pomimo wpisu nowej wartości dalej będzie generował dotychczasową. Wtedy konieczny jest reset syntezera częstotliwości (wyzerowanie i ustawienie bitu FS RESET N w rejestrze FSCTRL). Najlepiej więc przyjąć taką częstotliwość kanału, aby przejście między nadawaniem i odbiorem następowało przy takim samym współczynniku podziału REFDIV. Można także skorzystać z gotowych zestawów parametrów proponowanych przez producenta. Wartym podkreślenia jest, że po włączeniu zasilania i zaprogramowaniu rejestrów powinno się przeprowadzić kalibrację, czyli wewnętrzną procedurę dobrania optymalnych parametrów pracy bloków wewnętrznych transceivera. Kalibrację należy także przeprowadzić każdorazowo gdy nastąpi zmiana napięcie zasilania o więcej niż 0,3 V lub zmiana temperatury otoczenia o ponad 40◦ C. Oprócz linii programujących (PALE, PCLK, PDATA) moduł posiada dwie linie służące wyłącznie do transmisji docelowych danych: DCLK (wyjście), DIO (wejście/wyjście). Zasadnicza różnica w obsłudze polega na tym, że sygnał zegarowy na linii DCLK generowany jest przez układ transcivera. Dane odbierane na linii DIO są ważne podczas narastającego zbocza sygnału DCLK, natomiast w przypadku nadawania, dana wyjściowa musi być wystawiona przez procesor przed narastającym zboczem sygnału DCLK. 4.6.2. Rozwiązanie układowe Układ CC1000 został zaprojektowany do pracy z napięciem zasilania 2.1 – 3.6 V. Układy wejściowe linii interfejsu nie mogą pracować z napięciem wyższym niż napięcie zasilania. W układzie radiomodemu, którego schemat przedstawiono na Rys. 4.17, zastosowano bardzo prosty ogranicznik napięć złożony z diod zenera 3V. Do bezpośredniej obsługi i komunikacji z modułem użyto procesora AT 89C2051. Procesor ten dba o prawidłowe zaprogramowanie rejestrów układu CC1000 po włączeniu zasilania, oraz pełni ważną rolę bufora danych, które mogą być: • odbierane droga radiową poprzez dołączony moduł a następnie retransmitowane do układu nadrzędnego interfejsem RS232; • odbierane z układu nadrzędnego poprzez UART procesora i retransmitowane poprzez moduł CC1000 torem radiowym. Sygnał DCLK jest zanegowany przy pomocy tranzystora T1 i przyłączony na jedno z wejść przerwań (INT1), dzięki czemu program obsługi znacznie się upraszcza. Zanegowanie linii DIO wynika z faktu iż AT89C2051 nie posiada możliwości zgłoszenia przerwania zboczem narastającym sygnału INT a jedynie poziomem lub zboczem opadającym. Trzy wolne piny procesora wykorzystano na realizację prostego przetwornika A/C umożliwiającego pomiar poziomu odbieranego sygnału. Okazało sie to wręcz nieocenione przy różnych eksperymentach, a bardzo trudne do obserwacji w przypadku częstego przełączania nadawanie/odbiór. Realizacja miernika jest możliwa dzięki wyprowadzeniu RSSI na którym, podczas odbioru, pojawia się napięcie proporcjonalne do sygnału z anteny nadawczej (a właściwie odwrotnie proporcjonalne). Jak wynika z [6], sygnałowi -105 dBm odpowiada 1.1V, a –50 dBm napięcie 0.1V. Idea pomiaru poziomu sygnału polega na pomiarze czasu ładowania kondensatora dołączonego do jednego z wejść komparatora analogowego. Drugie wejście komparatora podłączone jest właśnie do wyprowadzenia RSSI układu CC1000. W chwili wykrycia przez procesor początku odbieranej Rozdział 4. Część elektroniczna 33 Rys. 4.17. Schemat radiomodemu informacji następuje otwarcie tranzystora T1 i ładowanie kondensatora C6 poprzez rezystor R1. Przez czas potrzebny do wyrównania napięć na wejściach komparatora są zliczane impulsy zegarowe DCLK. Przy dalszym wzroście napięcia następuje zmiana stanu komparatora, a liczba zliczonych impulsów to właśnie poziom sygnału z anteny. W przypadku powyższego układu zakres zmian wynosił od 1 dla odległości mniejszej niż kilka metrów do 44 dla granicy zasięgu. Prostota układu okupiona jest następującymi wadami: • układ nie działa dla trybu transmisji danych typu Transparent Asynchronus UART z prostej przyczyny: moduł nie generuje w tym trybie impulsów na wyjściu DCLK; • dla różnych szybkości transmisji danych zmieniają się wskazania: ponieważ w tym samym czasie występuje więcej impulsów zegarowych. Czułość odbiornika (Sensitivity RX) przyjmuje największą wartość (-110dBm) dla stałej szybkości transmisji danych 2400 i kodowania Manchester. A przy tak zrealizowanej transmisji powyższe ograniczenia nie występują. Ograniczając moc nadawania do 10 dBm5 , zasięg można poprawić jedynie przez zastosowanie kierunkowych anten o większym zysku w stosunku do anteny prętowej. Ważna jest oczywiście polaryzacja sygnału, która powinna być taka sama dla nadajnika i odbiornika (obydwie anteny ustawione pionowo lub poziomo). Sprawdzony 5 Jest to maksymalna moc z jaką mogą w tym paśmie pracować nielicencjonowane urządzenia nadawcze. 34 Mały robot mobilny obserwujący otoczenie przy pomocy kamery doświadczalnie podczas eksperymentów zasięg łączności wynosił około 600m dla poniższych parametrów transmisji: • • • • • • • częstotliwość: - 433.134 MHz; moc wyjściowa: - 10 dBm; antena prętowa: - 16,4 cm; wolna przestrzeń pomiędzy antenami; kodowanie: - Manchester; szybkość transmisji: 2400; separacja: - 64 kHz. Wartości nastaw wygenerowanych przez program SmartRF Studio, które wpisane zostały do rejestrów układów CC1000, wyglądały następująco: FREQ_2A FREQ_1A FREQ_0A FREQ_2B FREQ_1B FREQ_0B FSEP1 FSEP0 CURRENT FRONT_END PA_POW PLL LOCK CAL MODEM2 MODEM1 MODEM0 MATCH FSCTR PRESCALER TEST4 (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr (adr 01h) 02h) 03h) 04h) 05h) 06h) 07h) 08h) 09h) 0Ah) 0BH) 0CH) 0DH) 0EH) 0FH) 10H) 11H) 12H) 13H) 1CH) 42H) - 49H 60H 00H 49H 58H 19H 02H C7H nadawanie 81H, odbiór 44H 12H 0FFH 50H 80H 26H 8EH 6FH 27H 70H 01H 00H 25H Rozdział 4. Część elektroniczna 35 4.6.3. Format transmisji radiowej Dla zapewnienia prawidłowego przesyłania informacji, przesyłane dane obudowano w ramkę zawierającą blok startowy (preambułę) niezbędną na ustalenie parametrów wzmacniacza wejściowego odbiornika oraz mechanizm kontroli błędów CRC. Dokładny format ramki opracowano w oparciu o artykuł [8]. Tak utworzona ramka danych, schematycznie przedstawiona na Rys. 4.18, zawiera: • • • • • • 16 bajtów preambuły AAh (jej długość zależy od wybranego sposobu kodowania); 1 bajt początku danych (10h); liczbę bajtów w ramce; zanegowaną liczbę bajtów w ramce; blok danych o długości 1 ... 35 bajtów; sumę CRC16. Rys. 4.18. Format ramki przesyłanych danych Tor radiowy współpracujący z opisywanym robotem składa się z dwóch układów radiomodemów, spośród których jeden zawsze pracuje jako nadajnik a drugi jako odbiornik. Przykładowa transmisja danych pomiędzy urządzeniami A i B wyposażonymi w układy powyższych radiomodemów wygląda następująco: • urządzenie A wysyła interfejsem RS232 do radiomodemu A dane, które chce transmitować do urządzenia B, poprzedzone bajtem zawierającym ich liczbę (1...35); • radiomodem A, otrzymawszy wszystkie dane blokuje UART, obudowuje dane w format powyższej ramki, wylicza sumę CRC16 tak powstałego ciągu danych i transmituje całość drogą radiową do radiomodemu B po czym przełącza się w tryb odbioru oczekując potwierdzenia; • radiomodem B w momencie wykrycia startowego bajtu danych w odbieranej ramce blokuje swój UART, a po odebraniu danych wylicza własną sumę CRC16 i porównuje ją z sumą otrzymaną. W przypadku zgodności transmituje dane interfejsem RS232 do urządzenia B, jednocześnie przełączając się w tryb nadawania, transmituje potwierdzenie w postaci 16 bajtów preambuły; • jeśli radiomodem A w ciągu czasu proporcjonalnego do ilości przesyłanych danych nie otrzyma powyższego potwierdzenia odbioru, jeszcze dwukrotnie podejmuje próbę transmisji tych danych; • dopiero po otrzymaniu potwierdzenia od odbiornika lub po trzykrotnej transmisji bez potwierdzenia, radiomodem A odblokowuje przerwanie własnego UARTu. Rozdział 5 Oprogramowanie 5.1. Środowisko programistyczne Sterownik pokładowy robota wyposażony jest w mikrokontroler ATmega128, stanowiący procesor główny oraz pomocniczy układ ATmega8, sterujący wszystkimi serwomechanizmami. Sterownik zewnętrzny, którego zadaniem jest obsługa wyświetlacza LCD, klawiatury PC oraz komunikacja z radiomodemem i komputerem PC, zbudowany został w oparciu o mikrokontroler AT90S2313. Oprogramowanie do wszystkich, powyższych układów zostało napisane w bezpłatnym środowisku AVR-GCC, będącym kompilatorem języka C dla mikrokontrolerów AVR. Środowisko to, jako produkt typu open-source dostępne dla wielu platform, jak Linuks czy Windows, ciągle jest rozwijane i wzbogacane o nowe biblioteki. Podczas pisania oprogramowania korzystano z wersji AVR Libc1.2.3, lecz od tego czasu pojawiły się kolejne uaktualnienia. AVR-GCC generuje wszystkie niezbędne pliki dla AvrStudio - darmowego, firmowego pakietu Atmela, który uznawany jest za znakomity symulator i debugger procesorów AVR. Pakiet ten umożliwia współpracę z zewnętrznym układem adaptera JTAG, który zapewnia nieograniczony dostęp do zasobów mikrokontrolera, dając tym samym nieocenione możliwości programiście i znacznie podnosząc komfort prac, zwłaszcza uruchomieniowych. 5.2. Mikrokontrolery - oprogramowanie Znaczna większość oprogramowania sterowników została napisana w języku C, jedynie w podprogramach obsługi niektórych przerwań stosowano wstawki asemblerowe. Natomiast oprogramowanie mikrokontrolerów wchodzących w skład radiomodemów w całości zostało napisane w asemblerze. Wynika to przede wszystkim z potrzeby jak najszybszego działania tych układów, bo szybkość ta bezpośrednio przekłada się na maksymalną szybkość transmisji . Struktura oprogramowania robota, tak jak to ma miejsce w wielu tego typu konstrukcjach, rozdzielona jest na pewne poziomy wykonywanych zadań zwane poziomami kompetencji lub warstwami oprogramowania. Najniższy poziom, podstawowa warstwa oprogramowania, zawiera procedury służące bezpośredniej obsłudze układu jezdnego robota, jak np.: • sterowanie silnikami; • obsługa przerwań koderów sprzężonych z silnikami; Rozdział 5. Oprogramowanie 37 • wymuszenie odpowiedniej pozycji zewnętrznych kół skrętnych. Dodatkowo w warstwie tej zaimplementowano procedurę, która w przypadku poruszania się robota do przodu, sprawdza czy w odległości ok.15 cm bezpośrednio przed robotem nie znajduje się jakaś przeszkoda, jeśli taki fakt zaistnieje, wówczas wstrzymuje silniki. Funkcja, bazując na danych pomiarowych pochodzących z sonaru, już na poziomie tej warstwy dba o inteligentne zachowanie sie robota np. w przypadku wtargnięcia jakiegoś obiektu na tor jego jazdy. Bezpieczna odległość została tak dobrana, by zagwarantować bezkolizyjne zatrzymanie się robota przy jego pełnej prędkości, a także, by po takim awaryjnym zatrzymaniu robot mógł wykonać obrót tuż przed przeszkodą bez potrzeby cofania. Nadrzędna, wyższa warstwa obejmuje procedury odpowiedzialne za komunikację z radiomodemem, obsługę czujników, sterowanie kamerą. Na poziomie tej warstwy oprogramowanie dba o prawidłową realizację powierzonych zadań oraz rozstrzygnięcie ewentualnie zaistniałych zdarzeń. Sterownik zewnętrzny poprzez dane wysyłane (rozkazy) i dane odbierane od tej warstwy (informacje), może przejąć kontrolę nad funkcjonowaniem robota. Obie powyższe warstwy zarządzają wszystkimi funkcjami robota, gdyż to z ich poziomu zarządzane są wszystkie komponenty w jakie go wyposażono. Oprogramowanie skupione na tych dwóch poziomach jest na stałe wpisane w pamięć sterownika pokładowego. O jego wykorzystaniu, o tym jaką funkcję w danym momencie wykonuje, bądź ma wykonać robot, decyduje najwyższa warstwa oprogramowania lub poprzez transmisję radiową sterownik zewnętrzny. Warstwa najwyższa, w przeciwieństwie do pozostałych, zawiera oprogramowanie wymienne (tworzone przez użytkownika). Znajdują się tu opracowywane algorytmy sterowania robotem, np. algorytmy jego autonomicznego poruszania się. Sterownik robota posiada złącze interfejsu JTAG poprzez które w wygodny sposób, za pomocą wcześniej wspomnianego adaptera JTAG, można zmienić znajdujące się w sterowniku oprogramowanie. Zawarte na tym poziomie algorytmy mogą być aktywowane drogą radiową przez sterownik zewnętrzny, który ponadto może: • pełnić rolę przełącznika algorytmów zawartych w najwyższej warstwie, jednocześnie nie angażując się bezpośrednio w sterowanie robotem; • współsterować robotem wraz z wybranym algorytmem, np. aktywowany algorytm steruje jazdą robota po określonej trajektorii a operator, poprzez sterownik zewnętrzny, steruje ruchem kamery obserwując na monitorze interesujące go otoczenie robota; • chwilowo lub całkowicie przejąć kontrolę nad niektórymi lub wszystkimi funkcjami robota; • może nic nie wnosić do sterowania robotem i jedynie żądać przesłania mu co jakiś czas, lub tylko w danym momencie, odczytów z czujników będących na wyposażeniu robota. Stosowane środowisko programistyczne znacznie ułatwiało napisanie oprogramowania mikrokontrolerów w sposób modułowy. Funkcje zostały zgrupowane w biblioteki dołączane do programu głównego. Dzięki temu, przy znacznym stopniu złożoności projektu, oprogramowanie wydaje się być bardziej przejrzystym. Sposób oprogramowania mikrokontrolerów wchodzących w skład radiomodemów został szeroko opisany w Podrozdziale 4.6, który w całości poświęcono tym układom. W kolejnym podrozdziale przedstawiono sposoby w jaki zostały opracowane niektóre ważniejsze procedury sterowania robotem, często wynikające z jego specyficznej konstrukcji. 38 Mały robot mobilny obserwujący otoczenie przy pomocy kamery 5.3. Opis ważniejszych procedur 5.3.1. Sterowanie serwomechanizmami W pierwotnych założeniach wynikających ze specyfiki sześciokołowego układu jezdnego, robot miał poruszać się po liniach prostych, a zmiana kierunku jazdy odbywać się miała przez obrót robota w miejscu. W konstrukcjach takiego typu, zewnętrzne koła skrętne ustawione do jazdy na wprost, doskonale stabilizują prostoliniowy tor jazdy robota nawet przy nieznacznej różnicy w prędkościach kół napędowych umieszczonych pośrodku. Zewnętrzne koła ustawione pod odpowiednim kątem, także dobrze stabilizują obrót robota w miejscu, nawet przy stosunkowo nierównej nawierzchni. Po pierwszych udanych testach z podwoziem robota wyposażonym w podstawowe, niezbędne do jazdy podzespoły, zdecydowano sie na jego funkcjonalną rozbudowę, umożliwiającą mu jazdę po różnego rodzaju łukach. Konieczne stało się zatem opracowanie funkcji wyliczającej odpowiedni kąt skrętu zewnętrznych kół robota, który jak widać to z rys. 5.1, wynika z rozmiarów układu jezdnego. Rys. 5.1. Sposób wyliczenia kątów skętu kół Na podstawie geometrii podwozia można stwierdzić, że: 140 R[mm] + 117, 5 140 tg β = R[mm] − 117, 5 a zatem jak wynika z równań 5.1 i 5.2: tg α = (5.1) (5.2) α = arc tg 140 R[mm] + 117, 5 (5.3) β = arc tg 140 R[mm] − 117, 5 (5.4) Rozdział 5. Oprogramowanie 39 Promień R liczony jest od punktu środkowego robota i jest promieniem łuku po jakim ma poruszać się robot. Jak łatwo zauważyć, przy obrocie robota w miejscu promień R = 0. Równania 5.3 i 5.4 zostały zaimplementowane w procesorze pomocniczym sterownika pokładowego zajmującego się obsługą serwomechanizmów. Wyliczanie kątów skrętu kół przez ten procesor ma swe logiczne uzasadnienie i dodatkowo pozwala na odciążenie głównego mikrokontrolera, którego rola w tym przypadku sprowadza się do przesłania magistralą SPI wartości wspomnianego promienia R. Przyjęto, że dla skrętów robota w prawo (jak na Rys. 5.1) wartość promienia R będzie podawana jako liczba dodatnia, natomiast dla takiego samego skrętu wykonywanego w lewo, promień będzie podawany z minusem. Format instrukcji przesyłanych magistralą SPI do procesora podrzędnego schematycznie przedstawiono na Rys. 5.2. Rys. 5.2. Format instrukcji sterującej procesorem pomocniczym Procesor nadrzędny przesyła magistralą najpierw kod rozkazu a następnie dane dotyczące sterowania. Całość, dla zabezpieczenia danych przed błędami transmisji, zaopatrzono w sumę CRC. Kod rozkazu o wartości 1, oznacza przesyłanie przez procesor nadrzędny danych dotyczących sterowania kamerą. Pierwszy bajt danych po takim rozkazie dotyczy pionowego kąta pod jakim ma zostać ustawiona kamera, kolejny bajt jest informacją o kącie obrotu kamery w poziomie. Kod rozkazu o wartości 2 oznacza przesyłanie w następnej kolejności danych o wartości promienia skrętu. Procesor pomocniczy po otrzymaniu informacji o promieniu, wylicza kąty skrętu kół i odpowiednio wysterowywuje serwomechanizmy sprzężone mechanicznie z kołami. Zalecany przez producenta sposób sterowania serwami przedstawia Rys. 5.3. Rys. 5.3. Sygnał sterujący serwomechanizmem Impulsowi o długości 1ms odpowiada lewe, skrajne wychylenie serwa. Impuls o długości 2ms powoduje obrót serwa do prawej, skrajnej pozycji. Impulsy sterujące powinny być powtarzane co okres 20ms. Wymóg nadawania ich w stosunkowo dużym odstępie czasowym wynika ze specyfiki budowy wewnętrznych układów elektronicznych serwomechanizmów modelarskich. 40 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Ich głównym przeznaczeniem jest współpraca z standardową, modelarską aparaturą zdalnego sterowania, która umożliwia sterowanie jednocześnie czterema serwami. Taki odstęp czasu pomiędzy kolejnymi impulsami umożliwia przesłanie w jego trakcie informacji do pozostałych serwomechanizmów. Do generacji sygnałów sterujących wszystkimi sześcioma serwami robota, wykorzystano dwa wolne liczniki mikrokontrolera ATmega8. Licznik T1 (16bitowy) generuje odpowiedniej długości impulsy sterujące, które powtarzane są w odstępach czasowych generowanych przez 8bitowy licznik T2. Gdyby do sterowania serwami użyto sprzętowego sygnału PWM, na zmianę kąta obrotu w całym dostępnym zakresie 0 - 180◦ , miałaby wpływ ograniczona możliwość zmian współczynnika wypełnienia w zakresie 5 - 10%. Powyżej opisany sposób umożliwił sterowanie serwami z większą rozdzielczością, która wyniosła ok. 1.8◦ . 5.3.2. Obsługa czujników Konstruowany robot, oprócz kamery będącej głównym nośnikiem informacji, został wyposażony w szereg sensorów, z których najważniejszymi są układy sonaru SFR08 i cyfrowego kompasu CMPS03. Oba układy są specjalistycznymi czujnikami służącymi głównie zastosowaniom w robotyce. Posiadają własne procesory sterujące dzięki którym, zaraz po włączeniu zasilania, samodzielnie przeprowadzają określone procedury pomiarowe oraz przetwarzanie danych. Czujniki te, właściwie nie wymagają żadnej obsługi ze strony jednostki centralnej robota. Gotowy wynik, dostępny w kilku formatach, może być z nich odczytywany za pomocą magistrali I2 C. Dodatkowa zaleta w postaci bardzo małego pobieranego prądu, predysponuje te układy do zastosowań zwłaszcza w małych robotach. Układy szerzej opisano w Podrozdziale 4.4 poświęconym czujnikom, poniżej natomiast przedstawiono fragment kodu źródłowego funkcji umożliwiającej odczyt danych pomiarowych z obu sensorów. Procedura bazuje na sprzętowym interfejsie magistrali I2 C mikrokontrolera ATmega128, pełniącego rolę głównego sterownika robota. Po jej wykonaniu w zmiennej Kat znajdą się dane odczytane z kompasu CMPS03, natomiast w zmiennej Odleglosc, dane o zmierzonej przez sonar SFR08 odległości do obiektu. //---------------------------------------------------------------------#define COMPASS 0xC0 // adres kompasu #define SONAR 0xE0 // adres sonaru int Kat, Odleglosc; union i2c_union { unsigned int rx_word; unsigned char rx_byte[2]; } i2c; i2c_start(); i2c_transmit(COMPASS); i2c_transmit(2); //adres czytanego rejestru Rozdział 5. Oprogramowanie 41 i2c_start(); i2c_transmit(COMPASS+1); i2c.rx_byte[1]=i2c_receive(I2C_CONTINUE); i2c.rx_byte[0]=i2c_receive(I2C_QUIT); i2c_stop(); //adres do odczytu //odczyt MSB + Ack //odczyt LSB + Nack Kat=i2c.rx_word; i2c_start(); i2c_transmit(SONAR); i2c_transmit(0); i2c_transmit(0x51); // // // adres rejestru konfiguracyjnego konfiguracja sonaru by przeliczał odległość na cm do{ i2c_start(); i2c.rx_byte[0]=i2c_transmit(SONAR); i2c_stop(); } while(i2c.rx_byte[0] != 0); // czekamy na wykonanie pomiaru // w czasie wykonywania pomiaru, sonar ustawia magistrale w stan wysoki. // po udanym polaczenia, funkca i2c_transmit() zwraca wartosc 0 i2c_start(); i2c_transmit(SONAR); i2c_transmit(2); //adres i2c_start(); i2c_transmit(SONAR+1); //adres i2c.rx_byte[1]=i2c_receive(I2C_CONTINUE); i2c.rx_byte[0]=i2c_receive(I2C_QUIT); i2c_stop(); Odleglosc = czytanego rejestu do odczytu //odczyt MSB + Ack //odczyt LSB + Nack i2c.rx_word; //----------------------------------------------------------------------- W zależności od celu dokonywanego pomiaru oraz jego wymaganej dokładności, tak otrzymane dane przekazywane są dalej lub zapamiętywane a następnie uśredniane. Najnowsze dane o kącie i odległościach zmierzonych przez sensory SFR08 i GP2Y02A02YK, umieszczane są w rejestrach z których w każdej chwili można je odczytać za pomocą zewnętrznego sterownika. Sposób realizacji pomiaru za pomocą czujnika GP2Y02A02YK szerzej opisano w Podrozdziale 4.4.3, w całości poświęconemu temu czujnikowi. 42 Mały robot mobilny obserwujący otoczenie przy pomocy kamery 5.3.3. Sterowanie układem napędowym Na poruszanie się robota po określonych trajektoriach, zasadniczy wpływ oprócz odpowiednich skrętów kół zewnętrznych, ma zapewnienie odpowiedniej prędkości środkowych kół napędowych. Jak wynika to z Rys. ??, przy tak realizowanym torze jazdy, koło lewe musi obracać się szybciej od koła prawego. Stosunek prędkości wynika z różnej długości łuków, które muszą być pokonane jednocześnie przez oba koła napędowe. Aby zapewnić odpowiednio dobrą regulację prędkości, w sterowniku robota zaimplementowano algorytm regulatora PID. W systemie wyposażonym w mikrokontroler, algorytm PID musi być realizowany w sposób dyskretny. Charakterystyczną cechą takiego regulatora jest praca ze stałym okresem próbkowania Tp podczas którego wyznaczane są dyskretne wartości sygnałów. Dyskretyzacja algorytmu PID : u(t) = Kp e(t) + Ki Z 0 t e(t)dt + Kd de(t) dt (5.5) polega na wprowadzeniu dyskretnych wartości sygnału uchybu regulatora oraz zastąpieniu całki sumą, a pochodnej - różnicą pierwszego rzędu : Z 0 t e(t)dt ≈ k X i=0 e(i)Tp de(t) e(k) − e(k − 1)) ≈ dt Tp (5.6) Do programowej realizacji algorytmu regulatora PID opracowano poniższą strukturę PID state oraz odpowiednią procedurę. Fragment kodu przedstawiono poniżej: //----------------------------------------------------// - x0 - wielkość zadana // - mes_x - wielkość zmierzona // - Iminus1 - wartość całki z poprzedniego kroku // - eminus1 - wartość uchybu z poprzedniego kroku // - ki - wzmocnienie członu całkującego; odwrotność stałej zdwojenia // - kp - wzmocnienie członu proporcjonalnego // - kd - wzmocnienie członu różniczkującego // - y - wartość na wyjściu // - Tp - okres próbkowania typedef struct{ //typ będący modelem obiektu PID Rozdział 5. Oprogramowanie 43 double x0; double mes_x; double Iminus1; double eminus1; double y; double ki; double kp; double kd; int y_min; int y_max; }PID_state; PID_state regulator_PID(PID_state x) { double e; double de; double I; e=x.x0-x.mes_x; I=x.ki*Tp*(e+x.eminus1)/2+x.Iminus1; de=(e-x.eminus1)/Tp; x.eminus1=e; x.y=x.kp*e+x.kd*de+I; if((x.y>x.y_max)||(x.y<x.y_min)) { if(x.y>x.y_max) {x.y=x.y_max;} else if(x.y<x.y_min) {x.y=x.y_min;} } else {x.Iminus1=I;} return x; } Przy tak skonstruowanym algorytmie, występowało czasem zjawisko nadmiernego wzrostu wartości sygnału związanego z całkowaniem (ang. windup efect). Przyczyniało się ono do dłuższego niż potrzeba pozostawania sygnału sterującego na poziomie ograniczenia co wywoływało niepożądane przeregulowania. Ograniczenie szkodliwych skutków tego zjawiska dokonano przez zwykłe zatrzymywanie działania części całkującej regulatora PID w chwili, gdy jego sygnał wyjściowy osiągał ograniczenie. W celu dobrania optymalnych nastaw regulacji, z obiektów regulowanych czyli silników, ściągnięto charakterystyki umożliwiające wyznaczenie pomocnych stałych czasowych. W okresie próbkowania wynoszącym Tp =1 ms, zliczano impulsy pochodzące z enkoderów sprzężonych z silnikami. Odpowiedź silnika na skok jednostkowy uzyskaną podczas jego włączenia, przedstawia poniższy Rys. 5.4. 44 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Rys. 5.4. Odpowiedź silnika na skok jednostkowy Z powyższej charakterystyki odczytano stałą czasową τ = 0,18ms umożliwiającą wyznaczenie transmitancji silnika : 1 K(s) = (5.7) 0, 018s + 1 Obiekt o takiej transmitancji poddano symulacjom w programie Matlab, jak widać na Rys. 5.5, wiernie oddawał on rzeczywiste parametry charakterystyki silnika. Rys. 5.5. Symulacja obiektu silnika Wykorzystując pakiet Simulink, przeprowadzono symulacje regulatora z obiektem o wyznaczonej transmitancji, które pomogły dobrać odpowiednie nastawy programowego regulatora PID. Rozdział 6 Przebieg i wyniki eksperymentów W trakcie prac nad konstrukcją mechaniczną i elektroniczną robota, został przeprowadzony szereg badań i testów wstępnych, które bezpośrednio rzutowały na dalszy kierunek wykonywanych prac i rozwój konstrukcji. O doświadczeniach tych wspominały poprzednie rozdziały. Po ukończeniu budowy robota, został on poddany bardzo wielu eksperymentom weryfikującym jego teoretyczne działanie w rzeczywistych warunkach. Przebieg i wyniki niektórych z nich opisuje niniejszy rozdział. W warunkach jak na Rys.6.1 przeprowadzono serię pomiarów odległości do przeszkody, zmierzonej przez sensory robota. Ponieważ oba czujniki umieszczone są na korpusie kamery, na zdjęciu zamieszczono dodatkowo obraz obiektu zarejestrowany przez kamerę. Odczyty pomiarowe obu czujników robota, przesyłane do sterownika zewnętrznego, zestawiono w Tabeli 6.1. Rys. 6.1. Pomiar odległości do obiektu - seria 1 46 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Tabela 6.1. Wyniki pierwszej serii pomiarów Rzeczywista Odległość [cm] 10 17 25,5 34,5 55 93,5 125 145 SFR08 [cm] 10 17 26 35 55 93 125 145 GP2Y02A02YK [cm] 10 17 25 34 55 93 124 144 Jak wskazały przeprowadzone pomiary, odległość do takiego rodzaju obiektów, mierzona jest przez oba sensory w dość dokładny sposób. Na dodatkowe podkreślenie zasługuje fakt, że pomiary przesyłane do zewnętrznego sterownika nie były w żaden sposób uśredniane. Bardzo podobnie wypadły pomiary dla obiektów o innym kolorze powierzchni. Odbiciowy czujnik GP2Y02A02YKN z oczywistych względów wykazywał największy błąd pomiaru dla obiektów o czarnej powierzchni. Na końcu zakresu pomiarowego wynoszącego 150 cm, błąd ten wynosił maksymalnie 4cm, a więc nie przekraczał 3%. W kolejnej serii pomiarów, obiektem do którego mierzono dystans był fotelowy materac wykonany z gąbki. Doświadczenie to miało na celu weryfikację pomiarów wykonywanych przez sonar, gdyż jak wiadomo gąbka jest materiałem tłumiącym ultradźwięki. Otrzymane wyniki zestawiono w Tabeli 6.2. Rys. 6.2. Pomiar odległości do obiektu - seria 2 Rozdział 6. Przebieg i wyniki eksperymentów 47 Tabela 6.2. Wyniki drugiej serii pomiarów Rzeczywista Odległość [cm] 10,5 16 25 38 49,5 65 110 140 SFR08 [cm] 11 17 26 39 51 67 112 143 GP2Y02A02YK [cm] 10 16 25 38 50 66 111 139 Uzyskane wyniki wskazują na nieznaczne błędy pomiaru odległości do obiektów takiego typu, mierzonej przez oba czujniki. Największy błąd z jakim odległość została zmierzona przez sonar wynosił zaledwie 3cm. Biorąc pod uwagę stosunkowo niekorzystny jak dla tej metody pomiarowej obiekt, wydaje się on być bardzo dobrym wynikiem. Sposób i jakość poruszania się robota została wielokrotnie zweryfikowana wizualnie. Utrzymywanie prostoliniowego toru jazdy sprawdzano w długim korytarzu, którego podłoga zawierała prostoliniowe elementy (panele podłogowe). Na długości 6 metrów zboczenie robota z prostoliniowego toru jazdy wynosiło ok. 7cm. Trudniejsze do zbadania było utrzymanie jednopunktowości obrotu robota w miejscu. Wizualnie po wykonaniu kilkudziesięciu takich obrotów, punkt obrotu nie ulegał przesunięciu. Ponadto, przy obrocie robota na piaszczystej nawierzchni, koła robota zostawiały pojedyncze ślady - Rys.6.3. Rys. 6.3. Robot podczas obrotu w miejscu Zgodnie z przewidywaniami, robot bardzo dobrze pokonuje stosunkowo sporej wielkości przeszkody. Robot o całkowitej masie 7 kg, wyposażony w koła o promieniu 4cm, z łatwością pokonywał przeszkody o wysokości 1cm, a przy dobrej nawierzchni także 2cm. Na kolejnych zdjęciach pokazany został typowy sposób zachowania się robota podczas pokonywania przeszkody. 48 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Rys. 6.4. Robot podczas pokonywania przeszkody Rozdział 6. Przebieg i wyniki eksperymentów 49 Robot, dzięki zastosowaniu opisanych wcześniej sensorów oraz bezprzewodowej kamery, może pełnić także funkcję robota inspekcyjnego. Kamera wyposażona w podświetlenie, umożliwia sterowanie robotem także w całkowicie ciemnych pomieszczeniach. Poniżej przedstawiono obrazy zarejestrowany przez kamerę podczas takiej pracy. Rys. 6.5. Widok z kamery zarejestrowany podczas pracy nocą 50 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Jak okazało się już podczas wstępnych doświadczeń i eksperymentów z wykorzystywanymi silnikami, nie mogą one poruszać się z dowolnie małą prędkością. Silniki wyposażone w tak duże przekładnie, przy stopniowym zwiększaniu współczynnika wypełnienia sterującego nimi sygnału PWM, zaczynają od razu pracować z pewną prędkością, odpowiadającą minimalnej prędkości ruchu robota. Dzięki zastosowaniu programowo zrealizowanej regulacji PID, prędkość tą udało sie obniżyć do wartości ok. 4cm/s. Maksymalna prędkość z jaką może poruszać się robot wynosi 12cm/s. Przez to, że podczas ruchu postępowego robota, jedno koło napędowe może poruszać się maksymalnie 3 razy szybciej od drugiego, mocno ograniczony został zakres jazdy robota po łukach. Dodatkowo, końcowe eksperymenty wskazały na pewne problemy w uzyskaniu powtarzalności sterowań niektórych skrętów serwomechanizmów, co dodatkowo zmniejszyło zakres łuków możliwych do osiągnięcia podczas jazdy robota. Z powyższych względów, w obecnym stanie konstrukcji robota, zaimplementowano możliwość poruszania się robota tylko po kilku łukach, dzięki którym jednak może on w wygodniejszy sposób np. omijać przeszkody. Również wielokrotnie zweryfikowane zostało poprawne działanie cyfrowego kompasu będącego na wyposażeniu robota. Z racji dużej ilości znajdujących się w robocie metalowych elementów, kompas, po umieszczeniu go na pokładzie robota, wymagał programowej kalibracji, której procedurę dokładnie opisuje [9], a po której jego wskazania w znacznym stopniu odpowiadały rzeczywistym. Kompas, zamontowany poziomo pod górną płytą pleksi, przekazuje sterownikowi robota informacje o kącie odchylenia od skalibrowanego kierunku północnego. Jak pokazały przeprowadzone eksperymenty, informacje te mogą być obarczone błędem tym większym, im większe jest odchylenie od poziomu górnej płyty robota, a przez to samego modułu kompasu. Przy wjeździe robota na maksymalną możliwą do pokonania przeszkodę, błąd wskazań wynosił ok. 7◦ . Ponadto, przy zbliżeniu się robota na odległość ok.15 cm do dużych metalowych obiektów, stwierdzono błędy w zakresie do 10◦ . Mocna, solidna konstrukcja robota oraz górna, pozioma płyta o dużej, wolnej powierzchni, umożliwia przewożenie robotem obiektów o stosunkowo dużej masie. Obciążenie robota podczas testów dodatkową masą 5 kg, poza oczywistym wpływem na możliwość pokonywania przeszkód, nie wpłynęło znacząco na sposób poruszania się robota po płaskich nawierzchniach. Mimo braku konkretnego zastosowania powyższej właściwości, wskazuje ona na sporą wytrzymałość całej konstrukcji oraz możliwość wyposażenia robota w dodatkowe elementy, które nie przyniosą istotnych zmian w sposobie poruszania się robota. Rozdział 7 Podsumowanie Celem pracy było opracowanie odpowiedniej koncepcji oraz wykonanie mobilnego robota, którego system lokomocyjny pozwalałby na jego poruszanie się po niewielkich nierównościach podłoża, oraz który, dzięki wyposażeniu go w kamerę, umożliwiałby obserwację otoczenia w jakim się porusza. W wyniku przeprowadzonych prac konstrukcyjnych powstał mały, mobilny robot wyposażony w sześciokołowy układ jezdny, wzorowany na zawieszeniu robotów zbudowanych w laboratoriach NASA. Zbudowane podwozie z powodzeniem spełniło wcześniej stawiane mu oczekiwania i pozwoliło na sprawne poruszanie się robota w środowiskach o stosunkowo dużych nierównościach podłoża. Jak doświadczalnie sprawdzono, robot z łatwością poruszał się po trawniku, piaszczystej drodze, a także dobrze radził sobie na drodze kamienistej. Własne źródło zasilania w postaci żelowego akumulatora, pozwala mu przy włączonej kamerze, pracować nieprzerwanie przez czas przynajmniej siedmiu godzin. Bezprzewodowa, kolorowa kamera w jaką go wyposażono, poprzez własne, wbudowane podświetlanie, umożliwia obserwowanie otoczenia robota nawet podczas jego pracy w nocy lub w miejscach całkowicie ciemnych. Mechanizm mocowania kamery umożliwia sterowanie jej obrotem zarówno w pionie jak i w poziomie, pozwalając tym samym na bogatą i obszerną obserwację środowiska pracy robota. Ponadto, dwa czujniki mierzące odległość umieszczone na jej korpusie, pozwalają dodatkowo na dokładny pomiar odległości do obserwowanych obiektów. Dzięki wyposażeniu robota w układy radiomodemów, informacje z wszystkich czujników robota przekazywane są drogą radiową do sterownika zewnętrznego, który następnie umożliwia ich prezentację na wyświetlaczu LCD. Sterownik zewnętrzny umożliwia zdalne sterowanie całym robotem lub jedynie częścia jego funkcji, których resztą zarządza wówczas sam robot. Wszystkie te, tak bogate możliwości skonstruowanego robota, ukazują mnogość jego potencjalnych zastosowań. Na pewno predysponują go przede wszystkim do prac o charakterze inspekcyjnym i badawczym. Operator dzięki tak wyposażonemu robotowi może na odległość badać środowiska, w którym jego fizyczna obecność z pewnych względów jest niemożliwa, zagrożona lub po prostu zbędna. Ponadto, umożliwia on obserwację ciemnego otoczenia, w którym człowiek samodzielnie nie byłby wstanie zobaczyć niczego. Czujniki, jakie posiada robot, są źródłem bogatych, dokładnych informacji, które człowiek bez dodatkowego wyposażenia mógłby jedynie oszacować. Mimo wcześniejszych założeń co do poruszania się robota jedynie po prostoliniowych torach, dodatkowo powstałe oprogramowanie, umożliwia mu także jazdę po łukach. Ze względu na własności wykorzystanych silników oraz serwomechanizmów, nie są to krzywizny o dowolnie wybranych promieniach skrętu. Pomimo, że robot może poruszać się po łukach jedynie z pewnego zakresu, to i tak w znacznym stopniu poprawiło to jakość sposobu sterowania robotem oraz możliwość omijania przez niego przeszkód. Sterownik zewnętrzny umożliwia sterowanie robotem przez komputer PC, co pozwala na jego wykorzystanie do implementacji i badań algorytmów sterowania. Robot sterowany samodzielnie lub poprzez komputer, dzięki zbieranym danym o kącie i odległości przeszkód, przesyłanym następnie do komputera PC, może być wykorzystywany do budowania mapy otoczenia. Ponadto, komputer PC, na podstawie obrazu przesyłanego do niego z kamery robota, może poprzez odpowiednie oprogramowanie analizować i rozpoznawać pewne elementy otoczenia robota a następnie tak nim sterować, by je omijał lub podążał w ich kierunku. Spory zapas pamięci programu sterownika pozwala na implementację wielu algorytmów autonomicznego poruszania się robota, oraz rozwój już istniejącego oprogramowania. Niniejszy dokument podsumowuje pewien zamknięty etap prac wykonanych nad robotem, którego możliwości będą w dalszym ciągu poszerzane. W dalszych pracach przewidziano między innymi opracowanie komputerowego programu umożliwiającego wizualizację danych przesyłanych z sensorów oraz sterowanie robotem poprzez komputer. Należało by także zastanowić się nad zmianą sposobu sterowania zewnętrznymi kołami skrętnymi, tak by umożliwić poruszanie się robota po dowolnie wybranych krzywiznach. Polecamy serwis z poradami dotyczącymi procesu pisania prac magisterskich - prace magisrterskie - serwis z wytycznymi, wskazówkami, normami - całkowicie za darmo Polecamy serwis darmowe _ prace mgr z bankowości - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy serwis darmowe _ prace mgr z prawa - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy solidny serwis darmowe prace mgr z prawa - znajdziecie tam darmowe fragmenty prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy serwis z darmowymi referatami - darmowe prace - strona z darmowym referatami, esejami, konspektami prac... Polecamy serwis darmowe _ prace mgr z _ pedagogiki - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy internetowy serwis darmowe _prace mgr z _zarządzania - strona z całkowicie darmowym i fragmentami prac dyplomowych - prace licencjackie, magisterskie, semestralne i zaliczeniowe. Poradnik jak pisać prace dyplomowe znajdziesz na stronie abcpisania. Forum o serwisach zajmujących się pisaniem prac licencjackich. Zamawialiście prace licencjackie, chcecie o tym napisać? To jest właśnie odpowiednie miejsce - forum o pracach magisterskich Mamy specjalistów z zakresu bankowości, rachunkowości, finansów, ekonomii, marketingu, zarządzania, filologii polskiej, pedagogiki, socjologii, zarządzania zasobami ludzkimi, prawa, administracji, hotelarstwa i turystyki. Pisanie prac magisterskich i licencjackich Nie kopiujemy z innych prac, nie przepisujemy, a każda z naszych prac tworzona jest bezpośrednio pod potrzeby klienta i wykorzystywana tylko przez niego! Prace magisterskie - dobre Serwis "Prace magisterskie" pomoże napisać prace magisterskie i prace licencjackie zapracowanym studentom. Bibliografia [1] D. Bickler. ”The New Family of JPL Planetary Surface Vehicles, in Missions, Technologies and Design of Planetary Mobile Vehicles”, pp. 301-306, D. Moura, Ed., Cepadues-Editions Publisher, Toulouse France. 1993. [2] D. Bickler. US Patent Number 4,840,394—Articulated Suspension Systems, US Patent Office, Washington, D.C. 1989. [3] Chottiner J. E. ”Simulation of a Six-Wheeled Martain Rover Called the Rocker-Bogie”, M.S. Thesis, The Ohio State University, Columbus, Ohio. 1992. [4] www.austriamicrosystems.com. ”AS5040DataSheetRev12”. [5] www.robot electronics.co.uk/htm/srf08tech.shtml. [6] www.chipcon.com. ”CC1000 Preliminary Datasheet (rev. 2.1)”. 2004. [7] www.chipcon.com. ”CC1000 Errata Note 001, rev. 1.0”. [8] Ryszard Szymaniak. ”Radiomodem 433 MHz”. Elektronika Praktyczna. 2/2004. [9] www.robot electronics.co.uk/htm/cmps03tech.shtml. Dodatek A Rys. A.1. Schemat układów radiomodemów 1 2 3 4 +3V D D R1 220k P1.1 +5V P1.2 C 22pF T2 BC847 U3 MODUL CC1000 ANT B +3V 3 11 2 4 5 6 1 P1.0 P1.3 /DCLK RESET 4 Q1 11,059MHz 5 OSCIN OSCOUT 2 3 6 7 8 9 11 P3.0 P3.1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.7 P1.0/AIN0 P1.1/AIN1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 D2 D3 D4 D5 Rxd Txd +5V D1 R3 47k R4 1k Nadawanie Z1 P1.0 P1.1 P1.2 P1.3 D6 D7 Ucc GND 1 2 Diody pomiaru zasiegu 20 C11 100nF 10 B Z2 RS232 +5V +3V U2 Vo Vi LP2950 -3.0 C4 100n GND 1 C5 1uF A GND 2 3 C +5V 3 1 2 T3 BC847 1 12 13 14 15 16 17 18 19 U1 GND A R8 1k GND 10 8 VCC GND DCLK CC1000 RSSI DIO PCLK PDATA PALE CHP GND C9 22pF GND R2 47k 89C2051 1 R7 1k GND czerwona 10k C8 GND GND GND 10n R6 GND 12 9 7 C10 zielona R5 4k7 +5V P1.0 C7 10uF C6 470nF 2 T1 BC847 4 A B C JB 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PG0 PG1 GND VCC PG4 PG3 PE1 PE0 PE3 PE2 PE5 PE4 PE7 PE6 PB1 PB0 PB3 PB2 PB5 PB4 PB7 PB6 GND 100n C3 L1 10u VCC PF4 PF5 PF6 PF7 J1 ISP 1 2 3 4 JTAG GND R1 10k VCC J3 J4 PB1 PE0 PE1 1 2 3 4 JA 2 PF0 PF1 PF2 PF3 PB2 PB3 PB4 PB5 PB6 PB7 PB0 PE2 PE3 PE4 PE5 PE6 PE7 GND VCC 2 PG4 19 18 1 20 10 11 12 13 14 15 16 17 2 3 4 5 6 7 8 9 62 63 64 61 60 59 58 57 56 55 54 VCC (RD) PG1 (WR) PG0 (A8) PC0 (A9) PC1 (A10) PC2 (A11) PC3 (A12) PC4 (A13) PC5 (A14) PC6 (A15) PC7 (AD0) PA0 (AD1) PA1 (AD2) PA2 (AD3) PA3 (AD4) PA4 (AD5) PA5 (AD6) PA6 (AD7) PA7 (ALE) PG2 VCC 3 PG4 (TOSC1) PG3 (TOSC2) /PEN RESET GND GND 3 ATMEGA128 XTAL1 XTAL2 PB0 ( SS ) (INT0 / SCL) PDO PB1 (SCK) (INT1 / SDA) PD1 PB2 (MOSI) (INT2 / RXD1) PD2 PB3 (MISO) (INT3 / TXD1) PD3 PB4 (OC0) (IC1) PD4 PB5 (OC1A) (XCK1) PD5 PB6 (OC1B) (T1) PD6 PB7 (OC2 / OC1C) (T2) PD7 PE0 (PDI / RXD0) PE1 (PDO / TXD0) PE2 (AC+ / XCK0) PE3 (AC- / OC3A) PE4 (INT4 / OC3B) PE5 (INT5 / OC3C) PE6 (INT6 / T3) PE7 (INT7 / IC3) AREF AGND AVCC PF0 (ADC0) PF1 (ADC1) PF2 (ADC2) PF3 (ADC3) PF4 (ADC4 / TCK) PF5 (ADC5 / TMS) PF6 (ADC6 / TDO) PF7 (ADC7 / TDI) 52 21 VCC VCC GND GND 22 53 D 1 U1 24 23 25 26 27 28 29 30 31 32 34 33 35 36 37 38 39 40 41 42 51 50 49 48 47 46 45 44 43 X1 16Mhz C1 22p GND PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PG1 PG0 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PG2 GND C2 22p PA2 PA1 PA4 PA3 PA6 PA5 PG2 PA7 PC6 PC7 PC4 PC5 PC2 PC3 PC0 PC1 GND PA0 VCC PF7 PF6 PF5 PF0 PF1 PF2 PF3 PF4 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 JC 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 4 JD 4 A B C D Dodatek A. 55 Rys. A.2. Schemat płytki procesora ATmega128 PG3 A B C D 2 1 1 2 3 ISP 4 J3 rs232 Z7 GND 100n C3 L1 10u +5V Akumulator 2 1 sck 100uF J1 1 In 1 GND R1 10k +5V J4 1N5819 4 Feed 2 Out GND +5V 1 2 3 JTAG 4 GND On Gnd LM2575 3 Cin 5 VCC Cout 2 3 4 5 6 7 8 9 62 63 64 61 60 59 58 57 56 55 54 330uF 19 18 1 20 ss 10 sck 11 mosi12 miso13 14 15 16 17 330uH (RD) PG1 (WR) PG0 (A8) PC0 (A9) PC1 (A10) PC2 (A11) PC3 (A12) PC4 (A13) PC5 (A14) PC6 (A15) PC7 (AD0) PA0 (AD1) PA1 (AD2) PA2 (AD3) PA3 (AD4) PA4 (AD5) PA5 (AD6) PA6 (AD7) PA7 (ALE) PG2 100nF GND C4 2 PG4 (TOSC1) PG3 (TOSC2) /PEN RESET GND 2 XTAL1 XTAL2 PB0 ( SS ) (INT0 / SCL) PDO PB1 (SCK) (INT1 / SDA) PD1 PB2 (MOSI) (INT2 / RXD1) PD2 PB3 (MISO) (INT3 / TXD1) PD3 PB4 (OC0) (IC1) PD4 PB5 (OC1A) (XCK1) PD5 PB6 (OC1B) (T1) PD6 PB7 (OC2 / OC1C) (T2) PD7 PE0 (PDI / RXD0) PE1 (PDO / TXD0) PE2 (AC+ / XCK0) PE3 (AC- / OC3A) PE4 (INT4 / OC3B) PE5 (INT5 / OC3C) PE6 (INT6 / T3) PE7 (INT7 / IC3) AREF AGND AVCC +5V 100nF +5V PF0 (ADC0) PF1 (ADC1) PF2 (ADC2) PF3 (ADC3) PF4 (ADC4 / TCK) PF5 (ADC5 / TMS) PF6 (ADC6 / TDO) PF7 (ADC7 / TDI) ATMEGA128 2200uF 52 21 1 U1 24 23 25 26 27 28 29 30 31 32 34 33 35 36 37 38 39 40 41 42 51 50 49 48 47 46 45 44 43 GND 16Mhz C1 22p X1 GND C2 22p 10 12 5 7 6 11 +5V Out1 Out2 100n C7 GND R3 330 Z5 Enkodery +5V R4 4k7 8 13 14 2 3 GND GND R2 330 2 1 3 3 SI4946 VCC GND U3 In1 L298N In2 Out3 Out4 In3 In4 Gnd EnA EnB 9 Vcc SenseA 1 VCC VCC GND GND 22 53 4 Vs SenseB 15 4 3 2 1 R5 4k7 GND Scl Sda D5 D6 D7 D8 D1 D2 D3 D4 2 1 5 4 3 2 1 4 3 2 1 silnikL silnikP Z4 Z3 2 1 VCC Kamera Z6 J2C +5V Z2a J2C Z2 3 2 1 GND C9 22p C8 22p GND 16Mhz Q2 3 2 1 s1 s2 s3 s4 3 2 1 2 3 4 5 6 11 12 13 14 15 ss 16 mosi17 miso18 sck 19 9 10 J6 J5 GND +5V J4 +5V 4 C10 100n C11 220u AVCC AREF GND GND s4 s3 J3 4 3 2 1 3 2 1 GND +5V GND J1 s1 ATMEGA8 PD0 (RXD) (ADC0) PC0 PD1 (TXD) (ADC1) PC1 PD2 (INT0) (ADC2) PC2 PD3 (INT1) (ADC3) PC3 PD4 (XCK/T0) (ADC4/SDA) PC4 PD5 (T1) (ADC5/SCL) PC5 PD6 (AIN0) (RESET) PC6 PD7 (AIN1) PB0 (ICP) PB1 (OC1A) PB2 (SS/OC1B) PB3 (MOSI/OC2) PB4 (MISO) PB5 (SCK) PB6 (XTAL1/TOSC1) PB7 (XTAL2/TOSC2) 7 VCC GND 8 s2 J2 U4 3 2 1 23 24 25 26 27 28 1 GND +5V 20 21 22 A B C D 56 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Rys. A.3. Schemat sterownika Dodatek A. 57 Rys. A.4. Widok płytki sterownika Rys. A.5. Widok płytki procesora ATmega128 Rys. A.6. Widok płytki radiomodemu 58 Mały robot mobilny obserwujący otoczenie przy pomocy kamery Rys. A.7. Widok ścieżek płytki sterownika Rys. A.8. Widok ścieżek płytki procesora Rys. A.9. Widok ścieżek płytki radiomodemu Polecamy serwis z poradami dotyczącymi procesu pisania prac magisterskich - prace magisrterskie - serwis z wytycznymi, wskazówkami, normami - całkowicie za darmo Polecamy serwis darmowe _ prace mgr z bankowości - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy serwis darmowe _ prace mgr z prawa - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy solidny serwis darmowe prace mgr z prawa - znajdziecie tam darmowe fragmenty prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy serwis z darmowymi referatami - darmowe prace - strona z darmowym referatami, esejami, konspektami prac... Polecamy serwis darmowe _ prace mgr z _ pedagogiki - strona z darmowym i fragmentami prac dyplomowych - prace magisterskie, licencjackie, semestralne, zaliczeniowe. Polecamy internetowy serwis darmowe _prace mgr z _zarządzania - strona z całkowicie darmowym i fragmentami prac dyplomowych - prace licencjackie, magisterskie, semestralne i zaliczeniowe. Poradnik jak pisać prace dyplomowe znajdziesz na stronie abcpisania. Forum o serwisach zajmujących się pisaniem prac licencjackich. Zamawialiście prace licencjackie, chcecie o tym napisać? To jest właśnie odpowiednie miejsce - forum o pracach magisterskich Mamy specjalistów z zakresu bankowości, rachunkowości, finansów, ekonomii, marketingu, zarządzania, filologii polskiej, pedagogiki, socjologii, zarządzania zasobami ludzkimi, prawa, administracji, hotelarstwa i turystyki. Pisanie prac magisterskich i licencjackich Nie kopiujemy z innych prac, nie przepisujemy, a każda z naszych prac tworzona jest bezpośrednio pod potrzeby klienta i wykorzystywana tylko przez niego! Prace magisterskie - dobre Serwis "Prace magisterskie" pomoże napisać prace magisterskie i prace licencjackie zapracowanym studentom.