GAP is a set of tools written in C++ for Gazebo which provide an interface to interact programatically with the simulator. We built GAP to support our research in Domain Randomization. Unlike most similar software, these tools do not strictly depend on ROS. They include:
-
[NEW] Domain Randomization plugin, a multi-purpose plugin to change physical properties of models, as well as visual appearence.
-
Camera Utils plugin, to control camera objects, namely moving the camera and saving rendered frames at specific instants.
-
Visual Utils plugin, to control the visual appearance of an object during simulation, including changing the Visual object's pose, material and scale.
-
World Utils plugin, that allows you to spawn models either by a uri reference or directly with an sdf string.
This project was originally conceived so we could develop a scene generator in Gazebo, employing domain randomisation in an attempt to bridge the reality gap between real life images and synthetically generated frames.
Check out tf-object-detection
, in which we trained a state--of--the--art deep CNN using this synthetic dataset.
Check out the examples and see what you can achieve with these plugins.
Take a look at the automatic documentation for file and class description.
The code has been tested in Gazebo 9.0.0 from the official stable repository as well as built from source 9.4.1 and running on Ubuntu 16.04.5 and 18.04.
Gazebo internal message passing relies on Protobuf, which is why the compiler needs to be installed in order to generate the tools' custom messages. Eigen 3 is required for scene_example.
sudo apt install protobuf-compiler # Required
sudo apt install libeigen3-dev # Required for scene_example
For custom texture generation, we have developed a pattern generation tool, which can randomly generate a high number of 4 different types of textures and produces materials in a format Gazebo can recognise.
Clone the repository to your workspace directory and build from source.
cd ~/workspace/gap/ &&
mkdir build && cd build && cmake ../ && make -j8
Alternatively you can build each plugin/tool individually in a similar fashion.
Make sure you properly initialise the required environment variables. We provide a simple script for this:
cd ~/workspace/gap &&
source setup.sh
These tools were developed to further our research regarding domain randomisation. We include a published conference paper and its reference for citation purposes.
@inproceedings{borrego2018,
author = {J. Borrego and R. Figueiredo and A. Dehban and P. Moreno and A. Bernardino and J. Santos-Victor},
booktitle = {2018 IEEE International Conference on Autonomous Robot Systems and Competitions (ICARSC)},
title = {A generic visual perception domain randomisation framework for Gazebo},
year = {2018},
pages = {237-242},
keywords = {Machine learning;Neural networks;Object detection;Proposals;Robots;Task analysis;Training},
doi = {10.1109/ICARSC.2018.8374189},
month = {April}
}
This project is not directly affiliated with Gazebo.