PluginBench
Skill
Pass
Audit score 90

urdf

earthtojake/text-to-cad

Author, validate, and inspect URDF robot descriptions with frame semantics and inertial correctness.

What is urdf?

URDF skill provides authoring, validation, and visualization tools for robot kinematic models. Use it when creating or editing `.urdf` files, validating joint/link/geometry definitions, checking frame conventions, or rendering robot snapshots for review.

  • Validate URDF XML structure, joint semantics, geometry references, and inertial physics with `cadgen urdf validate`
  • Author and edit URDF files directly with frame-semantics guidance and design-ledger templates
  • Render robot snapshots to PNG with configurable joint poses and display modes using `cadgen urdf snapshot`
  • Resolve mesh URIs and check geometry loading across visual, collision, and inertial definitions
  • Compute inertial tensors and spatial transforms from CAD data rather than freehand values

How to install urdf

npx skills add https://github.com/earthtojake/text-to-cad --skill urdf
Prerequisites
  • Python environment with `pip install -r requirements.txt` from the skill directory
  • Chromium browser installed via `python -m playwright install chromium` for snapshot rendering
  • Mesh assets (STEP, STL, or DAE) pre-exported in their link frames by CAD workflow
Claude Code
Cursor
Windsurf
Cline

How to use urdf

  1. 1.Identify the target `.urdf` file and its consumers (RViz, Gazebo, MoveIt, real robot driver)
  2. 2.Create or read the design ledger as a comment block in the `.urdf` to document frames, joints, units, and assumptions
  3. 3.Prepare mesh assets first, exported in each link's frame
  4. 4.Author or edit the URDF XML directly, following the authoring contract for structure and naming
  5. 5.Compute inertials and derived spatial values using closed-form formulas or helper scripts; never guess
  6. 6.Run `cadgen urdf validate path/to/robot.urdf` and fix all findings until clean
  7. 7.Optionally render a snapshot with `cadgen urdf snapshot path/to/robot.urdf review.png` to visually verify joint placement
  8. 8.Hand the file path to `$cad-viewer` skill if installed to view the result in the CAD Viewer

Use cases

Good for
  • Creating a new robot description from CAD exports and dimensioned specifications
  • Debugging joint-axis misalignment or frame-origin errors in an existing URDF
  • Validating a robot description before deployment to RViz, Gazebo, MoveIt, or a real robot driver
  • Rendering snapshots of robot poses for design review or documentation
  • Migrating a robot model between simulators and ensuring frame conventions match
Who it's for
  • Roboticists authoring or maintaining robot descriptions
  • Simulation engineers validating kinematic models before deployment
  • CAD engineers exporting robot geometry and needing frame-correct URDF output
  • MoveIt or Gazebo users debugging spatial or collision issues

urdf FAQ

Should I generate URDF from Python or author it directly?

Author URDF XML directly; it is the source of truth. Helper scripts for computation (inertias, transforms) are scaffolding, not the artifact. The skill does not provide a `gen_urdf()` contract.

How do I handle mesh references and units?

Export meshes in their link's frame from CAD. Document mesh scale and units in the design ledger. Use `cadgen urdf validate --packages NAME=PATH` to resolve `package://` URIs. Snapshot rendering will fail if meshes cannot be loaded.

What is the design ledger?

A comment block at the top of the `.urdf` file documenting the robot's frame convention, joint axes, unit system, geometry assumptions, and any unchecked spatial data. See `references/design-ledger.md` in the skill.

How do I validate inertial data?

Never freehand inertia tensors or centers of mass. Compute them from closed-form formulas for primitives or a throwaway helper script for mesh-derived values. See `references/inertials.md`. The validator checks physics consistency.

Can I use this skill with MoveIt or Gazebo?

Yes. This skill handles URDF kinematic structure. Use the SRDF skill separately for MoveIt semantic groups and IK/path-planning semantics. Use the CAD skill for STEP/STL/3MF/DXF/GLB outputs.

Full instructions (SKILL.md)

Source of truth, from earthtojake/text-to-cad.


name: urdf description: URDF robot description authoring and validation. Use when creating, editing, inspecting, validating, or debugging .urdf files, robot links, joints, limits, inertials, visual/collision geometry, mesh references, frame conventions, or robot-description artifacts. Use the SRDF skill for MoveIt2 semantic groups and IK/path-planning semantics; use the CAD skill for STEP/STL/3MF/DXF/GLB outputs.

URDF

Provenance: maintained in earthtojake/text-to-cad. Use the installed local skill files as the runtime source of truth; the repository link is only for provenance and release review.

Use this skill for URDF robot-description outputs. Treat URDF work as constrained kinematic modeling, not just XML writing. The main correctness risks are frame placement, joint-axis semantics, unit consistency, mesh scale, and inertial data.

Setup

This skill's commands are thin entrypoints over the cadgen distribution, which carries the Python build runtime and the JavaScript it executes. Install it once:

python -m pip install -r requirements.txt

Rendering additionally needs a browser, which pip cannot supply:

python -m playwright install chromium

Core Rules

  1. The .urdf file is the source of truth. Author and edit URDF XML directly; do not build a Python generation pipeline for it. There is no gen_urdf() contract.
  2. Before writing or changing URDF XML, establish the robot's frame, joint, geometry, unit, and assumption ledger and embed it as a comment block at the top of the .urdf file. See references/design-ledger.md.
  3. Use URDF frame semantics exactly. Joint origins, link frames, joint axes, and visual/collision/inertial origins use different reference frames. See references/frame-semantics.md.
  4. Do not infer spatial transforms, mesh units, handedness, axes, or joint signs from vague prose. Use CAD transforms, dimensioned drawings, measured values, existing source data, or explicit documented assumptions.
  5. Never freehand numeric values that are the result of computation — inertia tensors, centers of mass, unit conversions across many links, mirrored transforms. Compute them: closed-form formulas for primitives, or a throwaway helper script for mesh-derived values. See references/inertials.md.
  6. For physical links, model inertial, visual, and collision separately when the target consumer needs them. Frame-only links may intentionally omit mass and geometry.
  7. Validate every created or modified .urdf with cadgen urdf validate before reporting completion. See references/validation.md.
  8. Helper scripts are allowed and encouraged for computation, but they are scaffolding, not the artifact's source of truth. For complex or genuinely parametric models it is reasonable to keep a model-local helper script on disk next to related source code (for example STEP generator sources) and note it in the ledger; this is optional, and the checked-in .urdf remains canonical.

CAD Viewer Handoff

After completing URDF work that creates or modifies a .urdf, you must ALWAYS hand the explicit file path to $cad-viewer when that skill is installed. $cad-viewer must start CAD Viewer if it is not already running and return link(s) to the relevant created or updated file(s); if $cad-viewer is unavailable or startup fails, report that instead of silently omitting the handoff.

Workflow

  1. Identify the target .urdf file and its consumers: RViz, robot_state_publisher, Gazebo/Ignition, MoveIt, a real robot driver, or another simulator.
  2. Read or create the design ledger before editing frames, origins, axes, mesh scale, limits, or inertials. Keep the ledger as a comment block in the .urdf itself.
  3. Prepare mesh assets first when links reference meshes: one mesh per link, exported in that link's frame by the owning CAD/mesh workflow. See references/meshes.md.
  4. Author or edit the URDF XML directly, following references/authoring-contract.md for structure, ordering, and naming.
  5. Compute — never guess — inertials and other derived numbers. See references/inertials.md.
  6. Validate with cadgen urdf validate; fix findings and re-validate until clean.
  7. Run the verification recipe in references/validation.md: external tools when available (check_urdf), then a viewer review sweeping every joint.
  8. Report remaining assumptions, unchecked spatial data, and validation gaps.

Commands

Run cadgen from the Python environment this skill's requirements.txt was installed into (python -m cadgen.cli <verb> with that interpreter is the PATH-independent equivalent). cadgen doctor <skill-dir> verifies the installed cadgen matches this skill's pin — docs drift silently on a mismatched install. Validation itself needs nothing beyond the Python standard library; only snapshots need the browser. Use cadgen <verb> --help for the complete current interface.

The validator shape is:

cadgen urdf validate path/to/robot.urdf
cadgen urdf validate path/to/robot.urdf --strict
cadgen urdf validate path/to/robot.urdf --json
cadgen urdf validate path/to/robot.urdf --packages robot_description=/path/to/pkg
cadgen urdf snapshot path/to/robot.urdf review.png

The validator collects all findings in one pass (severity, code, XML path) across XML structure, tree topology, joint semantics (limits, mimic, dynamics), geometry, mesh references, materials, inertial physics, and misspelled elements, and prints a summary. One run validates ONE file: --strict treats warnings as failures; --json prints one line of {"ok", "path", "issues": [{"severity", "code", "message", "element", "hint"}], "summary"}, where element is the XML path; --packages NAME=PATH resolves package:// mesh URIs and repeats for several roots. It exits nonzero if the target fails. Relative targets resolve from the current working directory; run from the workspace that owns the files.

Validation is a guardrail, not spatial proof: a URDF can pass every structural check while placing a joint in the wrong spot. The ledger and viewer sweep exist for that reason.

Snapshot Tool

cadgen urdf snapshot renders the robot to a PNG still, using the same shared CLI and headless browser runtime every rendering skill uses — so a snapshot matches what the CAD Viewer shows.

cadgen urdf snapshot path/to/robot.urdf review.png

It accepts .urdf only. Pose the robot with --joint-values — {joint: degrees} JSON, joints you do not name staying at their defaults, where the CAD Viewer opens the robot (the "jointValues" job field is the same thing in a packet). The snapshot draws the robot with the viewer's own scene, so it shows what the viewer shows, and a link mesh that cannot be loaded fails it rather than leaving the link out. Robots are authored in metres and are framed on the robot scene scale automatically.

A normal snapshot uses the Solid preset and Light appearance; omitted groups inherit preset defaults. Pass --display render for the shared photographic scene. Inline display JSON and JSON files use grouped settings such as lighting, background, and floor; appearance is light (default) or dark. Projection and focal length belong in display.camera. Top-level --camera and --joint-values remain active in every display mode. The display modes are solid and render: edges, clip, exploded, the xray, hidden-line and wireframe modes and the hidden/off surface styles describe a STEP model's CAD edges, parts and solids, and are refused by name here.

Link meshes are resolved relative to the description, so they must be present: an unhydrated Git LFS pointer fails as "No link mesh loaded for robot". Run git lfs checkout <mesh dir> first.

The grammar is cadgen urdf snapshot TARGET [OUT] [flags], the same one every format door uses. Use cadgen urdf snapshot --help for the complete current interface — the flags a robot cannot act on are absent from it, not refused by it.

References

  • Authoring contract (structure, ordering, golden skeleton): references/authoring-contract.md
  • Design ledger: references/design-ledger.md
  • Frame semantics: references/frame-semantics.md
  • Mesh preparation and references: references/meshes.md
  • Inertials (formulas, scripts, sanity gates): references/inertials.md
  • URDF edit workflow: references/urdf-workflow.md
  • Validation and verification recipe: references/validation.md