[Documentation] [TitleIndex] [WordIndex


multi_jackal_tutorials provides examples on how to simulate multiple Clearpath Jackals in Gazebo.




This package (and all dependencies) can be installed the standard way through rosdep:

rosdep install multi_jackal_tutorials

If Gazebo is not yet installed, this may take some time. Alternatively, you can install it by:

sudo apt-get install ros-kinetic-multi-jackal-tutorials

Simulating a Jackal

roslaunch multi_jackal_tutorials one_jackal.launch rviz:=true

This launch file does three things. Firstly, it starts up Gazebo:

   1 <!-- Start Gazebo with an empty world. -->
   2 <include file="$(find gazebo_ros)/launch/empty_world.launch">
   3   <arg name="use_sim_time" value="true"/>
   4   <arg name="gui"          value="$(arg gui)"/>
   5   <arg name="world_name"   value="$(find multi_jackal_tutorials)/worlds/$(arg world)"/>
   6 </include>

Gazebo will be generating the ROS clock, so it can simulate faster or slower than real time (this is set in the world description). If gui is set to true, the Gazebo client will also appear. This can also be done after launching by running gzclient in a new terminal.

Secondly, the launch file spawns a robot into Gazebo:

   1 <!-- Spawn the robot. -->
   2 <include file="$(find multi_jackal_base)/launch/jackal_base.launch">
   3   <arg name="ns"            value="$(arg ns)"/>
   4   <arg name="config"        value="$(arg config)"/>
   5   <arg name="config_id"     value="$(arg config_id)"/>
   6   <arg name="use_move_base" value="true"/>
   7 </include>

The namespace ns must be unique (like jackal0, jackal1, etc), so that individual robots can be identified. The configuration type config specifies the components on the jackal. This string must match a file located in multi_jackal_description/urdf/configs. The configuration ID config_id is used if required by the configuration. Movement to goal locations is provided through move_base. The model description (multi_jackal_description), navigation (multi_jackal_nav), and controllers (multi_jackal_control), are all called through the Jackal base (multi_jackal_base).

Thirdly, the launch file starts up RVIZ:

   1 <!-- View in RVIZ. -->
   2 <node name="rviz" pkg="rviz" type="rviz" ns="$(arg ns)" args="-d $(find multi_jackal_tutorials)/rviz/one_jackal.rviz" >
   3     <remap from="/move_base_simple/goal" to="/$(arg ns)/move_base_simple/goal"/>
   4 </node>

This displays the robot model, sensor output, and controllers to move the robot:


Robot topics have been prefixed with the selected namespace (jackal0):

rostopic list

Frames have also been prefixed by the namespace (right click -> view image to zoom in):

rosrun rqt_tf_tree rqt_tf_tree

Simulating Multiple Jackals

roslaunch multi_jackal_tutorials two_jackal.launch rviz:=true

The only difference for multiple Jackals is that the robots need to be created with different namespaces and positions.

   1 <!-- Spawn the robots. -->
   2 <include file="$(find multi_jackal_base)/launch/jackal_base.launch">
   3   <arg name="ns"            value="$(arg ns0)"/>
   4   <arg name="config"        value="$(arg config0)"/>
   5   <arg name="config_id"     value="$(arg config0_id)"/>
   6   <arg name="use_move_base" value="true"/>
   7 </include>
   8 <include file="$(find multi_jackal_base)/launch/jackal_base.launch">
   9   <arg name="ns"            value="$(arg ns1)"/>
  10   <arg name="config"        value="$(arg config1)"/>
  11   <arg name="config_id"     value="$(arg config1_id)"/>
  12   <arg name="use_move_base" value="true"/>
  13   <arg name="x"             value="2"/>
  14 </include>



A number of arguments can be specified when creating a Jackal. These are listed in (multi_jackal_base).

2024-07-06 13:16