Thursday, September 1, 2011

SDC - historia projektu


Celem projektu Small Droid-Cleaner (SDC) jest zbudowanie robota, który będzie w stanie wykonać określone zadania bez potrzeby pomocy ze strony człowieka na dowolnym etapie tej pracy. Pracę nad projektem rozpocząłem zimą na przełomie lat 2010/2011.
ilkadi Times 14.02.11
Projekt SDC: część 0 – planowanie.

Chyba każdy z nas – tych, którzy znają zapach roztopionej cyny, aromat wrzącej kalafonii, kto nie jeden raz obejrzał Star Wars, Walle, I Robot, przeszedł nie jedną futurystyczną grę komputerową – marzył by zbudować swojego robota. Przy tym takiego robota, którego potem się nie wstydzi nazwać droidem.

Moim zdaniem na początku trzeba ustalić cel, czyli trzeba jasno określić, jakie funkcje powinny być wykonywane przez robota, jak praktycznie będzie ten robot pomagał człowiekowi. Myślę, że jednym z problemów współczesnej robotyki jest tworzenie robotów tak po prostu dla “zabawy”, zgłębiania tajników super technologii, które są zbyt drogie do używania na co dzień. Na pewno nie dla “zabawy” w zwykłym sensie tego słowa, tylko coś w rodzaju robienia dla robienia – opracowania pełnych algorytmów aby przekonać się, że potrafimy coś zrobić, ale nie rozpracowywania algorytmu/technologii jako pewnego kroku prowadzącego do konkretnego celu.

Ważne jest, żeby celem był praktyczny problem - nie ma znaczenia czy jest to system kontroli zasłon i rolet zależny od stopnia oświetlenia dla własnego domu lub śmietnik przyjeżdżający po przywołaniu go, cel musi być z życia. Należy wyobrazić sobie granice do których jesteśmy w stanie dotrzeć podczas konstrukcji robota. Nie należy przesadzić, bo może się to skończyć ugrzęźnięciem w w połowie drogi przy konstrukcji jakiegoś skomplikowanego narzędzia. Jednocześnie wybrany cel powinien być dla nas wyzwaniem oraz być bardzo ciekawy, bo jak będzie nudny to również może to doprowadzić do zaprzestania prac w połowie drogi.

Wybrałem robota-sprzątacza. Użyteczność tego typu robota ciężko przecenić. Niestety, jest oczywiste, że wycieranie kurzu się nie uda - nie zrobię androida. Wystarczy czyszczenia podłóg. Na początku niech sobie radzi z czymś łatwym w rodzaju parkiety, później jak to się uda, pomyślę nad rozszerzeniem do sprzątania dywanów.

Cóż to jest pomysł. Spróbujmy sformułować to bardziej technicznie:

Potrzebuje z grubsza autko, które przejdzie całą powierzchnię pomieszczenia. Innymi słowy, musi rozumieć, w jakim punkcie pokoju się znajduje, widzieć jak się dostać do warunkowego miejsca zwanego "bazą", gdzie są przeszkody w rodzaju ścian i szaf, no i w końcu pamiętać w jakiej części pokoju już jest posprzątane a w jakiej nie.

Orientację robota można zrealizować przy pomocy swojego rodzaju mapy, w na której będą zaznaczone przeszkody, obszar posprzątany oraz obszar do sprzątania. Takie rozwiązanie daje też możliwość łatwej rozbudowy - można zakodować i rodzaj podłogi.

Oczywiście można wszystko zrobić ręcznie dla pewnego pokoju, ale pracujemy dla dobra całej ludzkości, dlatego będzie lepiej, żeby robot sam tworzył/zmieniał mapę, tym bardziej, że istnieją przedmioty takie jak kapcie i buty, które nie mają stałego miejsca.

W zasadzie robot może się orientować w odniesieniu do obiektów, takich jak kanapy, szafy i ściany. W tym celu potrzebuje on dalmierza. Dzięki niemu będzie on w stanie określić, gdzie się znajduje. Współrzędne na mapie jednoznacznie określają punkt, z tego puntu są pewne odległości dla pewnych kątów.

Sam system czyszczący nie ma na razie żadnego wpływu, przyjmujemy że przejeżdżając po całej powierzchni pokoju robot sprząta cały pokój. Jak to się uda – zostanie tylko wybór lub projektowanie lepszych urządzeń czyszczących lub dodanie do programu kilkukrotne przejeżdżanie wybranej powierzchni. W tym celu można posłużyć się technologiami czyszczenia ulic oraz supermarketów, w zasadzie mechaniczne sprzątanie okrągłym pędzlem wygląda dość realistycznie - stała praca silnika, para okrągłych szczoteczek, miniaturowy przenośnik i kontener na śmieci. Można zatem stwierdzić, iż to nie będzie na początku najważniejszym problemem do rozwiązania, lepiej zastanowić się, jak możemy zrobić podwozie, dalmierz oraz "główny komputer" robota, jakie części posiadam oraz co należy dokupić.

Już pól roku u mnie leży mikrokontroler Arduino Duemilanove. Do niego istnieje dość dużo bibliotek i różnych czujników, a nawet kilka podręczników. Posiada on procesor 16 MHz CPU, 32kB pamięci oraz 13 wyjść cyfrowych.

Oglądając strony sklepów internetowych w poszukiwaniach dalmierza znalazłem czujniki kilku rodzajów podczerwieni oraz ultradźwiękowe. Cena ostatniego jest porównywalna z Arduino (który nawiasem mówiąc kosztuje nieco ponad 34 dolary.) Na pewno ma dobre cechy – działa w przedziale od 0,1 do 6 metrów, nie wymaga dużej ilości wejść/wyjść, ale trochę szkoda pieniędzy na tak wąsko wyspecjalizowane urządzenie. Mój wybór w końcu padł na kamerę 0.3 Mpix, kosztującą około 25 dolarów, mającą ogromny potencjał rozwoju funkcjonalności. Oczywiście fora mówią , że z analizowaniem całego strumienia wideo Arduino nie radzi sobie – za dużo pracy dla niego - ale z robieniem zdjęć od czasu do czasu nie ma żadnych problem.

Być może czytelnik powie - zaczekaj, co jedna kamera ma do pomiaru odległości. I rzeczywiście, zapomniałem powiedzieć, że mam siedem diod laserowych. A pomysł z dalmierzem jest taki – po prostu obliczamy długość przeciwprostokątnej trójkąta prostokątnego - wiemy, pod jakim kątem w stosunku do kamery jest ustawiony laser. Kiedy plamka lasera trafi w centrum macierzy – jesteśmy w stanie określić, że to jest naprzeciwko kamery, i znając odległość od lasera do kamery oraz kąt obrotu, możemy obliczyć szukaną długość.

Tak więc nie bałem nie zbyt wielkich możliwości Arduino, ponieważ nie muszę mieć całego obrazu – potrzebuję tylko kilka pasków przechodzących przez środek macierzy - nawet nie ma potrzeby odczytywania wszystkich kolorów, wystarczy czerwony, bo mam czerwone lasery. Idea analizy polega na tym, że robię dwa zdjęcia z tej samej pozycji – z włączonym laserem i wyłączonym, określam gdzie jest plamka lasera i wyciągam wniosek, w którą stronę mam poruszać laser - w lewo czy w prawo, a jak trafiamy w centrum to ustalamy odległość.

Natomiast pojawił się nowy problem – kamera ma 16 pinów, oraz dwa kolejne od lasera - trzeba coś nieco większe niż moje Arduino i wybór pada na Arduino Mega, który jest oczywiście droższe prawie dwa razy, ale ma o wiele więcej wejść/wyjść, o cztery razy więcej pamięci, którą będziemy potrzebowali do przechowywania mapy oraz czasowych zdjęć.

Cóż, jeśli nie zrobiłem krytycznych błędów w projektowaniu, to mam idee działającego dalmierza. Teraz musimy zainstalować go na jakąś mobilną bazę. Przeszukując w internecie różne sklepy z zabawkami, znalazłem ku swojemu zdziwieniu u japońskiej firmy modelowej Tamya dobrą podstawę. Jest wygodna, bo pozwala na obracanie się, stojąc w miejscu. Poza tym wystarczą tylko dwa silniki do sterowania.

Postanowiłem nie zatrzymywać się tylko na podwoziu i zrobić do tego poruszającą się głowę, obracającą się za pomocą siłownika. Pozwoli to na dokładne określenie pod jakim kątem robot patrzy na świat, co jest istotne podczas tworzenia mapy - daje to również więcej możliwości analizowania w teoretycznie bardziej skomplikowanych miejscach takich jak pod biurkiem.

Więc plan jest przygotowany i budżet nie jest tak wielki.

Trzeba kupić:
1) podwozie ($ 20-35) – razem z silnikami oraz potrzebnymi trybami.
2) siłowniki co najmniej 3 (kupię cztery za 20 USD) – dla manipulowania głową w pionie, poziomie oraz laserem. Czwarty może być wymagany dla podnoszenia/opuszczania narzędzia do czyszczenia.
3) Arduino Mega (oficjalna cena 50 euro)
4) kamera 0.3 Mpix - $ 25


ilkadi Times 14.02.11
Projekt SDC: część 1 – mechanika.

Zwykle, podczas procesu twórczego nie ma czasu na robienie różnych zdjęć lub wydaję się, że ostateczna wersja będzie wystarczająca, ale z zasady bardziej interesujące są zdjęcia samego procesu. Cóż, nie będę mądry po fakcie, żałuję oraz się postaram zrobić więcej zdjęć w przyszłości.

Tutaj powiem jak spędziłem dwa tygodnie swoich ferii zimowych i trudności jakie spotkałem jeszcze zanim dostałem kamerę, jej specyfikację oraz jak ostateczenie otrzymałem bitmapę na swoim komputerze za pomocą tej kamery.

Na samym początku powiem, że już w trakcie prac początkowych pojawiło się kilka odstępstw od zakładanego planu. Po pierwsze – do podstawy dodatkowo dokupiłem silniki krokowe - aby uzyskać wbudowany do podstawy dalmierz, tym ułatwiając sobie życie. Dla tego podwozie zostało kupione z jednym silnikiem by nie używać go później, skoro mam lepsze. Niestety okazało się, że tamte silniki krokowe nie są takie jakich potrzebowałem i teraz nie wiadomo co z nimi zrobić. Dodatkowo zakupiłem specjalny moduł dla małych Arduino – sterujący działaniem silników, bo nie orientuje się jak mam to zrobić sam, jakie detale mam kupić, itp – okazuje się że nie jestem silny w elektronice, ale się nie poddaję.

Ostatecznie silniki krokowe po nieudanych próbach dostosowania ich zostały odłożone na bok, może jeszcze się na coś przydadzą. Podwozie natomiast zostało podzielone na części.

Praca z tego powodu wcale nie stanęła. Planowałem co najmniej piętrową lokalizacje wszystkich wnętrzności, przy tym głowa liczy się oddzielnie.

Pomiędzy gąsienicami znajduje się moduł silnikowy (który oczywiście jest podłączony do małego Arduino, ale dla przyjemności i stworzenia atmosfery będę nazywał te podzespoły – Modułem Silnikowym), baterie oraz silniki trakcyjne.

Powyżej gąsienic znajduje się drugi poziom, na którym będzie umiejscowiony: Arduino Mega (być może dla piękna nazwie go Komputerem Głównym) oraz siłownik do trzymania głowy.

Ostatecznie ramę zrobiłem ze aluminium używanego do wzmocnienia kątów między ścianami w mieszkaniach. Może wygląda surowo, ale jest to materiał łatwy w obróbce i tani (2,5 metra kosztuje około 1-2 dolarów)

Najpierw zrobiłem większą ramę główną, następnie mniejszą do Arduino Mega. W rzeczywistości dalej pracowałem nad głową i po zrobieniu uchwytów do siłownika działającego w pionie przeszedłem do siłownika działającego w poziomie, który jest widoczny na górnym zdjęciu. Głównym wyzwaniem było zrobienie trwałej podstawy pod głowę, bo nie można jej zostawić po prostu na siłowniku - będzie zbyt luźne, razem z ryzykiem złamania czegoś w silniku lub detalach prowadzących do silnika. W końcu użyłem butelki. Wybrałem coś, co zniszczyło jej szczelną plastykową istotę - pokrywę. Na niej będzie się trzymać głowa, siłownik będzie tylko dodatkowym punktem oparcia, pozwalającym kręcić się głowie. Prace niezbędne do utworzenia podstawy (na zdjęciu powyżej) zajęły gdzieś dwa lub trzy dni od rana do wieczora.
Oto głowa od wewnątrz. Zdradzę tu wielką tajemnicę - to było kiedyś pudełkiem na dziesięc płyt CD.

Stosunkowo długo trwało zamontowanie siłownika do sterowania głową w pionie. Tutaj użyłem stalową listwę budowlaną zamiast aluminiowej. Skomplikowało mi to trochę pracę, ale efektem jest dużo bardziej wytrzymały uchwyt. Dużo czasu zajęła mi również instalacja lasera – dla tego że musi być dokładny, a taki cel zawsze jest trudny do osiągnięcia.

Laser idealnie wszedł do środka armaty z zabawki "Kosmopiechoty", technika która czekała na tą godzinę w pudełku w szafie. Przydały się części nie wykorzystane w podstawie - w zasadzie dzięki nim udało się zamontować lasera tak, żeby dokładność kroku była równa jednej czwartej stopnia. Dużo czasu zajęło lutowanie tych przewodów. W sumie praca nad głową robota zajęła mi ponad dwie trzecie z tych moich dwóch tygodni ferii.

Już zebrana głowa. Widoczne jest czarne oko kamery. Po prawej stronie kamery znajduje się laser.
Oto głowa zamontowana na górnym poziomie. Na tym zdjęciu wyraźnie widać, armatkę w której schowany jest laser. Mała zębatka podłączona jest do siłownika, większa - do osi, na której zamontowany jest laser. Stosunek zębów 12:42. Dla tego nieprawdę powiedziałem o dokładności 1:4 - w rzeczywistości jest to 2:7.
Z grubsza na tym zdjęciu znajduje się wszystko. Podstawa po prawej stronie, baterie po środku, zamontowana głowa oraz mikrokontrolery – po lewej. Lewy dolny mikrokontroler to Moduł Silnikiwy. Widać że Komputer Główny wygląda inaczej – są wolne piny, ale prawdziwy moduł silnikowy zainstalowany na małym Arduino korzysta ze wszystkich pinów.


ilkadi Times 01.04.2011
Projekt SDC: podwozie oraz montowanie ogólne.
Wreszcie nadszedł czas, aby podzielić się moim doświadczeniem z robotechnologii. Mówię niczym innym jak językiem Prima Aprilis - oczywiście to zdjęcie mojego robota, ale na razie nie jest on niczym innym niż połączenie plastiku z drewnem, szkłem i innymi minerałami. Do robotechnologii nie przybliżyłem się jeszcze prawie wcale.


Dlaczego? Dla tego, że na razie korzystałem tylko ze swoich umiejętności budowania modeli, niektórych intuicyjnych pomysłów co i jak powinno działać. Wszystkie problemy jeszcze przede mną - pierwszy poważny – dogadać się z kamerą i zrozumieć, co ona mówi. Przed tym należy połączyć wszystko przewodami, jeszcze trochę pracy z elektroniką, dopiero potem - algorytmy i ich realizacja w praktyce.


Przyjżyjmy się co nowego:
Podwozie z Japonii, przyleciało do mnie ze Stanów. Tutaj jest ono już zmodernizowane. W orginale to jest zestaw firmy Tamiya dla japońskich dzieci w wieku szkolnym, pragnących się dowiedzieć jak działają mechanizmy oraz biegają elektrony. Nazywa się ten zestaw Shovel/Dozer. Pierwsze moje podwozie – Tracked vehicle chassis kit, jak mówiłem o tym wcześniej, nie posiadało wszystkich niezbędnych cech i zostało przeznaczone na części zamienne. To nowe podwodzie było bardziej podobne do spychacza, ale przerobiłem je, żeby mieć trójkątne gąsienice – w celu piękna o harmonii... A poza tym trójkątne gąsienice pozwoliły stworzyć miejsce na zamontowanie baterii, którę będą zasilaniem zewnętrznym do silników, aby nie przeciążać mikrokontrolerów.
To właśnie jest podstawowa różnica - dwa silniki, po jednym dla każdej ze stron. “Skrzynia biegów” zapewnia przełożenie około 40:1, co praktycznie przekreśla prawdopodobieństwo "spalenia" silników.
System z którego planuje skorzystać do podniesienia/opuszczania mechanizmów do czyszczenia.
Tamiya zakładała możliwość kontroli nad spychaczem za pomocą panelu sterowania i wiązki przewodów o metrowej długości. Ponieważ już się pobawiłem i nie potrzebuję więcej takiej zabawki - postanowiłem wykorzystać to do doraźnych potrzeb. Okazało się że jest to dobrym rozwiązaniem problemu, który się pojawił wraz z nowym podwoziem. Mianowicie – na starej podstawie zakładałem dwupozimowy sposób instalacji detali, ale nie było możliwości montowania na spychacz podstawy z aluminium i czegokolwiek jeszcze. Na szczęście - wpadłem na pomysł, aby użyć pudełka w którym inżynierowie Tamiya zakładali, że będą znajdować się urządzenia do sterowania. Po wyrzuceniu niechcianych rzeczy z wewnątrz, cięcia nadmiaru plastyku w nim umieściłem baterie oraz moduł silnikowy, nawet pozostało miejsce na przewody. "Szyja" znalazła sobie dobre miejsce u góry, do tego możliwy jest uproszczony dostęp do wnętrza pudełka, dzięki wymyślonemu w celu umiejscowienia baterii otworze.
Musiałem usiąść i pokombinować, jakby połączyć ten pilot z podwoziem, bo producent z jakiegoś powodu nie przewidział możliwość montażu panelu sterowania do obiektu sterowanego przez niego, ale w końcu jakoś rozwiązałem to nieporozumienie. Rozwiązanie przyszło dzięki częściom dodatkowym pochodzącym z dwóch moich zestawów.
Arduino Mega został dołączony do panelu z tyłu drobnym plecaczkiem. Stara rama aluminiowa została wykorzystana tutaj jako ochrona przed nieprzyjaznym środowiskiem, które może spotkać robota np. po wywróceniu się robota na plecy lub działaniem beta promieniowania podczas gotowania wody w czajniku.
Oczywiście zakłada się, że przed łyżką będą jakieś mechaniczne szczotki, które będą zbierały śmieci do niej, a potem robot będzie opróżniać ją w określonej lokalizacji.


Na tym kończą się zapisy w moim blogu. Gdzieś w maju-czerwcu zrobiłem “plecaczek” z pudełka do dyskietek, w którym zostały zamontowane moduł silnikowy i blok baterii. Też gdzieś w tym czasie znalazłem szczotki w sklepie i je zamontowałem. Połączyłem wszystko przewodami, tak że robot już się porusza.
W tym momencie robię nową głowę, bo powstał problem z połączeniem przewodów z głowy z mikrokontrolerem. Dla tego pracuje nad taką w której zmieści się specjalny mikrokontroler dla sensorów. Czyli będę miał trzy mikrokontrolery – jeden odpowiadający za silniki, drugi za sensory, trzeci za połączenie tego razem, sterowanie i rozumienie celu.

Jak będę w Polsce - mam nadzieje skontakować się z pewnym profesorem na wydziale, który mam nadzieje, podpowie mi jak poradzić sobie z kamerą.

Ten projekt jest częścią większego projektu. Moim zdaniem nie warto za wszelką cenę wciągać roboty do ludzkiego środowiska, uczyć je rozumieć przestrzeń, poruszać się, rozpoznawać głosy, pismo etc. Istnieje duża działka pracy dla robotów, w której potrzebują one posiadać znacznie mniej umiejętności, takie jak: wiedzieć gdzie się znajdują, czy współpracują z jakimiś innymi robotami, czy istnieją przeszkody na ich drodze.

Moim celem jest wymyślenie prostego środowiska, w którym roboty będą w stanie same robić swoją cześć pracy. Noszę się z pomysłem instalacji czegoś w rodzaju lokalnego GPSu w mieszkaniu (dalej biurze, supermarkecie etc.), co pozwoli robotowi bez większych problemów dokładnie określić swoje położenie.Wtedy sensory będą potrzebne tylko dla omijania przeszkód. Taki GPS można wykorzystać w inną stronę – jak wiemy gdzie roboty się znajdują, to możemy nimi sterować przy użyciu stacji bazowej posiadającej coś więcej niż mikrokontroler, na przykład wykorzystywać dla tego serwer, dla którego roboty będą rękoma i nogami. Czyli można zrobić system, który będzie wykorzystywał obecnie istniejące środki – komputery w domu, serwery w biurach lub supermarketach, który weźmie na siebie cały ciężar mocy obliczeniowej, a roboty staną się zabawkami, którymi on będzie sterował.


Po za sprzątaczem mam pomysł na dwa przydatne (raczej w biurach) typy robotów: śmietnik przyjeżdżający po np. naciśnięciu guzika, oraz “mysz” - jeżdrzące pudełeczko do przekazywania dokumentów. (Pracownik A w specjalnym programie na komputerze przywołuje robota do siebię, wkłada w niego dokumenty, pisze w komputerze dane pewnego pracownika B i robot odjeżdża do niego).


Przed rozpoczęciem pracy nad systemem oraz środowiskiem potrzebuje skanującego obszar robota, do robienia mapy. Niestety koszty takiego środowiska zaczynają rosnąć i mogą być raczej rozpatrywane przez dużą firmę niż prywatną osobę.