EMDB is a ROS 2 workspace that wraps RoboCasa / robosuite kitchen-manipulation simulation behind a ROS 2 topic/service interface, so that teleoperation, demo recording, and RL training/inference can all talk to the simulator without depending on robosuite/robocasa/MuJoCo directly.
Full documentation (architecture, how-to guides, interface/API reference)
lives under docs/ and is built with Sphinx — see
Building this documentation below, or read it
already rendered on GitHub Pages once docs.yml
has deployed it.
This is the Trabajo Fin de Máster (Master's Thesis) of Fabian Alvarez
Juarez, for the Máster en Informática Industrial y Robótica at the
Universidade da Coruña (UDC), carried out within the Grupo Integrado de
Ingeniería (GII). See
docs/source/about.md for the full project title
(in English, Castellano, and Galego) and acknowledgments, including the
computing resources provided by CESGA.
TFM/
├── misc/ # git submodules + helper scripts
│ ├── robosuite/ # SantaCRC/robosuite fork
│ ├── robocasa/ # SantaCRC/robocasa fork
│ ├── robosuite_models/ # SantaCRC/robosuite_models fork
│ ├── robomimic/ # robomimic (demo/imitation-learning formats)
│ ├── mimicgen/ # mimicgen (data generation)
│ └── scripts/
├── ros_packages/
│ └── src/
│ ├── emdb_interfaces/ # custom msg/srv definitions (ament_cmake)
│ ├── emdb_simulator/ # simulator node, scene/robot/gripper loaders (ament_python)
│ └── emdb_policy/ # RL/policy node, gym wrapper, training (ament_python)
├── docker/ # Dockerfiles (CPU/GPU) for CESGA/Singularity use
├── hpc/cesga/ # SLURM job scripts for running on CESGA
├── docs/ # Sphinx documentation
├── setup.sh # one-time (idempotent) workspace setup
└── env.sh # source this in every new terminal
emdb_interfaces holds only message/service definitions and has no Python
code of its own; emdb_simulator and emdb_policy are plain ament_python
packages that import it.
- Ubuntu with ROS 2 installed under
/opt/ros/<distro>(setup.shauto-detects whichever distro is present, e.g. Humble). - Python 3 with the
venvmodule available. rosdep(used bysetup.shto resolve ROS package dependencies).
Clone the repository with submodules (RoboCasa/robosuite/robosuite_models
are git submodules — see .gitmodules):
git clone --recurse-submodules <repo-url> TFM
# or, if already cloned:
git submodule update --init --recursiveThen run the setup script from the repo root:
./setup.sh # full setup
./setup.sh --docs # also install docs/ build dependenciessetup.sh is safe to re-run — every step checks whether it's already done
before acting. It:
- locates the installed ROS 2 distro under
/opt/rosand sources itssetup.bash, - initializes any empty git submodules under
misc/, - creates a Python virtualenv at
.venv/(--system-site-packages, socolcon/rosidl's system-installed toolchain is visible) and installsrobosuite,robocasa, and (optionally)robosuite_modelsinto it in editable mode, pluscolcon-common-extensions, - resolves ROS package dependencies via
rosdep install, - builds the
ros_packagesworkspace withcolcon build --symlink-install.
Override the venv location with VENV_DIR=/path/to/venv ./setup.sh if you
don't want it at <repo>/.venv.
For every new terminal that runs ROS 2 nodes from this workspace, source
env.sh instead of sourcing ROS/the venv manually — ordering matters (venv
vs. ROS setup.bash), and a couple of environment variables are required:
source env.shenv.sh:
- sources ROS 2's
setup.bash, then the.venvvirtualenv (in that order, so the venv's Python doesn't shadow ROS 2's tools), - sets
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp(unless already set), - sets
MUJOCO_GL=eglso MuJoCo renders headlessly via EGL instead of GLX (unset it beforehand if your machine renders fine without it), - sources
ros_packages/install/setup.bashif the workspace has been built, - enables colcon autocompletion if available,
- defines convenience aliases:
colcon_dev(build with the venv's Python),colcon_clean_build(wipebuild/ install/ log/and rebuild), andemdb_env(prints whichros2/pythonare active — useful for confirming you're not accidentally running the system Python).
Use VENV_DIR=/path/to/venv source env.sh if you set up the venv at a
non-default location.
setup.sh already builds it once; to rebuild after changing code:
source env.sh
cd ros_packages
colcon_dev # alias for: python -m colcon build --symlink-install
source install/setup.bashsource env.sh
ros2 launch emdb_simulator emdb_simulator.launch.pySee docs/source/howto/run_simulator.md
for parameters, launch files, and topics, and the rest of
docs/source/howto/ for teleoperation, demo
recording, RL training, and demo replay guides.
To run experiments on CESGA's FinisTerraeIII HPC cluster via
Docker/Singularity/SLURM instead, see
docs/source/howto/running_on_cesga.md.
The docs are Sphinx + MyST (Markdown), with autodoc for the Python API reference.
./setup.sh --docs # or: pip install -r docs/requirements.txt (inside the venv)
source env.sh
cd docs
make htmlThen open docs/build/html/index.html in a browser. See
docs/source/getting_started.md for more
detail, including autodoc's mocking of ROS-only imports.