Open SolidCraft above to model your parts and joints, then follow the steps below to export them as URDF. URDF (Unified Robot Description Format) is the file robot simulators read. SolidCraft writes it straight from an assembly, so you don't need a separate exporter plugin.
Everything on this page comes from SolidCraft's own documentation, linked at the bottom. New to the app? Start with the SolidCraft tutorial.
What you need before exporting
URDF describes a robot as links (rigid parts) joined by joints. In SolidCraft that means:
- Components, not just bodies. Each moving part has to be its own component. If you brought parts in from a STEP file, they often arrive as bodies of a single component. Use Create Components from Bodies to split them, and the joint dialog offers this too. See SolidCraft STEP files for importing.
- Joints between components. Press J (Joint) and connect two components by joint origins that snap to faces, edges, circles or vertices. Set limits on joints that should stop.
- Something grounded. Ground the base part. The export builds the robot tree from the grounded parts outwards, the same way the joint solver does.
- Materials if mass matters. Mass and inertia come from each body's mesh and material density.
Before exporting, use Drive Joints to move each joint through its range and check that the mechanism moves the way you expect.
How to export URDF
| Where | How |
|---|---|
| Desktop app | File → Export URDF… |
| Commands / scripts | file.export {"path": "robot.urdf"} or "format": "urdf" |
| MCP (AI assistants) | the export tool with a .urdf path or format: "urdf" |
| CLI | solidcraft-cli run script.json --out robot.urdf |
URDF always exports the whole assembly, so you can't pick single bodies. If you drive SolidCraft from an AI assistant, the SolidCraft MCP server can run the same export.
What you get
Next to robot.urdf, the export writes one binary STL per component, in metres:
robot-<component>.stlholds that component's bodies. The root component's bodies go inrobot-base.stl.robot-<component>-collision.stlappears only when a component mixes closed solids with open surfaces. It holds the closed solids, used as collision geometry.
The meshes are written first and the .urdf last. Every path is checked before anything is written, and if a write fails part way, the error names the files already written.
Links
base_linkholds the root component's bodies and stays fixed in the world.- Each placement of a component becomes one link. A component placed once uses its own name (
Gripper). One placed several times uses occurrence names (Finger:1becomesFinger_1). - Names keep only letters, digits and
_. Links, joints and files share one set of names, because Gazebo refuses a link and a joint with the same name. Duplicates get_2,_3and so on. - A link with no mass gets a token mass (1e-6 kg), because Gazebo drops massless links and breaks the chain.
How SolidCraft joints map to URDF
URDF only has simple joint types, so SolidCraft turns multi-axis joints into short chains:
| SolidCraft joint | URDF |
|---|---|
| Rigid | fixed |
| Revolute | revolute about z with limits, or continuous without |
| Slider | prismatic along z |
| Cylindrical | revolute z, then prismatic z |
| Pin-slot | prismatic x, then revolute z |
| Planar | prismatic x, prismatic y, then revolute z |
| Ball | revolute z, revolute y, then revolute z |
Joint values match: a joint at 30° in SolidCraft is at the same angle (in radians) in the URDF, and distances are in metres. The URDF is written at the design's current joint values, with every part where it is shown.
Export settings
| Setting | Default | What it does |
|---|---|---|
mesh_prefix |
none | Text put before each mesh file name. Leave it empty for Isaac Sim, PyBullet, MuJoCo and yourdfpy. RViz and other ROS tools need package://<pkg>/meshes/ or an absolute folder. |
effort |
1000 | Joint effort limit, in N or N m |
velocity |
10 | Joint velocity limit, in m/s or rad/s |
URDF requires effort and velocity on every moving joint. If you don't set them, the defaults are written with a warning. A slider without a limit gets ±1000 m, also with a warning.
Warnings you might see
- Part not grounded. A group of parts joined to each other but to nothing grounded is fixed in place by its first joint.
- Joint left out. URDF is a tree, so a joint that would close a loop (like a four-bar linkage) is skipped. A joint whose snap point no longer exists is skipped too.
- Open surfaces. They are drawn but add no mass or collision.
What isn't covered yet
The documentation lists these as not supported: <mimic> joints for motion links, simplified collision shapes (the collision mesh is the visual mesh), SDF and MJCF export, URDF import, and joint motion inside copies of a component placed several times. Effort and velocity are limits you choose, not simulated drive dynamics.
Need SolidCraft on your computer for the File menu? Get it from the SolidCraft download page.