Thursday, May 7, 2015

Robot simulace

GAZEBO - 3D simulace
http://gazebosim.org/

Stage - 2D simulace

http://playerstage.sourceforge.net/index.php?src=stage

Player - klient pro GAZEBO nebo STAGE

http://playerstage.sourceforge.net/index.php?src=player

Coppelia Robotics v-rep

http://www.coppeliarobotics.com/downloads.html

Robocode

http://robocode.sourceforge.net/



Instalace:
Vyzkouseno na Ubuntu 14.04 TLS ve virtualni image VMWare Player.

Instalace Gazebo 5.0.1 - bez problemu podle navodu z distribuce

Instalace Stage 4.1.1 - bez problemu, build projektu

Instalace Player 3.0.2 -
make hlasi chybu /usr/bin/ld: cannot find -lgeos


reseni: opraveno pridanim linku v /usr/lib:
cd /usr/lib
sudo ln -s libgeos_c.so.1.8.2 libgeos.so.1
sudo ln -s libgeos_c.so.1.8.2 libgeos.so


dale make hlasi:
playerclient.cc:171:34: error: expected unqualified-id before numeric constant

reseni: sleduj odkaz http://sourceforge.net/p/playerstage/mailman/message/32992365/
To work around this problem until the next Player release comes out, you
can just substitute "boost::TIME_UTC_" for "boost::TIME_UTC" in
client_libs/libplayerc++/playerclient.cc
 
 

dale make hlasi:
readlog.cc:714:62: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘gzFile’ for argument ‘1’ to ‘char* gzgets(gzFile, char*, int)’
reseni: sleduj odkaz http://sourceforge.net/p/playerstage/mailman/message/28994223/
v server/drivers/shell/readlog.cc
change the line
>
> ret = gzseek(this->file,0,SEEK_SET);
>
> to
>
> ret = gzseek((gzFile)this->file,0,SEEK_SET);
 
a take 
 
ret = (gzgets(this->file, this->line, this->line_size) == NULL); 

to

 
ret = (gzgets((gzFile)this->file, this->line, this->line_size) == NULL); 

dale make hlasi:
/usr/bin/ld: CMakeFiles/camera.dir/camera.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'

reseni: sleduj http://player-stage-gazebo.10965.n7.nabble.com/TIME-UTC-is-not-a-member-of-boost-td11642.html
For each error : undefined reference to symbol '_ZN5boost6system15system_categoryEv'
add the flag -lboost_system after -lboost_signals in the file player-3.0.2/build/examples/libplayerc++/
CMakeFiles/*.dir/link.txt
For example : player-3.0.2/build/examples/libplayerc++/CMakeFiles/camera.dir/list.txt will be :
/usr/bin/c++ -Wall CMakeFiles/camera.dir/camera.o -o camera -rdynamic -L/usr/local/lib ../../client_libs/libplayerc++/libplayerc++.so.3.0.2 ../../client_libs/libplayerc/libplayerc.so.3.0.2 ../../libplayerinterface/libplayerinterface.so.3.0.2 ../../libplayercommon/libplayercommon.so.3.0.2 -lm -lz -lgeos -lgeos_c -lboost_thread -lboost_signals -lboost_system -lm ../../libplayerjpeg/libplayerjpeg.so.3.0.2 -ljpeg ../../libplayerwkb/libplayerwkb.so.3.0.2 ../../libplayercommon/libplayercommon.so.3.0.2 -lgeos -lgeos_c -Wl,-rpath,/usr/local/lib:/home/doizuc/Downloads/player-3.0.2/build/client_libs/libplayerc++:/home/doizuc/Downloads/player-3.0.2/build/client_libs/libplayerc:/home/doizuc/Downloads/player-3.0.2/build/libplayerinterface:/home/doizuc/Downloads/player-3.0.2/build/libplayercommon:/home/doizuc/Downloads/player-3.0.2/build/libplayerjpeg:/home/doizuc/Downloads/player-3.0.2/build/libplayerwkb 


Opravu provest v
examples/libplayerc++/CMakeFiles/camera.dir/link.txt
examples/libplayerc++/CMakeFiles/clientgraphics.dir/link.txt
examples/libplayerc++/CMakeFiles/clientgraphics3d.dir/link.txt
examples/libplayerc++/CMakeFiles/example0.dir/link.txt 
examples/libplayerc++/CMakeFiles/example1.dir/link.txt
examples/libplayerc++/CMakeFiles/example2.dir/link.txt
examples/libplayerc++/CMakeFiles/example3.dir/link.txt  
examples/libplayerc++/CMakeFiles/example4.dir/link.txt  examples/libplayerc++/CMakeFiles/goto.dir/link.txt
examples/libplayerc++/CMakeFiles/grip.dir/link.txt 
examples/libplayerc++/CMakeFiles/laserobstacleavoid.dir/link.txt 
examples/libplayerc++/CMakeFiles/ptz.dir/link.txt
examples/libplayerc++/CMakeFiles/randomwalk.dir/link.txt
examples/libplayerc++/CMakeFiles/sonarobstacleavoid.dir/link.txt
examples/libplayerc++/CMakeFiles/speech.dir/link.txt
examples/libplayerc++/CMakeFiles/speech_cpp_client.dir/link.txt
examples/libplayerc++/CMakeFiles/wallfollow.dir/link.txt
utils/playerjoy/CMakeFiles/playerjoy.dir/link.txt
utils/playerprint/CMakeFiles/playerprint.dir/link.txt
utils/playerprop/CMakeFiles/playerprop.dir/link.txt

priklad hromadneho prikazu na replace textu v souborech

cd ~/player-3.0.2/build

sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/camera.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/clientgraphics.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/clientgraphics3d.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example0.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example1.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example2.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example3.dir/link.txt 
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example4.dir/link.txt 
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/goto.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/grip.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/laserobstacleavoid.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/ptz.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/randomwalk.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/sonarobstacleavoid.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/speech.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/speech_cpp_client.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/wallfollow.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerjoy/CMakeFiles/playerjoy.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerprint/CMakeFiles/playerprint.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerprop/CMakeFiles/playerprop.dir/link.txt



dale

make install bylo potreba volat s admin pravy: sudo make install



Otestovani funkcnosti Player/Stage
 
player ~/stg/share/stage/worlds/simple.cfg
 
Objevila se chyba:
error   : Sorry, no support for shared libraries, so can't load plugins.
error   : You should install libltdl, which is part of GNU libtool, then re-compile player.
 
reseni: nastavit export LD_LIBRARY_PATH=/usr/local/lib64:/home/tomas/stg/lib64 

Dale se objevila chyba:

error   : Failed to load plugin stageplugin.
error   : libtool reports error: file not found
error   : plugin search path: /home/tomas/player-3.0.2/build:/home/tomas/stg/share/stage/worlds:/usr/local/lib/
error   : failed to load plugin: stageplugin

reseni: doplneni cesty k plugin adresari do LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tomas/stg/lib64
Objevilo se okno Stage se zakladnim prostredim a jednim robotem.


Uff. Tim je prostredi a robot pripraveny na klientske pripojeni a rizeni. Dalo to trochu prace, ale nakonec se zdarilo. Simon bude mit radost...



 


Rizeni robota v playerv

Spustit prikaz
playerv -h marvin --position2d --laser
 
Bohuzel s parametrem --laser playerv okamzite ukonci cinnost, pri pouziti  
playerv -h marvin --position2d klient funguje. Zarizeni position2d i obe zarizeni ranger funguji.
 
 




Rizeni robota pouzitim playerc a jazyka Python

Priklad v Python zde:
http://playerstage.sourceforge.net/doc/Player-svn/player/group__libplayerc__py__example.html

Neco o nastaveni:
https://packages.debian.org/unstable/python-playerc

Instalace python-playerc:
sudo dpkg -i ~/python-support_1.0.14ubuntu2_all.deb
sudo dpkg -i ~/python-playerc_3.0.2+dfsg-3ubuntu2_amd64.deb

sudo chmod 755 /usr/local/lib/python2.7/site-packages/_playerc.so

export LD_LIBRARY_PATH=/usr/local/lib64:/home/tomas/stg/lib64:/usr/lib/pyshared/python2.7
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:/usr/lib/pyshared/python2.7:/usr/share/pyshared


Python editor:

Eric6 - http://eric-ide.python-projects.org/eric-download.html

Velmi jednoduchy priklad pro pohyb:

# Jizda dopredu

import time
import math
from playerc import *

# Pripojeni k robot simulatoru
c = playerc_client(None, 'localhost', 6665)
c.connect()

# Prihlaseni se k zarizeni pohybu robota
p = playerc_position2d(c,0)
if p.subscribe(PLAYERC_OPEN_MODE) != 0:
  raise playerc_error_str()

# Rozjeti robota rychlosti 1
p.set_cmd_vel(1.0,0.0,0.0,1)

# Cekani 10 x 1 sekunda
for i in range(0,10):
 time.sleep(1)
 print i

# Zastaveni pohybu robota
p.set_cmd_vel(0.0, 0.0, 0.0, 1)

# Odhlaeni se od zarizeni pohybu
p.unsubscribe()

# Odpojeni od simulatoru
c.disconnect()



Instalace python player pro 32bit potřebuje tyto knihovny:
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i gcc-5-base_5.1.1-6_i386.deb
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i libgeos-3.4.2_3.4.2-7_i386.deb
sudo dpkg -i libgeos-c1_3.4.2-7_i386.deb
sudo dpkg -i libjpeg62-turbo_1.4.0-7_i386.deb
sudo dpkg -i libplayercommon3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerinterface3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerjpeg3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerwkb3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerc3.0_3.0.2+dfsg-4.2+b1_i386.deb