KNR Bionik

Roboty

Orfeusz

Robot Mobilny

Autorzy

Paweł Poławski

Wprowadzenie

Celem projektu było wykonanie mobilnego robota, którego możliwości będą podobne do możliwości zestawu LEGO RCX. Cel został osiągnięty, robot powstał całkowicie od podstaw i jest w pełni funkcjonalny, zgodnie z założeniami.

Opis

Celem projektu było zbudowanie robota mobilnego, który będzie sterowany za pomocą wewnętrznego systemu mikroprocesorowego, w oparciu o jeden z dostępnych na rynku mikrokontrolerów. Istotą powstania pomysłu była chęć zbudowania odpowiednika zestawu LEGO RCX o znacznie niższym kosztorysie a równie złożonych możliwościach. Warto by, zatem powiedzieć nieco o wyżej wspomnianym zestawie LEGO. Firma ta proponuje układ mikroprocesorowy o nazwie RCX (teraz już dostępna na rynku jest jego nowsza wersja NXT). Jest to system mikroprocesorowy z pakietem oprogramowania firmowego do programowania układu w dedeykowanym dla niego języku. Układ ten ma kilka wejść oraz wyjść, które zbudowano w oparciu o ujednolicony standard łączenia “klockowego”. Wszystkie peryferia dostępne są jako moduły, co pozwala na dowolną konfiguracje zestawu bazowego (od czujnika odległości po sterownik silników elektrycznych). Celem było zaprojektowanie i zbudowanie systemu o możliwie najlepszych parametrach końcowych, a jednocześnie znacznie niższej cenie.

Początkiem projektu było zbudowanie szkieletu robota. Do tego celu użyłem kątowników aluminiowych, które są wykorzystywane do wykończeń budowlanych. Jest to materiał bardzo tani, lekki i przede wszystkim łatwy w obróbce. Uzyskana stabilność konstrukcji przy nieporównywalnie niskiej masie pozwala na stwierdzenie, że przy konstrukcjach tego typu jest to jeden z najlepszych budulców. Do jego obróbki wystarczą zwykłe nożyczki, zaś do łączenia aluminiowe nity, dowolność konfiguracji zaś jest ogromna.

Kolejnym zagadnieniem związanym z projektem był rodzaj nadwozia, jakie zostanie wykorzystane do poruszania się robota. Nadwozie czterokołowe wymaga większej ilości silników i bardziej złożonej obsługi, jest stabilne jednak mało zwrotne. Nadwozie gąsienicowe jest trudne do zbudowania, ale jest to najlepsze z rozwiązań: połączenie zwrotności, uniezależnienie od warunków terenowych i prostota obsługi. Zdecydowałem się jednak na nadwozie bardziej zwrotne: czteropunktowe z jedną osią jezdną. Jest to najtańsze rozwiązanie jednak przy równym terenie pozwalające na maksymalną zwrotność i nie ustępujące w niczym pozostałym, ponadto jego obsługa nie obciąża procesora w znaczącym stopniu. Szkielet zbudowany został na planie kwadratu dla odporności konstrukcji na naprężenia, wszystkie punkty styku z podłożem znajdują się na okręgu, co pozwala na obracanie się robota w punkcie.

Dolna część konstrukcji stanowi oparcie układu jezdnego, górna zaś gniazdo dla całego hardware’u robota. Znajduje się tam procesor oraz dołączone peryferia takie jak ekran LCD oraz przyciski i czujniki. Razem szkielet uzupełnia się o odporność na naprężenia poprzeczne i podłużne.

Sercem całego układu jest mikrokontroler Atmega 8535 firmy Atmel, która od pewnego czasu skutecznie szturmuje krajowy rynek swoimi produktami. Układ wybrałem ze względu na maksymalną dostępną wewnętrznie ilość układów wbudowanych, jednocześnie duże możliwości oraz łatwość użycia go w projekcie. Wewnętrzne układy jak pamięć EEPROM (512 bajtów) itp. pozwalają na uproszczenie konstrukcji jak i łatwiejszy dostęp połączony z niższym poborem prądu przez układ. Duża ilość bibliotek opracowanych przez producenta pozwala uniknąć implementowania bardzo złożonych funkcji niskiego poziomu jak choćby obsługa wyżej wspomnianej pamięci. Sumarycznie zwalnia nas to z potrzeby pisania wszystkiego od podstaw i pozwala na optymalne wykorzystanie mocy obliczeniowej procesora. Wewnętrzny rezonator kwarcowy zwalnia nawet z konieczności stosowania kwarcu, a przy tym w układach nie wymagających wysokiej precyzji daje wystarczające możliwości połączone z oszczędnością mocy jak i miejsca. Układ to jeden z obszerniejszych sprzedawanych przez firmę Atmel, w obudowie PDIP jednak posiada aż 32 porty I/O co zwalnia przy mniej rozbudowanych projektach z potrzeby adresowania urządzeń.

Układ jak wspominałem wcześniej oparty jest o budowę modularną, wszystkie elementy (poza własnymi układami procesora) zbudowane są jako zewnętrzne układy, które można dowolnie konfigurować, przełączać i modyfikować. Pozwala to na dowolne wykorzystanie wyprowadzeń procesora, jednak wiąże się z koniecznością modyfikacji oprogramowania przy każdorazowej zmianie ustawień zewnętrznych. W tym aspekcie podobieństwo do zestawu LEGO jest bardzo wysokie. W skonstruowanym robocie poza wewnętrznymi układami procesora wykorzystałem właśnie kilka zbudowanych przeze mnie układów modułowych.

Moduły, jakie wykorzystałem to wyświetlacz LCD, czujniki odległości, klawiatura czteroprzyciskowa oraz silniki do napędzania konstrukcji.

Moduł LCD to standardowy wyświetlacz 2x16 ze sterownikiem firmy Hitachi, komunikuje się z procesorem za pomocą 7 pinów (interfejs 4 bitowy oraz 3 piny sterujące). Komunikacja polega na odpowiedniej modulacji sygnału na pinach sterujących i wysyłaniu ośmiobitowej instrukcji podzielonej na dwa pakiety po 4 bity (najpierw starszy, potem młodszy bit). Instrukcje wysyłane są bez sprawdzania bitu zajętości (Busy Flag) - zastosowałem algorytm polegający na odczekaniu czasu, który jest dłuższy od nominalnej jednostki wykonywania instrukcji. Po przetestowaniu w praktyce okazało się, że takie rozwiązanie funkcjonuje stabilnie.

Czujniki, jakie zastosowałem wykonane są z dwóch oporników, fototranzystora oraz diody podczerwieni. Dioda oraz fototranzystor umieszczone są w czarnych oprawkach skupiających, które poza skupianiem wiązki eliminują pewne stałe napięcie odczytu wynikające z bliskości elementów. Badanie czujników odbywa się za pomocą wewnętrznego przetwornika ADC.

Klawiatura czteroprzyciskowa to układ czterech klawiszy, które zwierają podciągnięte porty wyjściowe do masy, tym samym dając logiczne zero na odczycie odpowiedniego pinu.

Robota napędzają silniki wysokoobrotowe z przekładnią 10:1, poza wyświetlaczem to jedyny gotowy element, jaki wykorzystałem. Sterowanie nimi odbywa się poprzez dwa H mostki (L293D). H-mostki pozwalają na sterowanie ograniczonymi napięciowo pinami mikrokontrolera prądami o znacznie większym napięciu i natężeniu nawet kilku amperów. Silniki działają z pełną mocą lub są sterowane za pomocą sygnału, PWM co pozwala na dobór prędkości obrotu.

Do obsługi robota zaimplementowałem oprogramowanie w języku C z wstawkami asemblerowymi, które pozwalają na wykonywanie precyzyjnych instrukcji niskiego poziomu. Obsługa modułów to korzystanie z napisanych dla nich funkcji sterujących, które uniezależniają implementację algorytmu od ciągłego modyfikowania detalicznych ustawień. System oparty jest na wyświetlaniu kolejnych menu i interakcji z użytkownikiem poprzez nie, przez co decydowaniu o działaniach robota. Całość oprogramowania podzielona jest na kilka plików tematycznie, co ułatwia odnalezienie właściwego fragmentu kodu w przypadku potrzeby jego modyfikacji. Robot docelowo porusza się wykonując wskazania użytkownika zapisane w pamięci EEPROM lub ograniczoną interakcję z otoczeniem. Przewidziana jest możliwość zdalnej kontroli, jednak nie została ona zaimplementowana w ramach tego projektu (między innymi z powodu trudnego dostępu do takich elementów jak moduły radiowe).

Zawarte oprogramowanie pozwala na takie zachowania jak: wykonywanie zapisanej sekwencji ruchów, swobodną jazdę i unikanie zderzeń oraz śledzenie celu za pomocą czujników i podążanie za nim.

Podsumowanie

Uważam, że plan projektowy i zagadnienia z nim związane zostały zrealizowane. Uzyskałem układ o możliwościach takich, jakie posiada zestaw LEGO jednak znacznie tańszy i pozwalający na dowolną wręcz modyfikację i rozbudowę. Oprogramowanie obsługujące podłączone moduły nie wyczerpuje możliwości ich wykorzystania i pozostawia dużą dozę swobody programiście. Łatwość obsługi robota, połączona ze znacznie niższymi kosztami od robota wzorcowego a mimo to zwiększonymi w stosunku do niego możliwościami może nawet uczynić go atrakcyjnym dla szerszego grona odbiorców :)