Zabawkowe ramię robota OWI 535 i sterowanie komputerem

Z Technique.pl
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... Szczęśliwie sterowanie silnikami można zrealizować w prostszy sposób - np. układami scalonymi 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 co najmniej dodatkowe 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 MCP23S17. 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 odpowiednią kartę rozszerzeń 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

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" firmy ABElectronics, łą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 (GNAT). 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 (ADC) jest własna (Ada). Natomiast za wyświetlanie siermiężnego UI (interfejsu użytkownika) odpowiada biblioteka Ncurses. Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh... Przy czym pewne fragmenty mieliśmy opracowane już wcześniej - jak np. obsługę ADC.

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ęcia 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 np. 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"