Książki o elektronice i programowaniu w promocji 2 za 1 (tańsza za 0 zł)! Sprawdź listę tytułów »

Raspberry Pi w robotyce amatorskiej – #4 – ROS

Raspberry Pi w robotyce amatorskiej – #4 – ROS

Pierwotny plan nie zakładał powstanie czwartej części artykułu o Raspberry Pi, jednak nie mogłem się oprzeć, by opowiedzieć Wam o jeszcze kilku możliwościach tego komputerka.

Tym razem zajmiemy się konfiguracją RPi do działania w systemie ROS (Robot Operating System).

« Poprzedni artykuł z serii

Cel artykułu

Celem jaki sobie postawiłem w tym artykule było skonfigurowanie malinki do współpracy z PC-tem. Załóżmy, że wykorzystujemy raspberry pi jako sterownik w robocie mobilnym, jednak potrzebujemy wykonać bardziej zaawansowane zadania, takie jak planowanie trasy, czy budowanie mapy otoczenia - zaprzęgamy wtedy do roboty maszynę o większych możliwościach obliczeniowych. Raspberry pi jest wtedy mostem między urządzeniami niskiego poziomu (czujniki, efektory), a wysokopoziomowym sterownikiem akcji (PC).

Spróbujemy zasymulować taką sytuację - na komputerze PC odpalony zostanie master ROS wraz z node'em nasłuchującym wiadomości na konkretnym topicu, a malinka będzie na nim publikować stan swoich wejść binarnych. Mając taką podstawę niewielkim nakładem kosztów można przekształcić tak przygotowaną paczkę na bardziej zaawansowane sytuacje, gdzie raspberry pi obsługuje różne czujniki (na przykład korzystając z wcześniej opisanych magistral spi, czy i2c). Więc, do dzieła!

Instalacja ROS na RPi

Pierwszym co musimy zrobić to postawić system ROS na komputerku PI i jak zwykle mamy do wyboru dwie możliwości instalacji:

  1. ze źródeł,
  2. wykorzystując gotowe pakiety binarne.

Jako, że instalacja ze źródeł na RPi zajęłaby zapewne kilka dni, zdecydowałem się na drugą, wygodną i szybką opcję. Gotowe pakiety binarne zostały przygotowane dla dystrybucji groovy oraz dla hydro, jednak ilość pakietów dla tej pierwszej jest zdecydowanie większa, więc będziemy korzystać z ROS Groovy. Na początku dodajemy repozytorium ROS do źródeł apt w Raspbianie:

Następnie dodajemy klucz do listy zaufanych kluczy:

Uaktualniamy informację o dostępnych pakietach apt:

Teraz już apt powinien widzieć pakiety ROS. Ja zdecydowałem się na instalację z pakietu ros-comm, który już w sobie zawiera wszystkie pakiety rdzenia ROS oraz roscpp, czy rospy:

Ostatnim krokiem jest poinformowanie RPi o instalacji ROS. Otwieramy .bashrc i dodajemy na końcu pliku:

A po zamknięciu pliku od razu linkujemy zmodyfikowany plik do aktualnej sesji terminala:

Na końcu należy jeszcze zainicjować narzędzie rosdep pomagające w zarządzaniu zależnościami między pakietami ROS:

Gratulacje! Teraz już system ROS Groovy powinien hulać na Raspberry Pi!

Sprawdzenie połączenia ssh

Aby ROS działał między dwoma urządzeniami musimy dokładnie sprawdzić jakoś połączenia między nimi. Pamiętacie jak ustawialiśmy statyczne przydzielanie adresu w sieci dla RPi? Właśnie teraz nam się to przyda. Załóżmy, że zarówno RPi jak i PC mamy podłączone do naszej sieci domowej:

Zakładam tutaj również statyczne przydzielanie adresu komputerowi PC. Możemy teraz sprawdzić, czy komputery na pewno są w jednej sieci i czy odpowiadają na "zaczepki" poprzez wspomniany wcześniej program ping:

Nie jest to wybitnie wygodne, ponieważ trzeba pamiętać (lub przypominać sobie za pomocą ifconfig) adres IP urządzenia, dlatego dla wygody pracy można przydzielić nazwę do danego adresu IP poprzez edycję pliku /etc/hosts dopisując na końcu linijkę:

Analogicznie należy również uzupełnić ten sam plik w komputerze PC - w moim przypadku:

Aby od razu móc skorzystać z wprowadzonych nazw należy zrestartować usługi sieci za pomocą:

Teraz można odwoływać się do siebie nawzajem również za pomocą nazwy. Komunikacja w systemie ROS wymaga przepustowości na wszystkich portach, dlatego musimy sprawdzić, czy na pewno nic nie utrudnia tej komunikacji.

Oczywiście nie będziemy sprawdzać wszystkich 65 tysięcy portów, ale zwykle sprawdzenie jednego portu wystarcza. Wybieramy port powyżej numeru 1024, ponieważ te nie wymagają przywilejów superużytkownika. Wykorzystujemy do tego program netcat, wpisujemy w komputerze PC:

Nastawiamy nasłuchiwanie portu numer 1234. Teraz łączymy się za pomocą netcat z poziomu RPi z PCtem:

Teraz powinniśmy mieć możliwość wymiany ciągów znaków w obie strony pomiędzy PC oraz RPi. Dla pewności odwracamy kolejność, tak aby to RPi nasłuchiwało na jakimś porcie:

Oraz łączymy się z poziomu PC:

Tutaj również powinniśmy mieć pełną komunikację w obie strony. W ten sposób mamy pewność, że komunikacja w systemie ROS ma prawo działać.

Komunikacja ROS

Teraz możemy zająć się właściwą komunikacją w systemie ROS. Do tego będziemy potrzebować na RPi paczki rospy_tutorials:

Druga komenda aktualizuje konsolę, by ta widziała nowo zainstalowaną paczkę. Teraz musimy ustawić dwie zmienne środowiskowe ROS w RPi w pliku .bashrc, którego końcówka wraz z wcześniej dodany skryptem ROS wygląda następująco:

Pierwsza z dwóch dodanych linijek nadaje nazwę urządzenia w systemie ROS, druga zaś mówi gdzie odpalony jest master ROS. Analogicznie plik .bashrc będzie wyglądał na PC następująco:

Mamy już wszystko przygotowane do działania, dlatego możemy wystartować rdzeń ROS na PC:

Oraz ustawiamy węzeł nasłuchujący należący do paczki rospy_tutorials:

Teraz odpalamy node na malince:

Jako wynik powinniśmy obserwować zarówno w konsoli RPi oraz PC informację hello world oraz aktualny czas WallTime. Aby mieć pewność, że wszystko działa w porządku możemy również odwrócić kierunek przepływu informacji, tak by to na raspberry pi był węzeł nasłuchujący, a na PC węzeł wysyłający hello world.

Własna paczka ROS

W końcu możemy zająć się tym co tygryski lubią najbardziej - własnym pakietem, który będzie robił co tylko wymarzymy. Jako, że nie będzie to nic odkrywczego i wymaga to minimalnej znajomości systemu ROS to przygotowałem taką paczkę wcześniej. Możecie ściągnąć ją sobie na malinkę za pomocą komendy:

Następnie budujemy naszą paczkę:

Analogicznie ściągamy paczkę na komputer PC i ją budujemy:

Podsumowanie

Na podstawie tak przygotowanego szablonu można stworzyć bardzo zaawansowane systemy niewielkim nakładem pracy.

Raspberry pi wcale nie musi być tylko serwerem do ściągania torrentów, ponieważ wystarczy kilka komend by stał się profesjonalnym sterownikiem do robotów mobilnych. Zachęcam do korzystania z malinki i systemu ROS, a jeszcze bardziej zachęcam do dzielenia/chwalenia się wynikami swojej pracy. Bawcie się dobrze swoimi malinkami!

« Poprzedni artykuł z serii

Artykuł zgłoszony do VII edycji konkursu (po)wakacyjnego!
Nagrody ufundował sponsor główny:

satland

 oraz sponsorzy:

and-techavthelion

ebookpointstrefakursów

operacyjny, programowanie, Raspberry PI, roboty, rpi, rtos, system

Trwa ładowanie komentarzy...