Przedstawiony robot mobilny powstał na potrzeby mojej pracy inżynierskiej. Głównym przeznaczeniem robota było przeprowadzenia testów algorytmu lokalizacji. Oczywiście robot może zostać wykorzystany również w innym celu, jak inspekcja, monitoring terenu i wielu innych.
Przede wszystkim chodzi o możliwość zdalnego monitorowania danego terenu o płaskiej formie ukształtowania i utwardzonej nawierzchni. Jednak ze względu na stosunkowo rozbudowany system sensoryczny robot zyskuje znaczną uniwersalność. Po wyposażeniu robota w odpowiedni manipulator będzie on mógł pełnić funkcję manipulacyjną, a także transportową.
Założenia konstrukcyjne
- Konstrukcja czterokołowa, przy czym każde z kół napędzane jest niezależnie.
- Zmiana kierunku jazdy przez różnicowanie prędkości kół dwóch stron robota, czyli tak, jak w konstrukcjach typu czołgowego.
- Elementy konstrukcyjne wykonane ze stopu aluminium.
- Łożyskowanie osi kół.
- Nisko zawieszony środek ciężkości, zwarta konstrukcja.
- Modułowa budowa, aby ułatwić dalszy rozwój projektu. Aktualnie robot składa się z następujących modułów:
- moduł zasilania,
- moduł sterownika silników,
- moduł obsługi sensorów,
- moduł komputera nadrzędnego.
- Komunikacja modułów z wykorzystaniem magistrali I2C.
- Każde z kół robota wyposażone zostało w enkoder magnetyczny.
- Wyposażenie w sensory inercyjne, wykorzystywane do lokalizacji.
- Rolę jednostki nadrzędnej pełni komputer Raspberry Pi, w wersji B, z zainstalowanym systemem Raspbian.
- Komunikacja z robotem wykorzystująca protokół SSH i sieć bezprzewodową Wi-Fi.
Zasięg robota zależy głownie od umieszczonych akumulatorów i przyjętych rozwiązań oszczędzania energii. Początkowo przyjmuje się działanie robota na obszarze o powierzchni nie przekraczającej 0,5 ha. Dodatkowo, nośność robota, przy masie własnej na poziomie 3,5 kg szacuje się na około 3 kg. Zastosowane napędy, przy braku obciążenia i płaskim terenie pozwalają na rozwijanie prędkości do 0,9 m/s.
Układ mechaniczny
Część mechaniczna robota została zaprojektowana w wersji studenckiej oprogramowania Autodesk Inventor 2013. Prace projektowe były wykonywane etapowo, tak aby umożliwić współdziałanie poszczególnych komponentów wchodzących w skład urządzenia. Starano się minimalizować rozmiary robota, zachowując przy tym odpowiednią ilość miejsca dla poszczególnych podzespołów. Jednak, głównym kryterium było uzyskanie zwartej, niezawodnej i dość odpornej na uszkodzenia konstrukcji.
Rama robota
Rama robota wykonana została z aluminiowych ceowników, ze stopu PA38 (EN AW-6060). Płytę podłogową wycięto z blachy aluminiowej o grubości 2 mm. W korpusie robota umieszczono dwie komory do przechowywania akumulatorów. Zostały one wykonane z prostokątnych profili aluminiowych o wymiarach 30x50x2,5. Ich głównym zadaniem jest odizolowanie akumulatorów od pozostałych podzespołów umieszczonych w centralnej części robota. Zakłada się, że aluminiowe komory przynajmniej częściowo ochronią pozostałe podzespoły w przypadku uszkodzenia akumulatorów.
Napędy
Napędy robota to silniki szczotkowe prądu stałego (DC) Pololu 37D, z przekładnią 67:1, bez zintegrowanego enkodera. Silnik ten charakteryzuje się: momentem obrotowym o wartości około 1,4 Nm, obrotami na poziomie 150 RPM, poborem prądu bez obciążenia równym 0,3 A i prądem przy zatrzymanym wale osiągającym wartość 5 A. Wymienione parametry osiągane są przy napięciu zasilania równym 12 V. Oszacowano, że napędy takie umożliwią robotowi pokonywanie wzniesień o kącie nachylenia do 45o, zachowując przy tym pewien zapas mocy.
Koła
Wykorzystano koła Mobot MBW-120/55/4, które składają się z plastikowej felgi i gumowej opony z bieżnikiem. Średnica zewnętrzna koła to 120 mm, natomiast wewnętrzna wynosi 55 mm. Ze względu na rodzaj gumy, typ i głębokość bieżnika, koła te nadają się do stosowania na nierównym terenie.
Przeniesienie napędu na koła
Przeniesienie napędu na koło zrealizowano z wykorzystaniem zaprojektowanej, wydrążonej osi z otworem pod wał silnika o średnicy 6 mm z jednej strony i otworem gwintowanym z drugiej, gdzie mocowane jest koło. Oś została wykonana ze stopu aluminium w procesie toczenia wałka. Dodatkowo, na końcu osi został wyfrezowany sześciokąt, który umieszczany jest w gnieździe koła. Każda oś koła jest dodatkowo łożyskowana w celu przeniesienia punktu podparcia osi jak najbliżej koła.
Gniazda łożysk umieszczono na zewnątrz korpusu robota, w taki sposób, że częściowo wpuszczone zostały do kół. Wykorzystano łożyska kulkowe typu 61901 2RS, czyli o wymiarach 12x24x6 mm. Należy jednak wspomnieć, że przedstawione rozwiązanie ma pewne wady. Największym problemem jest brak współliniowości między wałem silnika i osią koła, który powoduje powstawanie naprężeń. Obciąża to dodatkowo podzespoły układu napędowego, w tym powodując dodatkowe zużycie prądu przez silniki. Aby zminimalizować to zjawisko, wymaga się dużej precyzji w wykonaniu i montażu podzespołów, co jest dość kłopotliwe. Rozwiązaniem problemu byłoby zastosowanie sprzęgła, które wyeliminowałoby wpływ braku współliniowości wału napędzanego i napędowego. Jednak ze względu na ograniczone miejsce wewnątrz robota, a także dodatkową komplikację układu napędowego, zrezygnowano z tego pomysłu.
Układ zasilania
Akumulatory
Wyposażenie robota w napędy posiadające stosunkowo duże zapotrzebowanie na prąd wymusiło zaopatrzenie go w odpowiednio wydajne źródło zasilania. Zdecydowano się umieścić w robocie akumulatory litowo-polimerowe (Li-Poly), które charakteryzują się dużym stosunkiem zgromadzonej energii do wagi i objętości w porównaniu do akumulatorów innych typów oraz posiadają znaczną wydajność prądową.
W robocie wykorzystano dwa akumulatory litowo-polimerowe połączone równolegle. Każdy z nich składa się z trzech ogniw połączonych szeregowo. W robocie dla bezpieczeństwa, a także w celu wydłużenia okresu eksploatacji akumulatorów, przyjęto jako dolną granicę wartość 3,1 V na ogniwo. Dla pakietu ogniw pozwala to uzyskać napięcia w przedziale od 9,3 do 12,6V, które są zależne od stopnia rozładowania ogniw. Ważne w akumulatorach litowo-polimerowych jest niedopuszczenie do nadmiernego rozładowania, lub co gorsze przeładowania. Może to spowodować trwałe uszkodzenie akumulatora, a w niektórych przypadkach nawet samozapłon. Każdy z akumulatorów umieszczonych w robocie posiada pojemność równą 2,2 Ah i wydajność prądową określaną przez producenta jako 30 C, gdzie C określa pojemność. Można więc pobrać z niego prąd o wartości 66A, natomiast dla dwóch akumulatorów wydajność prądowa będzie na poziomie 132 A. Jest to więc wartość znacznie przekraczająca zapotrzebowanie prądowe podzespołów robota.
Moduł zasilania
W celu dostarczenia napięć dla poszczególnych modułów, a także zabezpieczenia akumulatorów zaprojektowano osobny moduł zasilania dla robota. Napięcie zasilania dostarczane z akumulatorów zostało w module rozdzielone na trzy linie. Pierwsza odpowiada za dostarczenie napięcia zasilania do silników i płyną w niej największe prądy. Druga linia dostarcza prąd do przetwornic impulsowych obniżających napięcie, z których następnie zasilana jest większa część układów logicznych. Natomiast trzecia linia wykorzystuje stabilizator liniowy i dostarcza zasilanie pomocnicze o napięciu 5 V do układów kontrolujących stan akumulatora. Moduł zasilania zostanie szczegółowo opisany w niedalekiej przyszłości.
Układ sterowania
Architektura sprzętowa robota
Architektura sprzętowa robota została zaprojektowana w taki sposób, aby pozwolić na realizację zadania lokalizacji, a także innych zadań, które będą w przyszłości rozwijane. Fizyczna realizacja układu sterowania składa się z trzech głównych modułów:
- moduł obsługi sensorów,
- moduł sterowania silnikami,
- jednostka nadrzędna.
Dodatkowo, wykorzystywane są moduły enkoderów i czujników odległości, które są bezpośrednio połączone z odpowiednim modułem głównym.
Idea działania systemu jest taka, że komputer nadrzędny zbiera informacje zarówno o stanie robota, jak i otoczeniu, za pomocą podłączonych do niego modułów. Na tym etapie, czyli przetwarzania danych jednostki nadrzędnej, wykonywane są między innymi algorytmy lokalizacji, a także wszelkie działania decyzyjne. Następnie, w zależności od przyjętych działań, można za pomocą modułu sterowania silnikami realizować przemieszczenie i zmianę orientacji robota. Dodatkowo, robot łączy się ze stacją roboczą, wykorzystując sieć bezprzewodową Wi-Fi. Z poziomu stacji roboczej można zarówno wydawać komendy robotowi, jak i nadzorować jego pracę.
Moduł sterowania silnikami
W celu sterowania napędami robota zaprojektowano i wykonano osobny moduł. Konstrukcja robota oparta na czterech niezależnie sterowanych kołach wymusiła zastosowanie stosunkowo rozbudowanego układu. Spowodowane jest to między innymi wymaganiem synchronizacji prędkości kół robota, szczególnie tych położonych po jednej stronie ramy, aby zminimalizować niepotrzebne poślizgi i straty energii. Dodatkowo, moduł musi obsługiwać cztery enkodery inkrementalne.Szczegółowy opis tego modułu zostanie dodany w przyszłości, w nowym wpisie.
Moduł obsługi sensorów
Aby zapewnić robotowi informacje o jego stanie, o stanie otoczenia, a także o stanie robota względem otoczenia, zaprojektowano i wykonano moduł sensorów. Zadaniem modułu jest pobieranie danych pomiarowych z zainstalowanych czujników, a następnie w odpowiedzi na żądanie ze strony jednostki nadrzędnej, przesyłanie ich. Szczegółowy opis tego modułu zostanie dodany w przyszłości, w nowym wpisie.
Komputer nadrzędny
W roli jednostki nadrzędnej zdecydowano się wykorzystać komputer Raspberry Pi w wersji B. Decyzja została podjęta głównie ze względu na stosunkowo niewielki koszt urządzenia, niewielkie rozmiary, a także dostępność dokumentacji i bibliotek w różnych językach programowania. Podstawowe cechy komputera są następujące:
- jednostka obliczeniowa ARM1176JZF-S, taktowana z częstotliwością 700 MHz,
- 512 MB pamięci RAM,
- wyprowadzona magistrala I2C i SPI,
- 8 dostępnych portów ogólnego przeznaczenia (GPIO),
- UART,
- wyjścia dźwięku (mini jack, HDMI), a także wideo (RCA, HDMI),
- dwa wyjścia USB 2.0,
- wejście na karty pamięci SD.
- wyjście Ethernet (RJ45),
- pobór prądu na poziomie 700mA, przy zasilaniu napięciem równym 5V,
- wymiary 85,6mm na 54 mm i waga około 45g.
Na komputerze Raspberry Pi zainstalowano system operacyjny Raspbian, który jest pochodną Debiana zoptymalizowaną pod kątem platformy RPi. Stosunkowo rozbudowana dokumentacja znacznie ułatwia konfigurację systemu. Podstawowe oprogramowanie robota na komputerze Raspberry Pi napisane zostało w języku C. Utworzono także kilka przydatnych skryptów w powłoce Bash. Między innymi skrypt do załączania zasilania poszczególnych modułów robota, skrypt do ponownego uruchamiania modułów, czy skrypt umożliwiający pomiar parametrów połączenia bezprzewodowego z robotem.
Komunikacja między modułami
W celu umożliwienia komunikacji jednostki nadrzędnej w postaci komputera Raspberry Pi z modułem sensorów i modułem sterownika silników, wykorzystano magistralę I2C. W zaprojektowanym protokole komunikacji komputer Raspberry Pi działa w trybie Master i jest odpowiedzialny za generowanie sygnału zegarowego na linii SCL należącej do magistrali. Dodatkowo urządzenie działające w tym trybie generuje sygnały rozpoczynające i kończące komunikację. Pozostałe moduły podłączone do magistrali działają w trybie Slave.
Komunikacja ze stacją roboczą
Realizacja komunikacji między komputerem Raspberry Pi, a stacją roboczą wymagała dołączenia do komputera bezprzewodowej karty sieciowej. Zdecydowano się na kartę TP-Link WN725N ze względu na dostępność sterowników i kompatybilność z komputerem.
Rolę stacji roboczej pełni komputer osobisty w postaci notebooka z zainstalowanym systemem Windows 7. W celu umożliwienia połączenia, z poziomu stacji roboczej utworzono otwarty punkt dostępu (hot-spot). Do tego zadania użyto narzędzia systemowego o nazwie netsh. Inicjalizacja punktu dostępu wymaga wykonania dwóch kroków. Pierwszym jest ustawienie parametrów tworzonego połączenia. Przykładowa komenda została podana poniżej.
netsh wlan set hostednetwork mode=allow "ssid=robot"
“key=hasło” keyUsage=persistent
Następnie należy uruchomić połączenie.
netsh wlan start hostednetwork
Po tych czynnościach, można połączyć się z komputerem Raspberry Pi, wykorzystując chociażby protokół SSH (Secure Shell). Umożliwia to bezpośrednie uruchamianie programów z poziomu komputera Raspberry Pi znajdującego się wewnątrz robota.