Botland

[Inne] Pierwsze kroki w Player/Stage

Autor Wiadomość
staszek 



Posty: 6
Otrzymał 11 piw(a)
Skąd: Kłodzko/Wrocław
Wysłany: 07-08-2009, 13:16   [Inne] Pierwsze kroki w Player/Stage

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:
    :arrow: robot-player
    :arrow: stage

oraz zezwól Synaptic'owi, aby uzupełnił zależności. Pobierz i zainstaluj pakiety. Wykonaj polecenie w terminalu:
Kod programu: Zaznacz cały

robot-player /usr/share/stage/worlds/simple.cfg

Jeśli występuje następujący problem...
Kod programu: Zaznacz cały

* 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...
Kod programu: Zaznacz cały

sudo mkdir /usr/X11R6/lib
sudo mkdir /usr/X11R6/lib/X11

i wgraj tam plik RGB. Ja korzystam z pliku od Scilab'a...
Kod programu: Zaznacz cały

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:
Kod programu: Zaznacz cały

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...
Kod programu: Zaznacz cały

sudo chmod 755 /usr/X11R6/lib/X11/rgb.txt


5. Pierwsze uruchomienie

Wpisz w terminalu...
Kod programu: Zaznacz cały

robot-player /usr/share/stage/worlds/simple.cfg

…a da to następujący rezultat:
Kod programu: Zaznacz cały

* 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ę:
Kod programu: Zaznacz cały

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:
Kod programu: Zaznacz cały

/usr/share/player/examples/libplayerc++/laserobstacleavoid

Wynik:


Rysunek 2. laserobstaclevoid.


Kolejnym przykładem programu klienckiego jest np. robot-playerv. Wpisz po prostu:
Kod programu: Zaznacz cały

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:
Kod programu: Zaznacz cały

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ść.
Kod programu: Zaznacz cały

# 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:
    :arrow: libplayerc (C)
    :arrow: playerclient (C++)
    :arrow: guileplayer (Scheme)
    :arrow: playerc_py lub pyro (Python)
    :arrow: Player Client For Common Lisp (Common Lisp)
    :arrow: Ruby Player (Ruby)
    :arrow: Javaclient (Java)
    :arrow: 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!

Zobacz inne artykuły o robotyce
Polecany artykuł z FORBOT.PL:
Mikrokontrolery Microchip PIC. Część 2

Czyli co jest potrzebne aby zacząć tresować swojego Picusia. Zgodnie z zapowiedzią zajmiemy się teraz opisem n... Czytaj całość



rgb.txt
plik RGB od Scilab'a, (c) XConsortium
Pobierz Plik ściągnięto 228 raz(y) 16,97 KB

Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 2 piw(a):
Nawyk, wacek_
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: [Inne] Obsługa kart ... [Mechanika] Jak prze... [Test/recenzja] Test... [Mechanika] Jak wyko...
lub przeszukaj forum po wybranych tagach: kroki, pierwsze, playerstage


Powered by phpBB modified by Przemo © 2003 phpBB Group
Polityka prywatności