Zabawkowe ramię robota OWI 535 i sterowanie komputerem
Spis treści
Wstęp
Występuje na rynku zabawka politechniczna - ramię robota, znane m.in. pod nazwą OWI-535.
Ramie jest analogowo sterowane elektrycznie. Prawie każdemu kto je widzi wydaje się, że nie ma nic prostszego niż przerobienie go na sterowane komputerowo. A jednak. W internecie można napotkać sporo wpisów mówiących o rozpoczęciu takiej przeróbki. Jednak filmów dowodzących osiągnięcie pełnego sukcesu projektu - precyzyjnego wykonywania zadanych poleceń lub powtarzalnego wykonywania programu jest już tylko parę.
Dlaczego tak się dzieje? Spróbujemy poniżej odpowiedzieć na to pytanie.
Prace mechaniczne: Ramię robota
Ramię jest sprzedawane w postaci zestawu do samodzielnego montażu. To starannie opracowany zestaw. Jego złożenie nie jest skomplikowane, ale czasochłonne. Zajmuje ok. 6-8rh (roboczo-godzin). Umiejętność lutowania nie jest potrzebna.
Prace mechaniczne: Kontrola położenia
Aby komputer mógł precyzyjnie sterować robotem, musi wiedzieć co się z nim dzieje, tzn. w jakiej pozycji jest ramię. Być może najprościej zrobić to montując na przegubach potencjometry. Zwykle ludzie tak to robią i my też tak zrobiliśmy. Można zrobić to na dwa sposoby: zwykle ludzie montują je na zewnątrz lub bardziej elegancko, wbudowując je do wnętrza serwomechanizmów. Wybraliśmy drugie rozwiązanie. Montaż potencjometrów powoduje, że do każdego serwomechanizmu i/lub przegubu zaczyna dochodzić nie 2 ale 5 przewodów: standardowe zasilanie silnika, dodatkowe zasilanie potencjometru oraz sygnał zwrotny zależny od pozycji serwomechanizmu/przegubu. Ich montaż zajmuje umownie 2rh.
Co dalej?
Sterowanie
Standardowo serwomechanizmy ramienia są wyposażone w małe silniki zasilane prądem stałym. Biegunowość zasilania zmienia się zależnie od kierunku pracy. Ramię jest wyposażone w symetryczne zasilanie bateryjne. Od baterii można się uwolnić, ale od symetrycznego zasilania już nie bardzo. Tzn. trzeba się nauczyć z nim żyć. Serwomechanizmy są w zasadniczy sposób związane z konstrukcją ramienia i zmiana sposobu ich napędu np. na silniki krokowe dla osób odpowiednio zdeterminowanych jest możliwa, ale dla nas takie rozwiązanie nie wchodziło w grę. Brak ingerencji w serwomechanizmy ma też pewną zaletę - nasze ramię pozostaje zgodne z dotychczasowym manualnym analogowym kontrolerem.
Zapewne czytelnicy mają teraz przed oczami co najmniej układ przekaźników lub tranzystorów, ale szczęśliwie jest na sterowanie silnikami inny prosty sposób - układy scalone typu L293B. To proste układy dedykowane do tych celów, często spotykane w zabawkach. Co robią? mają cyfrowe wejście (kierunek i aktywność) i analogowe wyjścia na których przełączają biegunowość zależnie od stanu wejść. Jeden układ potrafi sterować dwoma silniczkami.
Cóż, do wysterowania naszego ramienia (5 serwomechanizmów) będą potrzebne 3 układy scalone tego typu i 10 cyfrowych linii sterujących (lub 12, jeżeli doliczymy oświetlenie). Ilość przewodów rośnie w oczach ;) Do robocizny doliczamy dodatkowe co najmniej 3rh ;)
Sterowanie poziom 2
W wypadku starego komputera PC należało by nadużyć portu równoległego (LPT). 8 bitów wyjścia + 2 dodatkowe bity sterujące. W wypadku współczesnych komputerów PC trzeba by użyć jakiegoś rozwiązania z USB - jak choćby Arduino - w szczególności, że za chwilę będzie potrzebny 5-cio kanałowy przetwornik analogowo-cyfrowy. My jednak upieramy się, aby do sterowania naszego ramienia użyć komputera Raspberry Pi. Co prawda z jego złącza GPIO dało by się wykrzesać tych 10 linii sterujących, ale wybierzmy bardziej eleganckie rozwiązanie - dodatkowy pośredni układ wejścia/wyjścia MPC23S17. Jak wynika z jego nazwy to układ współpracujący z magistralą SPI. Potencjalnie można by użyć też wersji i2c. Kosztuje nas to dodatkowe 2rh, gdy kupimy taką kartę lub 6rh, gdy zrobimy ją sami (tak jak my... zbudowaliśmy ją wg schematu ze strony dtronics.com).
Sterowanie poziom 3
Potencjalnie możemy już włączać i wyłączać serwomechanizmy. Musimy jeszcze wiedzieć kiedy mamy to robić. Mamy już system czujników/potencjometrów (5 czujników). Podłączamy je do komputera za pomocą przetwornika analogowo-cyfrowego. W naszym wypadku zastosowaliśmy kartę "ADC Pi V.1.0" łączoną z komputerem za pomocą magistrali i2c (przypominam, że to Raspberry Pi). Wraz z lutowaniem przewodów i wtyczek podsumujmy tą operację jako dodatkowe 2rh.
Półmetek?
Na tym etapie zainwestowaliśmy w projekt dobre 16-21rh i co najmniej 130$, a ramię nawet się nie rusza. Tzn. co najwyżej można nim nieskoordynowanie poruszać za pomocą jakiegoś IDE lub innego programu zarządzającego wejściem i wyjściem. W tym miejscu kończy się prawdopodobnie 80% projektów, których rozpoczęcie jest ogłaszane w internecie i zapewne 99% tych, których rozpoczęcia nie ogłoszono.
The Software (Oprogramowanie)
Aby to wszystko zaczęło działać i przyniosło chociaż trochę satysfakcji musimy napisać własne oprogramowanie. My zrobiliśmy to "z grubej rury". Nasz Rasberry Pi pracuje pod kontrolą systemu ARM Slackware Linux, a nasze oprogramowanie napisaliśmy w języku Ada. Umożliwia ono:
- ręczne sterowanie ramieniem (równolegle ze standardowym kontrolerem),
- zapisywanie ustawionych pozycji ramienia w pliku (czyli "rejestracja" programu),
- odtwarzanie zapamiętanych pozycji ramienia z pliku (czyli wykonywanie programu), oczywiście przy wykorzystaniu sprzężenia zwrotnego,
- kontrola nieprzekraczania skrajnych pozycji pracy serwomechanizmów,
- obsługę awaryjnej reakcji na zatrzymanie ramienia (tzn. gdy serwomechanizm jest włączony, a ramię się nie porusza),
- ignorowanie zakłóceń ;) ,
- podstawową obsługę dynamiki pracy serwomechanizmów (silniczki są małe i szybkoobrotowe - bez dodatkowej obsługi po odłączeniu zasilania potrafią obrócić serwomechanizm siłą rozpędu nawet o 2-3 stopnie); Dzięki temu uzyskaliśmy błąd odtwarzania pozycji każdego serwomechanizmu mniejszy niż ok.+-0,25 stopnia, przy czym błędy z poszczególnych ruchów (kroków programu) nie sumują się.
Programu nie będziemy opisywać szczegółowo. Wspomnimy tylko, że każdy serwomechnanizm jest sterowany oddzielnym taskiem. Każdy z tych tasków sprawdza stan swojego serwomechanizmu z częstotliwością 1kHz i z taką częstotliwością może go włączać lub wyłączać. Stan ramienia jest oczywiście na bieżąco dostępny dla wszystkich części programu. Do komunikacji przez magistralę SPI i i2c zostały wykorzystane biblioteki systemowe w języku C - uniwersalna WiringPi (i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), dedykowana do interfejsu PiFace (SPI). Obsługa protokołu układu scalonego ADC jest własna. Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh...
Koniec projektu
Jeżeli wystarczy nam determinacji i jak wszystko pójdzie zgodnie z planem, na koniec będziemy mieli chwilę satysfakcji:
Podsumowanie
Powyższy film dowodzi ;) , że nasz projekt zakończył się sukcesem. Wiele innych projektów wspominanych w internecie nie. Poprzedni rozdział wskazał chyba na podstawową przyczynę dlaczego tak mało projektów tego typu uwieńczył sukces. Część mechaniczna i elektroniczna to co najwyżej połowa projektu. Pozostałe przyczyny wymieniamy poniżej. Realizacja całego projektu zajęła ok. 56-66rh (projekt został wykonany głównie w czasie wakacji). Parę lat temu mniej czasu i pracy kosztowało nas dołożenie do niedużej frezarki sterowania CNC. A w omawianym teraz przypadku mówimy o zabawce...
Podsumowując przyczyny porażek przy tym projekcie należy wymienić:
- brak samodyscypliny ;) ,
- brak planu, z czego wynika nieprzygotowanie się na ew. trudności (patrz niżej), a może nawet sam fakt rozpoczęcie projektu ;) ,
- błędy w połączeniach elektrycznych - w tym projekcie ilość przewodów i połączeń rośnie dość szybko,
- brak dokumentacji wykonawczej - co uniemożliwia diagnostykę w razie wystąpienia błędów i problemów.
Dodatkowo należy jeszcze wymienić:
- niewystarczająca wiedza i umiejętności elektroniczne - standardowy zestaw ramienia może złożyć nawet laik lub nastolatek, ale połączenie wszystkich elementów systemu sterowanego komputerem nie jest już proste,
- niewystarczającą wiedzę i umiejętności programistyczne,
- niewystarczającą wiedzę i umiejętności dotyczące wykorzystywanego komputera i innego podłączonych do niego akcesoriów,
- niewystarczającą znajomość fizyki ;)
- brak czasu.
Jak widać jest to skomplikowany i czasochłonny projekt łączący ze sobą wiele dziedzin wiedzy. Stanowczo odradzamy go osobom nie mającym wystarczającej wiedzy i umiejętności, a przede wszystkim dużej ilości wolnego czasu. Z drugiej strony, przy tym projekcie można się bardzo dużo nauczyć. Z trzeciej strony, do nauki można sobie znaleźć/wymyślić projekt zawierający tylko jeden serwomechanizm, a nie pięć...
Autor: dr inż. Szymon Dowkontt