Gazebo Random Objects is a plugin for Gazebo that will randomly place objects in mesh files on a 2D plane.
Download and unpack or clone this repositories contents into your ros2
workspace; ex ~/ros2_ws/src/gz_random_objects.
The plugin is built using the standard ROS 2 build process. Building is done
using colcon which will invoke cmake and run the necessary commands. Run the
following command in your ros2 workspace; ex ~/ros2_ws/.
colcon build --symlink-install --packages-select gz_random_objectsMake sure to run the following command after install and login. Run the
following command in your ros2 workspace; ex ~/ros2_ws/.
source install/setup.bashYou may want to have your development user environment do this on login via
~/.bashrc file; add the following to the end of that file.
source ~/ros2_ws/install/setup.bashIn order to use the plugin, it needs to be added to a SDF world, or model to be included in some SDF world, or part of a URDF. This plugin can be included and used more than once to support different types of objects. The number of objects can exceed the number of mesh files, but does require one mesh at minimum. Of course, you can always have more files than objects, of which, a random subset will be used based on the quantity of objects and files.
<plugin filename="libgz_random_objects.so" name="gz::sim::systems::GzRandomObjects">
<!-- Parent ID in SDF -->
<parent>4</parent>
<!-- Name prefix, -->
<prefix>rock</prefix>
<!--Number of Objects, same number as mesh files at this time -->
<objects>14</objects>
<!-- x/y min and max, difference becomes range, along with scale -->
<x_min>-750</x_min>
<x_max>750</x_max>
<x_scale>0.5</x_scale>
<y_min>-2250</y_min>
<y_max>2250</y_max>
<y_scale>0.5</y_scale>
<!-- z scale only at this time -->
<z_scale>0.5</z_scale>
<!-- Mesh files to use, can use https:// or file:// -->
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock1.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock2.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock3.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock4.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock5.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock6.dae</mesh>
<mesh>file://$(find gz_random_objects)/meshes/rocks/rock7.dae</mesh>
</plugin>