staszek Napisano Sierpień 7, 2009 Udostępnij Napisano Sierpień 7, 2009 Pierwsze kroki w Player/Stage Streszczenie Artykuł omawia instalację i działanie popularnego systemu wielorobotowego Player i spokrewnionego z nim symulatora Stage. 1. Wstęp Po opublikowaniu na stronach Diody raportu dotyczącego robota wykorzystującego serwer Player poproszono mnie dokładniejsze wyjaśnienie w jaki sposób działa to narzędzie. Ponieważ oprogramowanie to jest wciąż w początkowej fazie rozwoju, jego instalacja i użytkowanie może przysporzyć licznych kłopotów i wręcz odstraszać. Wierzę jednak iż po przeczytaniu artykułu Czytelnik dostrzeże ogromne możliwość, które stwarza korzystanie z pakietu. 2. Player Player jest serwerem sprzętu robotycznego. Po co w robocie serwer? Odpowiedź jest prosta: do komunikacji czujników i elementów wykonawczych w prosty i jednolity sposób, z oprogramowaniem. Zauważ, że wśród czujników, z których korzystają Twoje roboty, można dokonać podziału według informacji, którą dostarczają. Tak np. enkodery, optyczny czujnik przemieszczenia (z myszki), akcelerometry, GPS, to urządzenia, które służą do określenia pozycji robota. Podobnie dalmierz IR, oraz sonar ultradźwiękowy służą do określenia odległości od przeszkody. Twórcy Player'a zauważyli, że po dokonaniu takiego podziału można oddzielić warstwę obsługi sprzętowej od warstwy zadaniowej. Np. jeśli chcesz aby twój robot zatrzymał się w odległości 0,1 m od przeszkody, to pisząc program skorzystasz ze standardowego interfejsu IR, nie martwiąc się o to jaki w robocie zastosowano dalmierz. Interfejs IR zwróci odległość od przeszkody, a nie napięcie na przetworniku czy czas trwania impulsu... Takie rozwiązanie pozwala na pisanie przenośnych programów. Jeśli ktoś napisał program do robota tworzącego mapy otoczenia wykorzystującego (reuquires) interfejs IR oraz interfejs position2d, możesz z powodzeniem wykorzystać go w swoim robocie, jeśli tylko udostępnisz te interfejsy. Nie musisz zastosować dokładnie tych samych czujników. Wystarczy, że będziesz przestrzegał standardów Player'a. Aby dokonać komunikacji pomiędzy Player'em a czujnikiem (lub urządzeniem), musisz skorzystać z driver'a. Jest to biblioteka, która odpowiada za obsługę sprzętową, np. odczyta z przetwornika napięcie i obliczy odpowiadającą mu odległość. Każdy driver udostępnia (provides) określone interfejsy. Player udostępnia je w postaci gniazdek TCP, z których korzystają Twoje programy klienckie (np. program do tworzenia mapy otoczenia). Ogromną zaletą Player'a jest duża liczba darmowych driver'ów. Ich kompletną listę znajdziesz tutaj: http://playerstage.sourceforge.net/doc/Player-2.1.0/player/group__drivers.html . Zauważ, że wśród driverów są nie tylko takie, które realizują komunikację z urządzeniem, ale i takie które pozwalają na wykorzystanie gotowych algorytmów sterowania (np. VFH), albo komunikację z zewnętrznymi programami (np. program do rozpoznawania mowy). 3. Stage i Gazebo Teraz wyobraź sobie, że masz robota i driver który udostępnia określone interfejsy. Zauważ, że Player komunikuje się urządzeniami za pomocą driver'a. Taki driver można więc zastąpić symulatorem rzeczywistości. Przykładem takiego symulatora jest Stage. Istnieje jeszcze jeden symulator do Playera, Gazebo, który pozwala na symulację trójwymiarowego świata, w odróżnieniu od Stage'a, który działa w dwóch wymiarach. Stage pozwala na symulację wielu robotów. Masz możliwość edycji map otoczenia i wyboru czujników, które Cię interesują. 4. Instalacja Poniżej zamieszczam sposób instalacji Player'a i Stage'a na Xubuntu 9.04. Metoda instalacji pod Windows znajduje się tutaj: http://sourceforge.net/mailarchive/message.php?msg_name=497E8426.6070202%40killbots.net . Uruchom Menedżer Pakietów Synaptic i odnajdź następujące pakiety: ➡️ robot-player ➡️ stage oraz zezwól Synaptic'owi, aby uzupełnił zależności. Pobierz i zainstaluj pakiety. Wykonaj polecenie w terminalu: robot-player /usr/share/stage/worlds/simple.cfg Jeśli występuje następujący problem... * Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.net]. * Copyright (C) 2000 - 2006 Brian Gerkey, Richard Vaughan, Andrew Howard, * Nate Koenig, and contributors. Released under the GNU General Public License. * Player comes with ABSOLUTELY NO WARRANTY. This is free software, and you * are welcome to redistribute it under certain conditions; see COPYING * for details. trying to load /usr/share/stage/worlds/libstageplugin... trying to load /usr/lib/libstageplugin... success invoking player_driver_init()... Stage driver plugin init ** Stage plugin v2.0.3 ** * Part of the Player/Stage Project [http://playerstage.sourceforge.net] * Copyright 2000-2006 Richard Vaughan, Andrew Howard, Brian Gerkey * and contributors. Released under the GNU General Public License v2. success Stage driver creating 1 device 6665.31.0 is a Stage world [Loading /usr/share/stage/worlds/simple.world][Include pioneer.inc][Include map.inc][Include sick.inc] err: unable to open color database /usr/X11R6/lib/X11/rgb.txt : No such file or directory (stage.c stg_lookup_color) Segmentation fault … utwórz następujące katalogi... sudo mkdir /usr/X11R6/lib sudo mkdir /usr/X11R6/lib/X11 i wgraj tam plik RGB. Ja korzystam z pliku od Scilab'a... sudo cp /usr/share/scilab/modules/tclsci/demos/tk/rgb.txt /usr/X11R6/lib/X11/rgb.txt ...ale jeśli nie korzystasz z Scilaba'a możesz spróbować użyć innego pliku. Znajdziesz je wpisując po prostu: find / -name rgb.txt Jeśli Player nie uruchamia okna symulacji, spróbuj użyć innego pliku RGB. Ostatecznie możesz utworzyć pusty, plik, ale będziesz miał wtedy problemy z kolorami. Pamiętaj jeszcze o uprawnieniach... sudo chmod 755 /usr/X11R6/lib/X11/rgb.txt 5. Pierwsze uruchomienie Wpisz w terminalu... robot-player /usr/share/stage/worlds/simple.cfg …a da to następujący rezultat: * Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.net]. * Copyright (C) 2000 - 2006 Brian Gerkey, Richard Vaughan, Andrew Howard, * Nate Koenig, and contributors. Released under the GNU General Public License. * Player comes with ABSOLUTELY NO WARRANTY. This is free software, and you * are welcome to redistribute it under certain conditions; see COPYING * for details. trying to load /usr/share/stage/worlds/libstageplugin... trying to load /usr/lib/libstageplugin... success invoking player_driver_init()... Stage driver plugin init ** Stage plugin v2.0.3 ** * Part of the Player/Stage Project [http://playerstage.sourceforge.net] * Copyright 2000-2006 Richard Vaughan, Andrew Howard, Brian Gerkey * and contributors. Released under the GNU General Public License v2. success Stage driver creating 1 device 6665.31.0 is a Stage world [Loading /usr/share/stage/worlds/simple.world][Include pioneer.inc][Include map.inc][Include sick.inc] Stage driver creating 1 device 6665.42.0 is "cave" Stage driver creating 2 devices 6665.4.0 is "robot1" 6665.6.0 is "robot1.laser:0" Listening on ports: 6665 Zauważ, co spowodowało wykonanie tego polecenia. Wpierw wystartował serwer Playera. Następnie rozpoczyna się inicjalizacja plugin'u Stage. Powinno również pokazać się okno, widoczne na poniższym screen'ie. Jest to twój symulowany świat; pamiętaj, że zamiast niego możesz korzystać z prawdziwego robota. Rysunek 1. Stage. Zwróć jeszcze uwagę, na ostatnią linię: Listening on ports: 6665 Oznacza ona, że serwer oczekuje na podłączenie się programów klienckich; port 6665 (localhost). Wypróbuj załączony do pakietu program laserobstacleavoid. Spowoduje on przypadkowe poruszanie się robota po mapie, bez uderzania w przeszkody. Wpisz: /usr/share/player/examples/libplayerc++/laserobstacleavoid Wynik: Rysunek 2. laserobstaclevoid. Kolejnym przykładem programu klienckiego jest np. robot-playerv. Wpisz po prostu: robot-playerv Ten program pozwoli Ci np. na „ręczne” sterowanie robotem, korzystanie z algorytmu VFH czy odczyt prędkości. Rysunek 3. robot-playerv. 6. Pliki konfiguracyjne Zwróć uwagę w jaki sposób uruchamiałeś serwer: robot-player /usr/share/stage/worlds/simple.cfg /usr/share/stage/worlds/simple.cfg jest tzw. plikiem konfiguracyjnym serwera. Poniższy listing przedstawia jego zawartość. # Desc: Player sample configuration file for controlling Stage devices # Author: Richard Vaughan # Date: 1 December 2004 # CVS: $Id: simple.cfg,v 1.30.2.1 2006/07/13 17:59:10 gerkey Exp $ # load the Stage plugin simulation driver driver ( name "stage" provides ["simulation:0" ] plugin "libstageplugin" # load the named file into the simulator worldfile "simple.world" ) driver ( name "stage" provides ["map:0"] model "cave" ) # Create a Stage driver and attach position2d and laser interfaces # to the model "robot1" driver ( name "stage" provides ["position2d:0" "laser:0" ] model "robot1" ) # Demonstrates use of a Player "abstract driver": one that doesn't # interface directly with hardware, but only with other Player devices. # The VFH driver attempts to drive to commanded positions without # bumping into obstacles. driver ( name "vfh" provides ["position2d:1"] requires ["position2d:0" "laser:0" ] ) Jak widzisz plik ten definiuje, jakie driver'y ma załadować serwer. Ponadto każdy driver jest konfigurowany. Określasz jakie protokoły ma udostępniać (provides) i/lub jakie protokoły ma wykorzystać (requires). Liczba po dwukropku oznacza liczbę porządkową; dzięki temu możesz używać wielu czujników w różnych celach i używać wielu robotów. Więcej na temat pisania plików konfiguracyjnych znajdziesz na stronie http://playerstage.sourceforge.net/doc/Player-2.1.0/player/group__tutorial__config.html . 7. Własne programy klienckie Pisanie własnych programów klienckich jest bez wątpienia najciekawszym zadaniem. Dzięki symulacjom możesz szybko i łatwo prototypować własne algorytmy i sterowniki. Wybór języka jest dość szeroki, dzięki darmowym bibliotekom: ➡️ libplayerc © ➡️ playerclient (C++) ➡️ guileplayer (Scheme) ➡️ playerc_py lub pyro (Python) ➡️ Player Client For Common Lisp (Common Lisp) ➡️ Ruby Player (Ruby) ➡️ Javaclient (Java) ➡️ octplayer (Octave) przy czym z biblioteki libplayerc możesz korzystać pisząc programy w C++. Obiła mi się o uszy możliwość pisania programów klienckich w języku ADA (!), czyli tym, z którego powszechnie korzysta się w statkach kosmicznych. Jak korzystać z bibliotek i pisać własne programy kliencki dowiesz się z poniższych linków. ➡️C http://playerstage.sourceforge.net/doc/Player-1.6.5/player-html/group__player__clientlib__libplayerc.php ➡️C++ http://psurobotics.org/wiki/index.php?title=Player/Stage_Overview http://playerstage.sourceforge.net/doc/Player-1.6.5/player-html/group__player__clientlib__cplusplus.php ➡️Java http://java-player.sourceforge.net/docs/howto.pdf ➡️Python http://playerstage.sourceforge.net/doc/Player-1.6.5/player-html/group__player__clientlib__libplayerc__py.php 8. Własny driver Jeśli chcesz wykorzystać serwer Player'a na własnym robocie, musisz napisać driver. Nie jest to trudne, zwłaszcza, że w sieci znaleźć można wiele przykładowych driver'ów. Na temat struktury driver'ów i ich pisania znajdziesz informacje pod poniższymi adresami. ➡️http://psurobotics.org/wiki/index.php?title=Player/Stage_Drivers ➡️http://psurobotics.org/wiki/index.php?title=Writing_a_Player_Plugin ➡️http://image.diku.dk/mediawiki/images/e/e2/Driverhowtodoc_HandedIn.pdf Przykładowe driver'y znajdziesz tutaj: ➡️http://svn.psurobotics.org/view/bin/cgi/viewvc.cgi/ ➡️http://segomo.elka.pw.edu.pl/websvn/listing.php?repname=Player+repository&path=%2Fprotonekdriver%2Fdriver-2.1.1%2F&rev=65 ➡️http://playerstage.sourceforge.net/doc/Player-2.1.0/player/classKhepera.html ➡️https://www.forbot.pl/forum/topics20/driver-do-player-stage-na-mini-komputerze-vt2192.htm?sid=1854aa68909f2062b53c8a7b627e4436 powodzenia! rgb.txt 2 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »