Roboty
TriOmiX II
Robot mobilny na kołach Omni
Autorzy
Bartosz ŚwistakPiotr Sykulski
Rafał Jagielski
Tomasz Ferens
Historia
Robot jest rozwinięciem robota TriOmiX I. Wykorzystany został w projekcie ThrowBot.
Opis konstrukcji
W porównaniu z poprzednią konstrukcją, główna platforma robota została zastąpiona wyciętym laserem plastikiem o grubości 1 cm. Do tej podstawy został dołączony zderzak plastikowy, którego głównym zadaniem było uniemożliwienie dostania się woreczków pod koła, jak i również bezpieczne odbicie się od drugiego robota. Dodatkowo robot nosi na sobie ozdobną obudowę wykonaną w technologii druku 3D.
Opis elektroniki
Elektronika robota składa się z następujących elementów:
- mostki H - elementy pozwalające sterować mocą przekazywaną na silniki
- Arduino UNO - występuje w roli sterownika napędów zawierającego informację o kinematyce urządzenia
- Raspberry Pi 2 - reprezentuje całość robota od strony urządzeń kontrolujących go (np. komputer). Poznwala nabezpośrednie sterowanierobotem poprzez gamepad.
- przetwornica impulsowa step-down do dostarczenia odpowiedniego napięcia zasilania
Do zasilania robota wykorzystane zostały dwa akumulatory litowo-polimerowe 7,4V.. Ze względu na dużą wrażliwość ogniw na zbyt duże rozładowanie - do kontroli ich stanu wykorzystano układ badający ich stan rozładowania i w przypadku znacznego obniżenia ich poziomu naładowania - blokuje działanie silników i powiadamia o tym użytkownika, przy pomocy diody kontrolnej.
Opis oprogramowania
Robot oparty został o system wbudowany Raspberry Pi 2 z wydajną czterordzeniową jednostką CPU opartą o rdzeń ARM. Zaprojektowana aplikacja pracuje pod kontrolą systemu Linux - dystrybucja Raspbian. Przy implementacji aplikacji dla robota zdecydowano się na elastyczną strukturę modularną, dzięki której możliwa jest łatwa modyfikacja oraz rozbudowa funkcjonalności robota w przyszłości.
Oddzielona została część tzw. logiki od części roboczej. Do logiki można zaliczyć Controller, który przetwarza sygnały otrzymane od modułów roboczych i zleca pracę innym modułom w określonych warunkach, odpowiedniej sekwencji i parametrami.
Do modułów roboczych z kolei zaliczyć można moduły takie jak:
- Network - odpowiedzialny za komunikację sieciową z komputerem centralnym (CC). Zastosowana biblioteka, to JSON-RPC, pozwalająca na zdalne wywołanie procedur z wykorzystaniem protokołu sieciowego i wiadomości w formacie JSON. Odpowiednie procedury odbierają komendy od CC i następnie moduł przekazuje je do Controllera.
- Gamepad - odpowiedzialny za odebranie danych od popularnego kontrolera gier Logitech F710 oraz przetworzenie ich. Zadaniem modułu jest wykrycie podłączonego kontrolera, następnie wykrycie zdarzeń (np. zmiana wartości na osi, lub wciśnięcie przycisku) i przesłanie tej informacji do Controllera.
- Motor - odpowiedzialny za przekazanie informacji w odpowiednim formacie do Arduino. Moduł ten implementuje komunikację z wykorzystaniem protokołu I2C (Arduino pełni rolę podrzędną w komunikacji - slave).
- Notifier odbiera komunikaty od sensorów i bada ich stan. Na tej podstawie generuje odpowiednie komunikaty i wpływa na świecenie odpowiednich diod informacyjnych na panelu kontrolnym.
Komunikacja między modułami oparta jest o mechanizm sygnałów i slotów biblioteki Boost. Do implementacji wykorzystane zostały wątki biblioteki pthread. Pozostałe mechanizmy wykorzystywały Linux’owe biblioteki systemowe.
Zadaniem Arduino jest odebranie komendy ruchu w układzie kartezjańskim i przetworzenie jej na odpowiednie wypełnienia sygnałów PWM, które sterują prędkością i kierunkiem obrotu silników. Odbywa się to poprzez zmianę bazy wektora ruchu na bazę zgodną z ustawieniem kół robota.