Note: This tutorial assumes that you have completed the previous tutorials: Installing and Starting Gazebo.

Creating and Spawning Custom URDF Objects in Simulation

Description: Creating and Spawning Custom URDF objects in simulation

Tutorial Level: BEGINNER

Next Tutorial: Manipulating objects in the simulation world using ROS API

Spawning Custom Objects in Simulation

Description: Here we demonstrate how to create a simple box urdf model using the box geometric primitive and spawn it in a simulated empty world.

Start Simulation of an Empty World

Start an empty world simulation

  • rosmake gazebo_worlds
    roslaunch gazebo_worlds empty_world.launch

Create a Simple Box URDF

Create an URDF for an object and save it as object.urdf:

   1 <robot name="simple_box">
   2   <link name="my_box">
   3     <inertial>
   4       <origin xyz="2 0 0" /> 
   5       <mass value="1.0" />
   6       <inertia  ixx="1.0" ixy="0.0"  ixz="0.0"  iyy="100.0"  iyz="0.0"  izz="1.0" />
   7     </inertial>
   8     <visual>
   9       <origin xyz="2 0 0"/>
  10       <geometry>
  11         <box size="1 1 2" />
  12       </geometry>
  13     </visual>
  14     <collision>
  15       <origin xyz="2 0 0"/>
  16       <geometry>
  17         <box size="1 1 2" />
  18       </geometry>
  19     </collision>
  20   </link>
  21   <gazebo reference="my_box">
  22     <material>Gazebo/Blue</material>
  23   </gazebo>
  24 </robot>

Here the origins of the inertial center, visual and collision geometry centers are offset in +x by 2m relative to the model origin. The box geometry primitive is used here for visual and collision geometry, and has sizes 1m wide, 1m deep and 2m tall. Note that visual and collision geometries do not always have to be the same, sometimes you want to use a simpler collision geometry to save collision detection time when running a dynamic simulation. The box inertia is defined as 1kg mass and principal moments of inertia ixx=izz=1 kg*m2 and iyy=100 kg*m2.

Spawn Model in Simulation

To spawn above URDF object at height z = 1 meter and assign the name of the model in simulation to be my_object:

rosrun gazebo spawn_model -file `pwd`/object.urdf -urdf -z 1 -model my_object

simulator_gazebo/Tutorials/simple_box.png
Here spawn_model from gazebo package is a convenience command-line tool for accessing gazebo spawning service gazebo/spawn_model.

Spawn Additional Example Objects in Simulation

Several sample objects are provided in gazebo_worlds/objects. For example, you can spawn a desk by typing

roslaunch gazebo_worlds table.launch

This should create a table in the simulator GUI (you might have to zoom out and mouse around to find it), then terminate.

  • simulator_gazebo/Tutorials/table_cturtle.jpg

Taking a brief look at table.launch:

   1 <launch>
   2   <!-- send table urdf to param server -->
   3   <param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" />
   4 
   5   <!-- push table_description to factory and spawn robot in gazebo -->
   6   <node name="spawn_table" pkg="gazebo" type="spawn_model" args="-urdf -param table_description -z 0.01 -model table_model" respawn="false" output="screen" />
   7 </launch>

The launch file loads table.urdf.xacro urdf XML file onto the ROS parameter server (after first passing it through the xacro preprocessor).

   2   <!-- send table urdf to param server -->
   3   <param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" />

Then calls spawn_model node to spawn the model in simulation.

   5   <!-- push table_description to factory and spawn robot in gazebo -->
   6   <node name="spawn_table" pkg="gazebo" type="spawn_model" args="-urdf -param table_description -z 0.01 -model table_model" respawn="false" output="screen" />

The spawn_table node gets the XML string from the parameter server and passes it on to Gazebo to spawn the object in the simulated world.

  • Similarly, to spawn a coffee cup on the table:

roslaunch gazebo_worlds coffee_cup.launch
  • simulator_gazebo/Tutorials/table_and_cups_cturtle.jpg

Next Tutorial: Manipulating objects in the simulation world


Wiki: simulator_gazebo/Tutorials/SpawningObjectInSimulation (last edited 2012-05-18 15:24:39 by DanePowell)