srdf
earthtojake/text-to-cad
MoveIt2 SRDF authoring, validation, and planning-semantics workflow for robot motion planning.
What is srdf?
Create, edit, and validate `.srdf` files that define MoveIt planning semantics on top of a URDF robot model. Use this when working with planning groups, virtual joints, end effectors, group states, disabled collisions, and planning-specific robot configuration. Pair with the URDF skill for robot structure and the cad-viewer skill for live review.
- Author and edit SRDF XML files with planning-semantics validation
- Extract and cross-validate planning groups, joints, links, and end effectors against paired URDF files
- Define group states in URDF-native units (radians for revolute, meters for prismatic)
- Generate and validate disabled-collision matrices with truthful provenance
- Validate SRDF correctness including chain paths, subgroup cycles, and state membership against URDF limits
- Render robot snapshots to PNG for visual review of planning configuration
How to install srdf
npx skills add https://github.com/earthtojake/text-to-cad --skill srdf- Valid URDF file for the robot, created or validated with the URDF skill
- Python environment with `pip install -r requirements.txt` run in the skill directory
- Playwright Chromium browser installed via `python -m playwright install chromium` (for rendering only)
How to use srdf
- 1.Extract the URDF's link and joint table using the URDF skill; copy all names from this table, never from memory
- 2.Record the planning task (arm IK, gripper control, mobile base, dual-arm, tool use, or smoke test)
- 3.Create a planning ledger in `references/planning-ledger.md` format documenting groups, end effectors, and states
- 4.Author the `.srdf` file in the same folder as the paired URDF with matching `<robot name>`
- 5.Define virtual and passive joints only when needed by the robot model
- 6.Define planning groups from URDF topology, preferring chain groups for serial manipulators with real parent-to-child paths
- 7.Define end effectors after group membership is known, avoiding overlap with parent groups
- 8.Define group states using URDF-native units (radians for revolute/continuous, meters for prismatic)
Use cases
- Define planning groups and end effectors for a serial manipulator arm before MoveIt motion planning
- Validate a gripper SRDF configuration against its URDF to ensure correct joint names and state limits
- Generate a disabled-collision matrix from URDF adjacency and collision sampling for a mobile manipulator
- Create group states (e.g., home, ready, stowed positions) in radians for a multi-joint robot
- Audit an existing SRDF for name mismatches, invalid chain paths, and unsafe collision disables
- Roboticists authoring MoveIt2 robot configurations
- Motion planning engineers setting up planning semantics for new robot models
- Robot integrators validating SRDF correctness before deployment
- Developers building semantic robot descriptions for simulation or real hardware
srdf FAQ
URDF defines physical robot structure (links, joints, geometry, inertials, limits). SRDF defines MoveIt planning semantics (virtual joints, passive joints, planning groups, group states, end effectors, disabled collisions). They are paired by colocation and robot name; the SRDF must reference only names that exist in the URDF.
Save the `.srdf` file in the same folder as the `.urdf` and use the same `<robot name>` in both files. This colocation-plus-name match is the only linking mechanism. Exactly one URDF per robot name may exist in the folder.
Use URDF-native units: radians for revolute and continuous joints, meters for prismatic joints. Do not store degrees in SRDF. All values must lie within the URDF's joint limits.
Run `cadgen srdf validate path/to/robot.srdf` to cross-validate all names, chains, states, and pairs against the paired URDF. Use `--strict` to treat warnings as failures and `--json` for machine-readable output. Fix findings and re-validate until clean.
No. Derive planning groups, end effectors, group states, and disabled collisions from URDF topology, MoveIt Setup Assistant output, sampled collision analysis, or explicit user data. Language models are weak at spatial and kinematic reasoning; do not infer from visual theme alone.
Full instructions (SKILL.md)
Source of truth, from earthtojake/text-to-cad.
name: srdf
description: MoveIt2 SRDF authoring, validation, and planning-semantics workflow. Use when creating, editing, inspecting, or validating .srdf files, MoveIt planning groups, virtual joints, passive joints, end effectors, group states, disabled collisions, URDF-paired planning semantics, or SRDF handoff for live review. Use the URDF skill for robot structure, the SDF skill for simulator descriptions, and the cad-viewer skill for rendering and live review links.
SRDF
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 MoveIt semantic robot descriptions on top of an existing valid URDF. SRDF defines planning semantics; it does not define physical robot structure. The .srdf file is the source of truth: author and edit the XML directly. There is no gen_srdf() contract.
SRDF correctness is a planning semantics problem. The common failure is not invalid XML; it is a plausible SRDF that gives MoveIt the wrong planning group, wrong tool link, wrong default state, unsafe disabled-collision matrix, or wrong joint units. Because language models are weak at spatial and kinematic reasoning, derive planning groups, end effectors, group states, and disabled collisions from the URDF topology, MoveIt Setup Assistant output, sampled collision analysis, or explicit user data. Do not infer them from visual theme alone — and do not type any link or joint name from memory: extract the URDF's link/joint table first and copy names from it.
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
Format boundary
- URDF owns physical robot structure: links, joints, geometry, inertials, limits, mimic joints, transmissions, and robot-state publishing.
- SRDF owns MoveIt semantics: virtual joints, passive joints, planning groups, group states, end effectors, and disabled collision pairs.
- SDF owns simulator/world semantics: physics, sensors, lights, plugins, worlds, and simulation-specific metadata.
Do not place geometry, inertials, joint origins, link poses, mesh references, physical joint limits, transmissions, or ros2_control interfaces in SRDF.
CAD Viewer Handoff
After completing SRDF work that creates or modifies a .srdf, 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.
Required workflow
- Start from a valid URDF. Author or fix the URDF first with
$urdfand validate it. The SRDF pairs with that URDF by colocation and robot name, and every name in the SRDF must exist in it. - Extract the URDF table. Before writing any SRDF XML, list the URDF's robot name, links, joints (with type, parent, child, limits, mimic flags). Copy names from this table only; never type them from memory. See
references/srdf-workflow.md. - Identify the planning task. Record whether the goal is arm IK, gripper control, mobile base planning, dual-arm planning, tool use, or local smoke testing.
- Create or update the planning ledger. Use
references/planning-ledger.mdbefore writing XML; keep a compact copy as a comment block in the.srdf. - Pair with the URDF by colocation. Save the
.srdfin the same folder as its.urdf, with the same<robot name>— that is the only linking mechanism. The validator and the viewer both resolve the pairing by scanning the folder for the URDF whose robot name matches; exactly one URDF per robot name per folder. No metadata element links the files. Seereferences/authoring-contract.md. - Define virtual and passive joints deliberately. Use them when needed by the robot model.
- Define planning groups from URDF topology. Prefer chain groups for serial manipulators when base/tip form a real parent-to-child path in the URDF tree (the validator verifies this). Use joint/link/subgroup definitions only when they are deliberate.
- Define end effectors after group membership is known. Avoid overlap between an end-effector group and its parent group. Record the actual target/TCP link.
- Define group states in URDF-native units. Revolute and continuous values are radians; prismatic values are meters. Do not store degrees in SRDF. Values must lie within URDF limits and must not set fixed or mimic joints.
- Generate disabled collisions from evidence. Use adjacency derived from the URDF joint table, MoveIt Setup Assistant sampling, or explicit user-provided collision matrices. Do not invent broad disable lists. See
references/disabled-collisions.md. - Validate every created or modified
.srdfwithcadgen srdf validate; it cross-validates all names, chains, states, and pairs against the paired URDF. Fix findings and re-validate until clean. - Run MoveIt smoke tests when available. Use MoveIt Setup Assistant or a project MoveIt launch directly.
- Report assumptions and skipped checks. Include incomplete validation, missing MoveIt environment, manually reasoned collision disables, and inferred target links.
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 srdf validate path/to/robot.srdf
cadgen srdf validate path/to/robot.srdf --strict
cadgen srdf validate path/to/robot.srdf --json
The validator parses the SRDF, resolves the paired URDF (the same-folder .urdf whose robot name matches; none, several, or an invalid one is an error), and cross-validates: group/joint/link/subgroup name existence, chain path resolvability, subgroup cycles, virtual/passive joints, end-effector topology, group-state membership/limits/completeness, disabled-collision pairs (including Adjacent-reason truthfulness), and misspelled elements. Each phase collects all its findings in one pass (severity, code, XML path), but a structural error stops the cross-file phase — re-run after every fix. One run validates ONE file: --strict treats warnings as failures and --json prints one line of {"ok", "path", "issues": [{"severity", "code", "message", "element", "hint"}], "summary"}, where element is the XML path. It exits nonzero if the target fails. Relative targets resolve from the current working directory.
Hard rules
- The SRDF lives in the same folder as its URDF and shares its
<robot name>; that colocation-plus-name match is the only pairing mechanism, and exactly one URDF per robot name may exist in the folder. - Every link, joint, group, and subgroup name must come from the URDF table or a group defined in the same file.
- Group states use URDF-native units: radians for revolute/continuous, meters for prismatic.
- Disabled collision pairs require truthful reasons and provenance.
- End-effector groups should not share links with their parent planning group.
- Visual rendering review is useful but cannot prove planning correctness.
Snapshot Tool
cadgen 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 snapshot path/to/robot.srdf review.png
Hand it the .srdf; it routes by suffix and renders the paired URDF's geometry — the same-folder .urdf whose <robot name> matches, exactly as cadgen srdf validate pairs them. No match, or more than one, is refused before anything renders, naming the robot name it looked for and the .urdf files it found. Pose the robot with --joint-values — {joint: degrees} JSON,
joints you do not name staying where the CAD Viewer opens the robot: each at its default, then
this SRDF's home group state if it declares one (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.
An SRDF's geometry comes from its paired URDF, so it has no snapshot door of its
own; the polymorphic cadgen snapshot routes one by suffix. The grammar is
cadgen snapshot TARGET [OUT] [flags], the same one every format door uses. Use
cadgen snapshot --help for the complete current interface.
References
- Authoring contract (structure, URDF pairing, golden skeleton):
references/authoring-contract.md - SRDF workflow (URDF table extraction, edit loop):
references/srdf-workflow.md - Planning ledger:
references/planning-ledger.md - Validation and verification recipe:
references/validation.md - End effectors:
references/end-effectors.md - Disabled collisions:
references/disabled-collisions.md
Related skills
More from earthtojake/text-to-cad and the wider catalog.

step-parts
Search and download off-the-shelf CAD parts from step.parts catalog via API.

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

bambu-labs
Dry-run, upload, and start Bambu Lab print jobs locally via validated G-code and LAN FTPS/MQTT.

cad
Generate parametric CAD models from Python, export to STEP/STL/3MF/GLB, and inspect geometry.

effect-ts
Set up Effect TypeScript library in your repository with proper agent instructions.

swift-architecture-skill
Swift iOS architecture guidance for MVVM, MVI, TCA, Clean Architecture, VIPER, MVP, Coordinator, and Reactive patterns.