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: montując potencjometry 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. 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 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ść napięcia zależnie od stanu wejść. Jeden układ potrafi sterować dwoma silniczkami.
Do wysterowania naszego ramienia (5 serwomechanizmów) potrzeba 3 układów scalonych 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, do sterowania 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 będzie jeszcze potrzebny 5-cio kanałowy przetwornik analogowo-cyfrowy). My jednak uparliśmy 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 wybraliśmy 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 użyć też wersji z interfejsem 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 dtronixs.com).
Sterowanie poziom 3
Na tym etapie potencjalnie można już włączać i wyłączać serwomechanizmy. Musimy jeszcze wiedzieć kiedy ma się to dziać. Mamy już mechanicznie zabudowany 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 układami wejścia i wyjścia. Prawdopodobnie w tym miejscu kończy się 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 trzeba napisać własne oprogramowanie. My zrobiliśmy to "z grubej rury". Nasz komputer Raspberry 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 tej obsłudze 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 serwomechanizm 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ę i2c i SPI zostały wykorzystane biblioteki systemowe w języku C - uniwersalna biblioteka WiringPi (obsługa magistrali i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), biblioteka dedykowana do obsługi karty rozszerzeń PiFace (obsługa magistrali SPI i układu MCP23S17). Obsługa układu scalonego przetwornika analogowo-cyfrowego jest własna. Natomiast za wyświetlanie siermiężnego UI odpowiada biblioteka Ncurses. Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh...
Koniec projektu
Jeżeli wystarczy nam determinacji i 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, które były ogłaszane w internecie nie. Poprzedni rozdział wskazał chyba na podstawową przyczynę dlaczego tak mało z nich uwieńczył sukces. Część mechaniczna i elektroniczna to co najwyżej połowa pracy. Reszta to oprogramowanie. Poza brakiem oprogramowania lub jego wadami poniżej przedstawiamy, naszym zdaniem, najważniejsze uogólnione przyczyny porażek:
- 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ącą wiedzę i umiejętności elektroniczne - standardowy zestaw ramienia może sprawnie 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 wykorzystywanej platformy sprzętowej - komputera i podłączonych do niego akcesoriów,
- niewystarczającą znajomość fizyki ;)
- brak czasu.
Realizacja całego projektu zajęła ok. 56-66rh (projekt został wykonany głównie w czasie wakacji). Parę lat temu znacznie mniej czasu i energii kosztowało nas dołożenie do niedużej frezarki sterowania CNC. A w omawianym teraz przypadku mówimy o zabawce...
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ęć... Nie da się ukryć, że całe przedsięwzięcie nie jest warte poświęconego mu czasu...
Autor: dr inż. Szymon Dowkontt