Maciej Wochal, Opiekun koła: Dr inż. Dawid Cekus Politechnika Częstochowska, Wydział Inżynierii Mechanicznej i Informatyki, Instytut Mechaniki i Podstaw Konstrukcji Maszyn, Koło Naukowe Komputerowego Projektowania Urządzeń Mechatronicznych i Maszyn WIZUALIZACJA I STEROWANIE ROBOTEM Streszczenie: W pracy przedstawiono wykorzystanie środowiska programistycznego Python wraz z biblioteką graficzną VPython do wizualizacji i sterowania ruchami robota budowanego w ramach Koła Naukowego Komputerowego Wspomagania Projektowania Urządzeń Mechatronicznych i Maszyn. Ponadto zilustrowano algorytm sterowania ramieniem robota. Słowa kluczowe: Python, sterowanie 1. Wstęp W związku z budową w ramach Koła Naukowego Komputerowego Wspomagania Projektowania Urządzeń Mechatronicznych i Maszyn robota kroczącego przedstawionego na rysunku 1, w niniejszej pracy przedstawiono sposób jego sterowania oraz wizualizację ruchów roboczych (aktualne położenie elementów robota). Do tego celu wykorzystano środowisko programistyczne Python oraz bibliotekę graficzną VPython (Visual). Rysunek 1. Budowany robot kroczący
2. Biblioteka graficzna VPython Jednym z ważniejszych składników wykorzystywanym do sterowania robotem i wizualizacji jego ruchów jest biblioteka graficzna VPython [1], bez której wiele rzeczy byłoby bardziej skomplikowane i zajęłoby sporo więcej czasu. Biblioteka ta oferuje wiele obiektów gotowych do natychmiastowego wykorzystania (rys. 2). Rysunek 2. Przykładowe obiekty występujące w bibliotece VPython Kolejną przydatną cechą biblioteki Visual jest pełna automatyzacja zarządzania sceną 3D. Nawet najprostszy program korzystający z tej biblioteki wyposażony jest w funkcje obracania i skalowania sceny. 3. Model robota W środowisku programistycznym Python, przy wykorzystaniu wspomnianej biblioteki Visual, jako pierwsze zamodelowano podstawowe części, które w projekcie są wielokrotnie wykorzystywane (rys. 3). Następnie podzielono modelowanie ramienia robota na etapy (rys. 4), w których najpierw wykonano model chwytaka, po czym zagnieżdżono go w kolejnym członie, itd. Każdy z elementów posiada lokalny układ współrzędnych, co znacznie ułatwia sterowanie.
Rysunek 3. Podstawowe elementy zamodelowane w programie Python Rysunek 4. Etapy modelowania ramienia robota
4. Algorytm sterowania W celu interakcji z użytkownikiem, wykorzystano wbudowane procedury obsługi klawiatury (rys. 5) i myszki (rys. 6), które jednocześnie pozwoliły na znaczne uproszczenie programu. if scene.kb.keys: k = scene.kb.getkey() if k== left : [ustalona akcja] Rysunek 5. Procedura obsługi klawiatury W każdej pętli programu sprawdzany jest stan urządzeń typu HID (Human Input Devices). Każdy klawisz klawiatury ma przypisaną własną parę sygnałów, zwanych scancode. Naciśnięcie dowolnego klawisza generuje sygnał odpowiedniego przerwania, które z kolei jest obsługiwane przez podprogram czytania i interpretacji zawartości bufora klawiatury. Jeżeli zostanie wykryta aktywność ze strony użytkownika, program sprawdza czy naciśnięty klawisz jest wykorzystywany do sterowania pracą robota. Po zidentyfikowaniu wciśniętych klawiszy uruchamiane są funkcje sterujące położeniem poszczególnych członów w przestrzeni, oraz prędkością zmiany położenia. m = scene.mouse if m.clicked: obiekt = m.picked Rysunek 6. Procedura obsługi myszki Obsługa myszki sprowadza się do odczytania identyfikatora klikniętego obiektu, co w późniejszym etapie pozwala na wybranie aktywnego członu robota. Informacja o kliknięciu dotyczy obiektu najniższego poziomu. Dopiero później następuje rekurencyjne przeszukiwanie drzewa relacji pomiędzy ramkami, w celu określenia, do którego członu należy kliknięty obiekt. Ogólny algorytm sterowania ramieniem robota jest stosunkowo prosty: jeżeli kliknięty obiekt znajduje się w ramce grupującej elementy, następuje sprawdzenie, czy jego ramką jest któryś z obsługiwanych członów robota, jeśli nie wykonywana jest ta sama procedura sprawdzająca dla ramki, w której znajduje się aktualny element i tak do momentu, w którym pierwszy warunek nie zostanie spełniony, lub zostanie określone, w którym członie znajduje się kliknięty element, po wykryciu, na którą część robota kliknięto, następuje jej aktywacja, czyli zmiana koloru części, oraz ustawienie wymaganych zmiennych. 4.1. Sterowanie serwomechanizmami W momencie, gdy użytkownik wciśnie na klawiaturze strzałkę w lewo, lub w prawo, następuje obrót aktywnej części o kąt ustalony za pomocą strzałek górnej
i dolnej. Ruch robota realizowany jest jednocześnie w modelu wirtualnym, jak i w obiekcie rzeczywistym. Od strony sprzętowej do sterowania serwomechanizmami użyty został sterownik Pololu Maestro USB Servo Controller (rys. 7), z którym komunikacja może przebiegać na poziomie portu szeregowego w standardzie TTL (+5V), co umożliwia podłączenie np. adaptera Bluetooth, czy mikrokontrolera, lub poprzez kabel USB widziany przez komputer, jako wirtualny port szeregowy. Rysunek 7. Sterownik serwomechanizmów Mini Maestro 12-Channel USB Servo Controller W celu ustawienia wybranego serwomechanizmu w wybranej pozycji należy nawiązać połączenie ze sterownikiem, a później sterowanie polega na przesyłaniu trój-bajtowych instrukcji sterujących (rys. 8). 5. Wnioski Rys. 8. Instrukcja sterująca Mimo iż wszystkie założone cele zostały osiągnięte, to w obecnej postaci opracowany program nie nadaje się do sterowania całym robotem kroczącym, a jedynie do sterowania jego ramionami. Trudno jest wyobrazić sobie sterowanie maszyną składającą się z ponad dwudziestu serwomechanizmów przy użyciu jedynie kilku przycisków. Można w ten sposób na przykład zdefiniować kierunek, w którym robot miałby się przemieszczać, a robot wykonałby resztę czynności automatycznie, jednak będzie to wymagało jeszcze sporo nakładów pracy nad algorytmami, które sprawią, że będzie on mógł się poruszać niemal autonomicznie,
a sterowanie będzie polegało jedynie na ustaleniu pewnych wytycznych, a nie pozycjonowaniu każdego serwomechanizmu z osobna. Literatura 1. www.vpython.org 2. D. Scherer, P. Dubois, B. Sherwood, VPython: 3D Interactive Scientific Graphics for Students, Computing in Science and Engineering, 2000, 82-88.