STEP file to URDF: the complete guide
STEP is the most accurate CAD interchange format for robot conversion — but it carries no joints. Here's how a URDF is recovered from a STEP file, and how to do it fast.
A STEP file (.step/.stp, ISO 10303) stores boundary representation geometry: exact analytic surfaces — cylinders, planes, cones, and the axes that define them. That precision is exactly what you want for a robot model, because a revolute joint's axis is the axis of a cylindrical surface. IGES (.iges/.igs) is similar.
The catch: STEP has no joints
STEP describes shape, not motion. There are no mates, no kinematic tree, no "this pin rotates in that hole". So converting STEP to URDF is a two-part problem:
- Structure — which solids are separate links, and how are they connected?
- Joints — for each connection, what type (revolute/prismatic/fixed) and along which axis?
How joint axes are recovered from B-Rep
Because STEP keeps exact surfaces, a converter can find where two parts meet at a shared cylindrical interface — a pin in a bore — and read the joint axis directly from that cylinder's axis. This is far more reliable than mesh-based inference, which only sees a triangulated approximation of the same surface. From B-Rep you get exact revolute and prismatic axes; from a mesh you get an estimate.
What still can't be recovered
Even with perfect geometry, a single static pose cannot tell you:
- Joint limits / travel — how far the joint moves.
- Actuated vs passive — which joints are driven by a motor.
- Mimic relationships — joints that move together.
These need a human decision, a two-pose capture, or robot-class priors. A good converter is conservative here: it would rather mark a joint fixed than emit a wrong axis.
The manual route
By hand, you'd import the STEP into FreeCAD or a similar tool, split it into per-link bodies, work out each joint axis, compute inertia (density × geometry), decimate collision meshes, and hand-write the URDF XML — links, joints, <origin> frames at each hinge, <inertial> and <collision> blocks. It's doable, and it's a long afternoon per robot.
The automated route
Jointly takes the STEP file directly, recovers the structure and exact axes from the B-Rep, computes Mirtich inertia, generates convex collision, and writes the URDF (plus SDF, MJCF and USD) with meshes packaged in a ZIP. You confirm limits and which joints are motorized, and you're done in about 90 seconds.
Skip the manual work
Jointly does everything on this page automatically: drop in your CAD (STEP, mesh, SolidWorks or Onshape), and it infers joints, axes, inertia and collision, then exports a simulation-ready URDF, SDF, MJCF or USD. The first conversions are free.
Try Jointly free →Tips for a clean STEP export
- Export the assembly, keeping solids separate — don't merge everything into one fused body, or link boundaries are lost.
- Use AP214 or AP242 if your CAD offers a choice; both preserve the geometry Jointly needs.
- Model in real units (mm/m). A mis-scaled STEP produces a mis-scaled robot.