ros_gz_sim
Tools for using Gazebo Sim simulation with ROS.
README
ROS + Gazebo Sim
This package contains things that make it convenient to integrate ROS with Gazebo, such as:
Launch files
ROS-enabled executables
Run Gazebo Sim
There’s a convenient launch file, try for example:
ros2 launch ros_gz_sim gz_sim.launch.py gz_args:="shapes.sdf"
Spawn entities
The create executable can be used to spawn SDF or URDF entities from:
A file on disk or from Gazebo Fuel
A ROS parameter
For example, start Gazebo Sim:
ros2 launch ros_gz_sim gz_sim.launch.py
then spawn a model:
ros2 run ros_gz_sim create -world default -file 'https://fuel.gazebosim.org/1.0/openrobotics/models/Gazebo'
See more options with:
ros2 run ros_gz_sim create --helpshort
Using <gazebo_ros> to export model paths in package.xml
The <gazebo_ros> tag inside the <export> tag of a package.xml file can be
used to add paths to GZ_SIM_RESOURCE_PATH and GZ_SIM_SYSTEM_PLUGIN_PATH,
which are environment variables used to configure Gazebo search paths for
resources (e.g. SDFormat files, meshes, etc) and plugins respectively.
The values in the attributes gazebo_model_path and gazebo_media_path are
appended to GZ_SIM_RESOURCE_PATH. The value of plugin_path is appended to
GZ_SIM_SYSTEM_PLUGIN_PATH. See the
Finding resources tutorial to
learn more about these environment variables.
The keyword ${prefix} can be used when setting these values and it will be
expanded to the package’s share path (i.e., the value of
ros2 pkg prefix --share <package name>)
<export>
<gazebo_ros gazebo_model_path="${prefix}/models"/>
<gazebo_ros gazebo_media_path="${prefix}/media"/>
<gazebo_ros plugin_path="${prefix}/plugins"/>
</export>
Thus the required directory needs to be installed from CMakeLists.txt
install(DIRECTORY models
DESTINATION share/${PROJECT_NAME})
In order to reference the models in a ROS package unambiguously, it is
recommended to set the value of gazebo_model_path to be the parent
of the prefix.
<export>
<gazebo_ros gazebo_model_path="${prefix}/../"/>
</export>
Consider an example where we have a ROS package called my_awesome_pkg
and it contains an SDFormat model cool cool_robot:
my_awesome_pkg
├── models
│ └── cool_robot
│ ├── model.config
│ └── model.sdf
└── package.xml
With gazebo_model_path="${prefix}/../ set up, we can
reference the cool_robot model in a world file using the package name
in the uri:
<sdf version="1.6">
<world name="default">
<include>
<uri>package://my_awesome_pkg/models/cool_robot</uri>
</include>
</world>
</sdf>
However, if we set gazebo_model_path=${prefix}/models, we would
need to reference cool_robot as package://cool_robot, which
might have a name conflict with other models in the system.