Zabawkowe ramię robota OWI 535 i sterowanie komputerem

Z Technique.pl
Wersja z dnia 11:16, 25 sie 2014 autorstwa Szdowk (dyskusja | edycje) (Półmetek?)
Skocz do: nawigacja, szukaj


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.

Widok poglądowy. Widać dodatkowe przewody do potencjometrów zamontowanych wewnątrz serwomechanizmów.
Konstrukcja serwomechanizmu chwytaka uniemożliwia zabudowę potencjometru w jego wnętrzu. Na zdjęciu nasze autorskie rozwiązanie z potencjometrem suwakowym.

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.

Rozgałęzienie wejścia sterowania. Złącze prowadzące do komputera ma dodatkowo wyprowadzoną masę, której nie ma na złączu manualnego kontrolera. Wynika to z symetrycznego systemu zasilania i sterowania.

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.

Płytka ze sterownikami serwomechanizmów L293B.

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).

Karta rozszerzeń z układem wejścia-wyjścia. Karta przetwornika analogowo-cyfrowego jest zamontowana pod nią - wewnątrz obudowy.

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.

Zestaw ramienia połączony z komputerem i gotowy do pracy.

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ę SPI i i2c zostały wykorzystane biblioteki systemowe w języku C - uniwersalna biblioteka WiringPi (i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), biblioteka dedykowana do obsługi interfejsu PiFace (SPI). Obsługa protokołu układu scalonego przetwornika analogowo-cyfrowego 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 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 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


Powrót do "Strony głównej"


Powrót do "Drobnych porad"


Powrót do "Wydania 2014"