KNR Bionik

Roboty

TriOmiX II

Robot mobilny na kołach Omni

Autorzy

Bartosz Świstak
Piotr Sykulski
Rafał Jagielski
Tomasz Ferens

Historia

Robot jest rozwinięciem robota TriOmiX I. Wykorzystany został w projekcie ThrowBot.

TriOmiX II

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.