Spawn multiple object in and track them in rviz

asked 2019-11-12 06:44:30 -0500

Markus gravatar image

Hey there,

I would like to spawn multiple objects in gazebo and track them in rviz. This means if the position of one object changes also the position in rviz should change.

Currently I think this just works if I create for each part:

  • robot_state_publisher to visualize the stl of the part ( <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/> )
  • ground_truth plugin from gazebo to track the position (
  • passing the tf ( <node name="odom_to_part_1" pkg="message_to_tf" type="message_to_tf"> )

This seems to me rather expensive. Is there a less expensive method you know?

I tried it like this:

main.launch [Code Snippet]:

<group ns="$(arg part_name_1)">

<!-- load the model and start robot state publisher -->
<include file="$(find part_description)/launch/load_part2.launch">
   <arg name="part_name" value="$(arg part_name_1)" />
   <arg name="x" value="0.2"/>

<!-- spawns the model of one part to gazebo -->
<node name="spawn_urdf_part1" pkg="gazebo_ros" type="spawn_model" args="-urdf -model $(arg part_name_1) -param robot_description
-x 0.0 -y 0.0 -z 0.0
-R 0.0 -P 0.0 -Y 0.0" />

<!-- I could do this again at a different position, but then I cannot track it - I need a second odom as well or? 
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model $(arg part_name_2) -param robot_description
-x 0.1 -y 0.0 -z 0.0
-R 0.0 -P 0.0 -Y 0.0" />  -->


<node name="odom_to_part_1" pkg="message_to_tf" type="message_to_tf"> </node>


  <!-- Load the sensor:-->
  <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find part_description)/urdf/part.xacro'
  part_name:=$(arg part_name)
  x:=$(arg x)" />

  <!-- required that the part is not in the origin of rviz -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>


<?xml version="1.0" encoding="UTF-8"?>
<robot xmlns:xacro="" name="$(arg part_name)">

    <xacro:include filename="$(find part_description)/urdf/part.urdf.xacro" />

    <xacro:part_macro prefix="1" x="$(arg x)" y="0.1" z="0.5" r="0.0" p="0.0" yy="0.0"/>



<?xml version="1.0" encoding="UTF-8"?>
<robot xmlns:controller="" 
       name="$(arg part_name)">

   <xacro:include filename="$(find part_description)/urdf/part.gazebo.xacro" />
   <xacro:include filename="$(find part_description)/urdf/common_properties.xacro"/>

   <xacro:property name="mass_washer"   value="0.08" />
   <xacro:property name="radius_washer" value="0.2" />

   <link name="part_footprint" />

   <xacro:macro name="part_macro" params="prefix x y z r p yy">
      <link name="part_link_${prefix}">
       <visual name="_part">
     <origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0" />
            <mesh filename="package://part_description/meshes/washer.stl" scale="0.001 0.001 0 ...
edit retag flag offensive close merge delete



I believe this is what andreasBihlmaier/gazebo2rviz was created for.

gvdhoorn gravatar image gvdhoorn  ( 2019-11-12 06:55:01 -0500 )edit

You seem to have removed your comment.

I haven't used this package myself, but I knew it existed and it seems like it was made for exactly what you are asking.

gvdhoorn gravatar image gvdhoorn  ( 2019-11-12 10:14:28 -0500 )edit