Skip to main content

ROS2 Environment Manager

Project description

ros2em - ROS2 Environment Manager

PyPI version License Platform

ros2em is a CLI tool to create and manage isolated ROS2 environments.

Whether you're a robotics developer, student, or researcher, ros2em makes it easy to:

  • 🧠 Spin up clean, persistent ROS 2 environments
  • 🐳 Use Docker based containers
  • 🖥 Access GUIs like Rviz or Gazebo via browser
  • ✅ Support both amd64 and arm64 architectures

🚀 Features

  • ⚡ One-line ROS 2 environment creation and access
  • 🖥 Web-based GUI using tiryoh/ros2-desktop-vnc
  • 🖥 GUI access using browser
  • 🔐 No system pollution – nothing touches your host machine
  • 💡 Powered by Typer (CLI) and Rich (colored output)

🔧 Prerequisites

Before using ros2em, make sure you have Docker installed on your system:

🪟 Windows

  1. Install Docker Desktop from https://www.docker.com/products/docker-desktop
  2. Ensure WSL 2 is installed and configured (Docker Desktop will guide you).
  3. After install, verify Docker is working docker version.

🍎 macOS

  1. Install Docker Desktop from https://www.docker.com/products/docker-desktop
  2. After installation, open Docker Desktop once to initialize.
  3. After install, verify Docker is working docker version.

🐧 Linux (Ubuntu/Debian)

sudo apt update
sudo apt install -y docker.io docker-compose
sudo usermod -aG docker $USER
newgrp docker

Then test it docker version.


📦 Installation

Recommended (via pipx)

pipx install ros2em

Or using pip

pip install ros2em

🛠 Commands

🐣 Create a new environment

ros2em init myenv --distro humble

Creates a .ros2em/myenv/ folder with a default docker-compose.yml, metadata, and port configuration.

⚙️ Options

You can customize it with advanced options.

Option Type Default Description
--ports list[str] None Extra port mappings in host:container format (e.g., 9000:9000)
--context str "default" Docker context to use (useful for remote or wsl contexts)

Example:

ros2em init turtlebot4 humble --ports 11311:11311 --context wsl

🚀 Start or resume the container

ros2em up myenv

Starts the container if it exists, or creates it if not.

🧹 Stop the container

ros2em stop myenv

Stops the running container but retains it, including all manually installed packages.

❌ Delete an environment

ros2em delete myenv

Stops and removes the container. As well deletes .ros2em/myenv/ folder and all metadata.

🖥 Accessing the Desktop GUI

ros2em open myenv

Click on the link that looks something like this in the output: http://localhost:6080.


🧩 Contributing

We welcome contributions, ideas, and feedback.

  • Open issues for bugs and enhancements
  • Fork and submit a pull request
  • Share your use case via Discussions

📄 License

Apache 2.0 — © 2025 Kodo Robotics

Project details


Download files

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

Source Distribution

ros2em-0.2.0.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ros2em-0.2.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file ros2em-0.2.0.tar.gz.

File metadata

  • Download URL: ros2em-0.2.0.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for ros2em-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b29a59ed023cfdfd5bf59d5a44dea087e1522bb407ae2b9b9037f49af00ec1d1
MD5 8bde5e163f6e4192b8577c255306a20e
BLAKE2b-256 3ad724ae037c45417682b7976677b173c3018a8d8c0d9c1931768afc71242632

See more details on using hashes here.

File details

Details for the file ros2em-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ros2em-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for ros2em-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 faf46ad3efaa38e505b6295c56ffaff6a213236e141da1eb14c642d3be770545
MD5 8ace7681475020d584d1f86d828ce373
BLAKE2b-256 939a579c2ed499d0821124523b8d7afb2dc5cfe87bfeb7be9f45aa24dc9ba793

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page