Skip to content
This repository was archived by the owner on Oct 19, 2026. It is now read-only.

About

Rust binaries for assembling, validating, and driving simulation scenes of multi-robot industrial cells in Isaac Sim

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

robotic-cellsim-tools

A set of standalone Rust binaries for assembling, validating, and driving simulation scenes of multi-robot industrial cells in Isaac Sim. Inputs are off-the-shelf URDFs; outputs are Isaac Sim 5.1+ USDA stages with PhysX articulations, ROS 2 topics, and per-link contact telemetry.

What's a URDF? The Unified Robot Description Format — the standard XML file that describes a robot's links, joints, geometry, and meshes. It's the common interchange format across ROS, RViz, MoveIt, and Isaac Sim, so almost every robot vendor ships one. These tools take URDFs in and produce simulation-ready scenes out.

Each tool is a small, deterministic building block: same inputs → byte-stable outputs, no hidden state, single-responsibility CLIs that also speak a versioned REST API. They're designed to be composed by higher-level automation — agentic skills, MCP servers, or planning services — that need reliable, scriptable primitives to dress robots, compose cells, and drive simulations rather than opaque, one-shot black boxes.

%%{init: {'theme':'base','themeVariables':{
  'background':'#0a0e14','primaryColor':'#11151c','primaryTextColor':'#e6faff',
  'primaryBorderColor':'#00e5ff','lineColor':'#00e5ff','fontFamily':'monospace',
  'clusterBkg':'#0a0e14','clusterBorder':'#1f6feb'}}}%%
flowchart TD
    ROBOT[/"robot-arm URDFs"/]:::data
    TOOL[/"tool URDFs"/]:::data
    DRESS(["<b>urdf-robo-dresser</b>"]):::tool
    DRESSED[/"dressed URDFs"/]:::data
    MAN[/"scene manifest YAML"/]:::data
    FIT(["<b>robo-fitting-room</b>"]):::tool
    ZIP[/"composed .zip · USDA stage"/]:::data
    ISAAC{{"Isaac Sim 5.1+"}}:::sim
    ROS[["ROS 2 / DDS topics · joint_command / joint_states / contacts"]]:::sim
    CSV[/"captured joint timeline · CSV"/]:::data
    R3(["<b>robo-ros-runner</b>"]):::tool
    PLAN["motion-planning / agentic service<br/><i>validate AI generated trajectories · collision-free checks</i>"]:::ext

    ROBOT --> DRESS
    TOOL --> DRESS
    DRESS --> DRESSED --> FIT
    MAN --> FIT --> ZIP --> ISAAC
    ISAAC <==> ROS
    CSV --> R3 ==> ROS
    PLAN <==> ROS

    classDef tool fill:#11151c,stroke:#00e5ff,stroke-width:3px,color:#7CFFCB,font-weight:bold,font-size:15px;
    classDef data fill:#0d1117,stroke:#ff2bd6,stroke-width:1px,color:#ffb3f0;
    classDef sim  fill:#11151c,stroke:#b6ff00,stroke-width:2px,color:#eaffb0;
    classDef ext  fill:#11151c,stroke:#ffae00,stroke-width:2px,color:#ffd479,stroke-dasharray:5 3;
Loading

Every binary ships two modes: a one-shot CLI and a long-running REST server — with an embedded browser UI in two of them: a 3D URDF viewer in urdf-robo-dresser and a 2D scene editor in robo-fitting-room. Default cargo build produces both — pick the mode at invocation time. robo-ros-runner replays a captured joint-angle timeline onto the cell's ROS 2 joint_command topics, driving the robots in a running sim.


Prerequisites

  • Rust 1.75+ — install via rustup.rs.
  • Robot & tool URDFs — you bring your own. The toolchain is asset-agnostic: point it at any catalogue of .urdf files (with their referenced meshes) laid out in the expected directory shape. The assets/ tree here is vendor-specific and does not ship with the repo.
  • Isaac Sim 5.1+ — only for loading and driving the composed scene at runtime. Building, dressing, and composing need nothing but Rust.
  • CSV joint captures (for robo-ros-runner only) — a timeline of recorded joint angles per axis over time (e.g. exported from a real robot's PROFINET capture), which R3 replays onto the cell. Bring your own; none ship with the repo.
  • No native deps. No USD, PhysX, or Python toolchains — the whole workspace builds in ~3 minutes on a stock laptop.

Build first

Build the binaries before running anything — each tool's commands invoke the compiled binary under its crate's target/release/. See each tool's README (linked below) for full usage.

Keep all downloaded crates and build caches inside the repo by pointing CARGO_HOME at the repo root (handy for sandboxed/offline checkouts and easy cleanup — the repo's .gitignore already excludes .cargo/ and target/):

# git clone <this repo>
# cd robotic-cellsim-tools
export CARGO_HOME="$PWD/.cargo"    # vendor crates + caches under the repo
cargo build --release --manifest-path urdf-robo-dresser/Cargo.toml
cargo build --release --manifest-path robo-fitting-room/Cargo.toml
cargo build --release --manifest-path robo-ros-runner/Cargo.toml
cargo build --release --manifest-path robo-zenoh-bridge/Cargo.toml

The tools at a glance

Each tool stands alone — reach for the one that matches your task, or chain them for the full URDF → Isaac → ROS 2 pipeline. Every tool has a deep-dive README linked below.

urdf-robo-dresser — merge a robot arm with an end-effector tool

Takes a bare robot URDF and a tool URDF, auto-detects the flange, computes the correct mounting orientation, generates convex-hull collision geometry, and writes a single self-contained dressed URDF. One-shot dress, catalogue-wide batch, plus validate / list and a serve mode that hosts a REST API and a built-in browser 3D URDF viewer — pick a robot + tool, dress them, and preview the result in WebGL (orbit/zoom/pan, collision-hull toggle, joint articulation).

urdf-robo-dresser dress --robot robot.urdf --tool gripper_tool.urdf --output dressed.urdf
urdf-robo-dresser serve --catalogue ./assets   # then open http://localhost:3030/
Robot input Dressed result

→ urdf-robo-dresser/README.md

robo-fitting-room — compose a multi-robot cell into an Isaac stage

Reads a YAML manifest + dressed URDFs + a 2D floor plan and emits a self-contained .zip with an inlined USDA stage — PhysX articulations, ROS 2 ActionGraphs, and per-link contact sensors, ready to load in Isaac Sim 5.1+. Drive it from the CLI (compose / validate) or from the embedded 2D drag-and-drop scene editor in serve mode.

robo-fitting-room serve --asset-root ./assets   # then open http://localhost:3040/
2D scene-layout editor Composed cell in Isaac Sim
robo-fitting-room — 2D scene-layout editor composed cell loaded in Isaac Sim

→ robo-fitting-room/README.md

robo-ros-runner — replay a captured timeline onto the live sim

Replays a captured joint-angle timeline (CSV — e.g. a KUKA PROFINET capture) onto the cell's ROS 2 joint_command topics, driving the robots in a running Isaac Sim. Applies a configurable per-axis deg→rad mapping so raw vendor captures don't slam into URDF joint limits. dry-run previews the publishes; run speaks DDS for real, or Zenoh (--sink zenoh) to reach Isaac across hosts.

robo-ros-runner dry-run --cell demo-cell.yaml --csv joint_angles_timeline.csv --once

→ robo-ros-runner/README.md

robo-zenoh-bridge — drive Isaac across hosts (Zenoh → DDS)

R3's DDS transport finds Isaac via multicast, which works on a shared LAN but not across an AWS VPC (two EC2 instances). This bridge runs on the Isaac host, subscribes to R3's joint commands over Zenoh (TCP unicast to an explicit IP), and republishes them onto Isaac's local DDS. Zero-arg cargo run — it prints the exact --zenoh-connect line to paste into R3.

# on the Isaac host
robo-zenoh-bridge                                # listens tcp/0.0.0.0:7447 → DDS domain 0
# then on the R3 host, per the printed banner:
robo-ros-runner run --cell demo-cell.yaml --csv cap.csv \
    --sink zenoh --zenoh-connect tcp/<isaac-ip>:7447

→ robo-zenoh-bridge/README.md


Repo layout

robotic-cellsim-tools/
├── README.md                       ← this file
├── IDEA.md                         ← original design notes
├── urdf-robo-dresser/              ← Rust crate: URDF merger
├── robo-fitting-room/              ← Rust crate: scene composer
│   ├── REQUIREMENTS.md             ← FR/NFR tracker (single source of progress)
│   └── web/                        ← embedded 2D editor SPA
├── robo-ros-runner/                ← Rust crate: CSV → ROS 2 joint_command replay (R3)
│   ├── REQUIREMENTS.md             ← FR/NFR tracker (single source of progress)
│   └── r3-run.example.yaml         ← sample run config
├── robo-zenoh-bridge/              ← Rust crate: Zenoh → DDS bridge (run on the Isaac host)
└── assets/
    ├── urdf-robot-collection/      ← bare robot URDFs (vendor-specific)
    ├── urdf-tool-collection/       ← bare tool URDFs (vendor-specific)
    ├── urdf-fixture-collection/    ← static cell fixtures (vendor-specific)
    ├── urdf-dressed-robots/        ← outputs of `dress` / `batch`
    ├── floor-plans/                ← 2D CAD exports (DXF→OBJ)
    ├── fitted-robots/              ← scene manifest YAMLs (e.g. demo-cell.yaml)
    └── data-captures/              ← joint-angle timeline CSVs + ros-topics.txt

assets/ contents are vendor-specific and won't ship with the open-source release. The toolchain is asset-agnostic — point it at any catalogue with the same directory shape.


Documentation

Each crate's docs/ is the in-depth reference:

About

Rust binaries for assembling, validating, and driving simulation scenes of multi-robot industrial cells in Isaac Sim

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages