SimGAN
Pytorch Implementation of SimGAN: Hybrid Simulator Identification for Domain Adaptation via Adversarial Reinforcement L…
URDF-Studio is a web-based visual URDF robot modeler with 3D workspace, structured skeleton/detail/hardware workflows,…
Professional URDF design and visualization workstation. Supports rapid editing, collision optimization, modular assembly, parameter configuration, AI generation, and multi-format export.
Live demo: urdf.enkeebot.com
URDF Studio is a browser-based robot authoring environment built for editing robot topology, visual/collision geometry, hardware parameters, and multi-file workspaces without dropping down to raw XML for every operation.
The current app combines:
Package identity:
urdf-studio@2.0.0 (private workspace app)@urdf-studio/react-robot-canvas@0.1.0Versioning policy:
npm run version:bump instead of editing manifests by hand.usp project archivesURDF, MJCF, USD, SDF, Xacro, CSV/BOM, PDF, ZIP, and .usp project archives@urdf-studio/react-robot-canvas package for external consumerssrc/corepackages/react-robot-canvassrc/
app/ App orchestration layer: shell, viewer composition, import/export, workspace sync
features/ Domain features
├── ai-assistant/ AI generation and inspection
├── assembly/ Bridge joint creation and multi-robot assembly
├── code-editor/ Source code editor with Monaco
├── editor/ Unified Editor public entry
├── file-io/ File I/O capabilities: format detection, project archive, exports
├── hardware-config/ Motor and hardware parameter configuration
├── property-editor/ Property editing, geometry editing, collision optimization
├── robot-tree/ File tree and structure tree
└── urdf-viewer/ Editor implementation: topology/geometry/collision + USD runtime
store/ Zustand stores (robot, ui, selection, assets, assembly, etc.)
shared/ Shared components, 3D infrastructure, hooks, i18n, debug helpers
core/ Pure logic: parsers, robot core, mesh loaders, image/STL compressors, diagnostics
lib/ Reusable RobotCanvas wrapper for external consumption
styles/ Global styles and semantic tokens
types/ Cross-module type definitions
packages/react-robot-canvas/
Publishable package workspace
docs/
Architecture notes, viewer docs, file-io docs, style guide, AI features
scripts/
build/, generate/, test/ (browser/e2e/fixtures/truth/benchmark), tools/, release/
public/
Static assets, Monaco editor, USD WASM bindings, sample robots
test/
Large fixture corpora, browser regression samples, external mirrored projects
tmp/
Screenshots, traces, temporary validation artifacts
output/
User-facing exports and retained verification artifacts
Architecture notes:
app -> features -> store -> shared -> core -> types (no reverse dependencies)src/core maintains pure function logic without React/UI/Feature dependenciessrc/features/urdf-viewer is the heaviest feature area, combining React UI, vendored USD runtime, adapter/util layers, and worker-backed offscreen renderingsrc/app handles document loading, viewer handoff, import/export coordination, pending history, and binary/archive worker bridgesgit clone https://github.com/OpenLegged/URDF-Studio.git cd URDF-Studio npm install
The app can run without AI credentials. If you want AI generation / inspection enabled, set the environment variables that vite.config.ts injects into the frontend runtime:
# OpenAI configuration for AI assistant OPENAI_API_KEY=your_api_key OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_MODEL=gpt-4.1-mini # GEMINI_API_KEY is accepted as a fallback key when OPENAI_API_KEY is unset GEMINI_API_KEY=
You can place them in .env.local.
The AI assistant provides:
Without API keys, the AI features will be disabled but the rest of the application remains fully functional.
npm run dev
Open:
http://127.0.0.1:3000The Vite dev server listens on 127.0.0.1 by default for local IPv4 loopback access and serves the cross-origin isolation headers required by the USD WASM runtime.
For remote-dev port forwarding, containers, or LAN access, run URDF_STUDIO_DEV_HOST=0.0.0.0 npm run dev.
If a preview/tunnel hostname is rejected by Vite's host check, set a comma-separated allow-list with URDF_STUDIO_DEV_ALLOWED_HOSTS=preview.example.test,.tunnel.example.test npm run dev.
USD loading depends on SharedArrayBuffer, so the page must be cross-origin isolated.
npm run dev for developmentnpm run preview to validate the production build locally127.0.0.1 / localhost or HTTPShttp://<LAN-IP>:3000 access can load the app shell, but USD import / stage open requires HTTPS or a trusted localhost-style forwarded origindist/ with a plain static server that omits these headers:Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Resource-Policy: same-site
If those headers are missing, the app shell may load but USD import / stage open will fail.
# Development npm run dev # Start development server npm run dev:with-generate # Start dev server with AI prompt generation npm run build # Build the app npm run preview # Preview production build # Quality & Verification npm run lint # Run ESLint, stylelint, and Google style baseline checks npm run google-style:audit # Report Google JS/TS + HTML/CSS style debt npm run google-style:check # Fail if Google style debt exceeds the baseline npm run typecheck # Full TypeScript debt check, including tests npm run typecheck:quality # TypeScript check excluding test/spec files npm run check # Run verify:fast (format, lint, runtime typecheck, test, build) npm run verify:fast # Fast verification (no fixture tests) npm run verify:full # Full verification including fixture tests npm test # Run unit tests npm run test:unit -- path/to/file.test.ts # Run targeted Node tests npm run test:unit:all # Run all source-adjacent Node tests npm run test:unit:list # List test runner suites # Formatting npm run format # Format code with Prettier npm run format:check # Check formatting # Versioning npm run version:show # Show current versions npm run version:bump # Bump versions (use --app or --package flag) # AI Features npm run generate # Generate AI prompt templates and inspection criteria npm run generate:check # Check if generation is needed npm run build:with-generate # Build with generation step # Package Workspace npm run build:package:react-robot-canvas # Build the react-robot-canvas package npm run pack:package:react-robot-canvas # Pack the package for preview # Schema & Comparison npm run code-editor:generate-urdf-schema # Generate URDF schema for code editor npm run mjcf:compare # Compare MJCF parsing against reference npm run sdf:compare # Compare SDF parsing against reference # Regression & Fixture Tests npm run regression:shadow-hand-hover # Run shadow hand hover regression npm run test:fixtures:imports # Validate import fixture matrix npm run test:fixtures:unitree-ros-urdfs # Validate Unitree ROS URDFs npm run test:fixtures:unitree-usd # Validate Unitree USD exports npm run test:fixtures:unitree-ros-usda # Validate Unitree USDA exports npm run test:fixtures:isaacsim-truth # Validate against IsaacSim truth
This repository exposes root quality commands for formatting, linting, and local validation:
npm run formatnpm run format:checknpm run lintnpm run google-style:auditnpm run typecheck:qualitynpm run checknpm run typecheck remains available as the full-repo TypeScript debt check. npm run check uses npm run typecheck:quality, which currently excludes test/spec files so runtime compilation can stay green while test fixtures are still being updated.
npm run google-style:audit is a non-blocking Google JavaScript/TypeScript and HTML/CSS style debt report. npm run google-style:check compares the same audit against scripts/tools/google_style_baseline.json so new debt fails while historical naming and CSS ordering debt can be paid down incrementally.
Git hooks and hosted CI configuration are intentionally not required; run the quality commands manually before sharing changes.
npm test stays limited to repo-contained tests that do not require the external fixture corpora under test/.
Node test entrypoints are centralized in scripts/test/runner/run-node-tests.mjs. Unit tests should stay next to the source they cover under src/**/*.test.* or src/**/*.spec.*; use npm run test:unit -- path/to/file.test.ts for targeted validation and npm run test:unit:all when source-adjacent coverage matters more than fast feedback.
Validation is typically done through:
npm run test:unit -- path/to/file.test.ts runs next to the changed modulescripts/test/npm test for the fast repo-contained lane used by npm run verify:fastnpm run buildsrc/lib or packages/react-robot-canvastest/ via npm run test:fixtures:* / npm run verify:full, especially test/unitree_model, test/gazebo_models, test/awesome_robot_descriptions_repos, and test/usd-viewerThe repository contains the publishable package workspace:
@urdf-studio/react-robot-canvas (packages/react-robot-canvas)This package provides a reusable RobotCanvas component for external React apps that need URDF/MJCF viewing capabilities without the full URDF Studio shell. It includes stable, general-purpose 3D robot visualization features extracted from the main application.
Build and package commands:
npm run build:package:react-robot-canvas # Build the package npm run pack:package:react-robot-canvas # Pack for preview
app -> features -> store -> shared -> core -> typescore/ as pure function logic without React / UI / Feature dependenciesResizeObserver, timers, worker listeners, or THREE resourcesnpm run verify:fast before sharing changes; run npm run verify:full for comprehensive validationtmp/This project is licensed under the Apache License 2.0. See LICENSE.
Supported by D-Robotics.
more like this
Pytorch Implementation of SimGAN: Hybrid Simulator Identification for Domain Adaptation via Adversarial Reinforcement L…
search projects, people, and tags