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).
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:
ze źródeł,
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:
Uaktualniamy informację o dostępnych pakietach apt:
$ sudo apt-get update
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:
$ sudo apt-get install ros-groovy-ros-comm
Ostatnim krokiem jest poinformowanie RPi o instalacji ROS. Otwieramy .bashrc i dodajemy na końcu pliku:
#ROS
source /opt/ros/groovy/setup.bash
A po zamknięciu pliku od razu linkujemy zmodyfikowany plik do aktualnej sesji terminala:
source .bashrc
Na końcu należy jeszcze zainicjować narzędzie rosdep pomagające w zarządzaniu zależnościami między pakietami ROS:
sudo rosdep init
rosdep update
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:
Urządzenie Nazwa Adres IP
PC workstation 192.168.1.101
RPi raspberrypi 192.168.1.103
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:
#Wpisujemy komendy w konsoli PC:
ping 192.168.1.103
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ę:
#W raspberry pi
192.168.1.101 workstation
Analogicznie należy również uzupełnić ten sam plik w komputerze PC - w moim przypadku:
#W komputerze PC
192.168.1.103 raspberrypi
Aby od razu móc skorzystać z wprowadzonych nazw należy zrestartować usługi sieci za pomocą:
sudo /etc/init.d/networking restart
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:
$ netcat -l 1234
Nastawiamy nasłuchiwanie portu numer 1234. Teraz łączymy się za pomocą netcat z poziomu RPi z PCtem:
$ netcat workstation 1234
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:
$ netcat -l 1999
Oraz łączymy się z poziomu PC:
$ netcat raspberrypi 1999
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:
$ roscore
Oraz ustawiamy węzeł nasłuchujący należący do paczki rospy_tutorials:
$ rosrun rospy_tutorials listener.py
Teraz odpalamy node na malince:
$ rosrun rospy_tutorials talker.py
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:
$ cd catkin_workspace/src
$ git clone https://dkoguciuk@bitbucket.org/dkoguciuk/forbot_rpi.git
Następnie budujemy naszą paczkę:
$ cd ..
$ catkin_make
Analogicznie ściągamy paczkę na komputer PC i ją budujemy:
$ cd catkin_workspace/src
$ git clone https://dkoguciuk@bitbucket.org/dkoguciuk/forbot_pc.git
$ cd ..
$ catkin_make
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!
Dołącz do 30 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 30 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...