Skip to main content

Gym-Ignition: A toolkit for developing OpenAI Gym environments simulated with Ignition Gazebo.

Project description



General C++ Standard Size Size
CI/CD Docker Images CI PyPI CD Codacy Badge


Gym-Ignition provides the capability of creating reproducible robotics environments for reinforcement learning research.

The project is composed of the following components:

Component Description
ignition A set of classes to interface gympp with the new Ignition Gazebo simulator, part of the Ignition Robotics suite.
plugins Ignition Gazebo plugins.
gym_ignition Python package for creating OpenAI Gym environments. Environments can be implemented either in C++ using gympp or in Python using the SWIG binded classes of the ignition component.
gym_ignition_data SDF and URDF models and Gazebo worlds.
gympp An experimental C++ port of the OpenAI Gym interfaces, used to create pure C++ environments.


Refer to the Citation for the extended rationale behind this project.


We designed Gym-Ignition driven by the following reasons:

  • Advances in RL research are pushed by the development of more complex environments, and vice versa.
  • There's no standard framework in the robotics community for creating simulated robotic environments.
  • Environments that can be transferred from simulation to reality with minimal changes do not exist.
  • Alternative solutions are not developed by roboticists for roboticist, and therefore they do not use familiar tools.
  • Existing robotics environments are typically difficult to adapt to run on different physics engines and different robots.
  • Only few solutions offer realistic rendering capabilities.


This project interfaces with the new generation of the Gazebo simulator, called Ignition Gazebo. It is part of the new Ignition Robotics suite developed by Open Robotics.

Ignition Robotics is currently under heavy development. Though, it already offers enough functionalities for this project's aims:

  • Simulator-as-a-library
  • New modular architecture
  • C++ utilities developed with a robotic mindset
  • New abstractions of physics engines and rendering engines that exploit runtime plugins
  • Full support of DART and coming support of bullet3
  • Support of distributed simulations
  • Well maintained and packaged
  • Ignition Fuel database to download models and worlds


At the time of writing, Gym-Ignition offers the following features:

  • Environments compatible with OpenAI Gym
  • Worlds and models are SDF descriptions
  • Reproducibility guarantees
  • Accelerated and multiprocess execution
  • Environments are a combination of three elements:
    • Task: the logic of the decision-making problem. It defines how to process the given action, how to calculate the reward, how to structure the observation, and how to reset the environment. Task objects are robot-independent and runtime-independent.
    • Robot: unified interface to access to robot resources. It is used to gather data and send commands to either simulated or real robot in a seamless way.
    • Runtime: implements the actual step of the environment. Simulated runtimes step the simulator, real-time runtimes deal with real-time execution constraints. A Task object can be executed by any runtime without any change.
  • Experimental support to create C++ environments


We provide two different methods to test Gym-Ignition without the need to install it locally:

  1. Colab notebook: and run the example
  2. Docker image:
    docker pull diegoferigo/gym-ignition:latest
    pip3 install rocker
    # Intel GPU
    rocker --device /dev/dri --x11 diegoferigo/gym-ignition ./github/examples/python/
    # Nvidia GPU
    rocker --x11 --nvidia diegoferigo/gym-ignition ./github/examples/python/


The setup instructions expect a Ubuntu distribution with at least Python 3.6. Gym-Ignition is compatible also with other distributions (and, also, other OSs) under the assumption that the Ignition Robotics suite can be installed either from repos or source. Though, to keep the instructions simple, we only list the steps for Ubuntu Bionic 18.04.

We follow the policy of supporting the most recent Ubuntu LTS distribution, excluding the periods close to a new release. Old LTS distribution are no longer officially supported as soon as the the first minor release of the new LTS becomes available.

The process is different whether you're an user that wants to create environments using Gym-Ignition or you are a developer that wants to edit the Python and C++ upstream code.

Execute all the setup commands in the same terminal.

Common Steps

  1. Install the LTS version of Ignition Gazebo (Citadel):

    sudo sh -c 'echo "deb `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
    wget -O - | sudo apt-key add -
    sudo apt update
    sudo apt install ignition-citadel

    Refer to the official documentation for more detailed information.

  2. Create a Python virtual environment as follows:

    sudo apt install virtualenv
    virtualenv -p python3.6 $HOME/venv
    source $HOME/venv/bin/activate

User setup

  1. pip3 install gym-ignition

You can now download and run the example

Developer setup

  1. Update CMake using the official PPA if you have a version older than 3.12

  2. Install gcc 8 with apt install gcc-8 g++-8. Export the following environment variables to enable it temporarily:

    export CC=gcc-8
    export CXX=g++-8
  3. Install SWIG with apt install swig

  4. Optionally install iDynTree with enabled Python bindings

  5. Clone this repository

  6. Build and install the CMake project

    cd gym-ignition
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=<installprefix> ..
    cmake --build .
    cmake --build . --target install

    Where <installprefix> is the destination of the CMake project. It can either be a system or user folder. The default is /usr/local.

  7. Install the Python package in editable mode:

    cd ..
    pip3 install -e .
  8. Export the following environment variable:

    # C++ bindings
    export PYTHONPATH=<installprefix>/lib/python3.6/site-packages

After these steps, you can run the cartpole example executing:

python3 /path/to/gym-ignition-repo/examples/python/

Unstable builds

Gym-Ignition still doesn't have a steady release cycle strategy. This project targets mainly research, and its development is very active. In order to quickly deliver new features, we do our best to have a fast release cycle.

If you find interesting PRs that are not yet included in the most recent release, you can get the latest unstable version as follows:

  1. User installation: pip3 install gym-ignition-nightly

  2. Developer installation: check-out the devel branch after cloning the repository in step 4 and follow the remaining steps


    title={Gym-Ignition: Reproducible Robotic Simulations for Reinforcement Learning},
    author={Diego Ferigo and Silvio Traversaro and Daniele Pucci},

Disclaimer: Gym-Ignition is an independent project and is not related by any means to OpenAI and Open Robotics.

Project details

Release history Release notifications

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for gym-ignition-nightly, version 1.0b1.post1.dev178
Filename, size File type Python version Upload date Hashes
Filename, size gym_ignition_nightly-1.0b1.post1.dev178-cp36-cp36m-manylinux1_x86_64.whl (1.2 MB) File type Wheel Python version cp36 Upload date Hashes View
Filename, size gym-ignition-nightly-1.0b1.post1.dev178.tar.gz (151.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page