Skocz do zawartości

[Inne] Pierwsze kroki w Player/Stage


staszek

Pomocna odpowiedź

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.

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.

Przykładowe driver'y znajdziesz tutaj:

powodzenia!

rgb.txt

  • Lubię! 2
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.