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;
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.
- 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
.urdffiles (with their referenced meshes) laid out in the expected directory shape. Theassets/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-runneronly) — 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 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.tomlEach 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.
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 |
|---|---|
![]() |
![]() |
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 |
|---|---|
![]() |
![]() |
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.
robo-ros-runner dry-run --cell demo-cell.yaml --csv joint_angles_timeline.csv --oncerobotic-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
└── 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.
Each crate's docs/ is the in-depth reference:
- robo-fitting-room —
README ·
CLI reference ·
REST API ·
Concepts ·
Manifest schema ·
USDA layout ·
openapi.json· Requirements tracker - urdf-robo-dresser —
README ·
CLI reference ·
REST API ·
Concepts ·
openapi.json· Requirements tracker - robo-ros-runner —
README ·
CLI reference ·
REST API ·
Concepts ·
openapi.json· Requirements tracker



