Table of Contents
Connessione con ROS
Gazebo non è più un package di ROS: a partire da Gazebo 1.9 e ROS 7 (hydro), Gazebo non dipende più da ROS
http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros
rosurun e roslaunch
rosrun nome_package nome_nodo
roslaunch è un comando che evita (con un piccolo file di testo.launch) di ripetere molte volte rosrun…
Obiettivo: avviare tramite ROS la simulazione Gazebo di un file world e depositarci dentro un robot
Prerequisito: sapere cosa è un ros_packages ROS e cosa è ROS catkin
- dopo aver inizializzato la shell (potrebbe essere necessario inizializzare le var. di ambiente)
source /opt/ros/indigo/setup.bash
- (eventualmente) dopo aver avviato roscore
source ~/catkin_ws/devel/setup.bash roscore
- si può avviare con roslaunch il pacchetto gazebo_ros (di ros) contenente l'avvio del file world
roslaunch gazebo_ros file.launch
- e poi depositare il robot dentro
rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT
- oppure, meglio ancora, si può avviare direttamente un file.launch che contiene tutto: world e robot
In merito a questo ultimo caso, bisogna ricordare che il pacchetto gazebo_ros contiene uno script python (spawm_model) che si raccomanda di usare quando si deve inserire in simulazione un nuovo robot basato su modello URDF. Ricodando
- dove si deve trovare il file MYROBOT.urdf
- ~/catkin_ws/src/MYROBOT_description/urdf/MYROBOT.urdf
- di aggiungere questo testo in ~/catkin_ws/src/MYROBOT_gazebo/launch/YOUROBOT.launch
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />
Si avvierà sia world che robot
NOTA: se lavorassi solo con Gazebo potrei mettere il file.urdf nella cartella ~/.gazebo ma ciò non è bene se voglio lavorare dentro ROS: lo metto nel package
Editing the World File Within Gazebo
You can insert additional models into your robot's world file and use the File→Save As command to export your edited world back into your ROS package.
http://gazebosim.org/tutorials?tut=ros_overview
The best way to use Gazebo launch files is to simply inherent/include the master “empty world” launch file located in the gazebo_ros package. an example:
- package.xml
(invece di manifest.xml) - CMakeLists.txt
<build_depend>gazebo_ros</build_depend> <run_depend>gazebo_ros</run_depend>
cmake_minimum_required(VERSION 2.8.3) project(YOURROBOT_gazebo_plugins) find_package(catkin REQUIRED COMPONENTS gazebo_ros ) # Depend on system install of Gazebo find_package(gazebo REQUIRED) include_directories(include ${catkin_INCLUDE_DIRS} ${GAZEBO_INCLUDE_DIRS} ${SDFormat_INCLUDE_DIRS}) # Build whatever you need here add_library(...) # TODO catkin_package( DEPENDS gazebo_ros CATKIN_DEPENDS INCLUDE_DIRS LIBRARIES )
rosrun
http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros
dopo aver inizializzato la shell (potrebbe essere necessario inizializzare le var. di ambiente)
source /opt/ros/indigo/setup.bash
(eventualmente) dopo aver avviato roscore
source ~/catkin_ws/devel/setup.bash roscore
si può avviare Gazebo usando il pacchetto gazebo_ros in ros
rosrun gazebo_ros gazebo rosrun gazebo_ros gzserver rosrun gazebo_ros gzclient rosrun gazebo_ros spawn_model rosrun gazebo_ros perf rosrun gazebo_ros debug roslaunch gazebo_ros empty_world.launch
e si può testare
rostopic list
rosservice list