Releases: newton-physics/urdf-usd-converter
Releases · newton-physics/urdf-usd-converter
URDF USD Converter v0.1.0a1
Features
- USD Asset Structure
- Output Assets are completely standalone with no dependencies on the source URDF, OBJ, DAE, or STL files
- Atomic Component structure with Asset Interface layer and payloaded contents
- Separate geometry, material, and physics content layers for easy asset-reuse across domains
- Library-based asset references for meshes and materials to avoid heavy data duplication
- Explicit USD stage metadata with units (meters, kilograms) and up-axis (Z)
- Link Conversion
- URDF links are converted as
UsdGeom.Xformprims withUsdPhysics.RigidBodyAPIapplied - The root link has
UsdPhysics.ArticulationRootAPIapplied to indicate the root of the kinematic tree - Links are nested in USD, reflecting the kinematic hierarchy of the source URDF rather than the XML file structure
- Complete mass properties including explicit inertia & center of mass via
UsdPhysics.MassAPI
- URDF links are converted as
- Joint Conversion
- Revolute joints as
UsdPhysics.RevoluteJointwith angular limits - Continuous joints as
UsdPhysics.RevoluteJointwithout limits - Prismatic joints as
UsdPhysics.PrismaticJointwith linear limits - Fixed joints as
UsdPhysics.FixedJoint - Planar joints as
UsdPhysics.Jointwith the appropriateUsdPhysics.LimitAPIapplied to constrain the locked DOFs - Floating joints (bodies are free by default in USD)
- All joints have automatic joint frame alignment between Body0 and Body1, accounting for URDF joint axis, position, and orientation.
- Joint limits for velocity & effort have no equivalent in
UsdPhysics, but are authored as custom attributesurdf:limit:velocityandurdf:limit:effortrespectively.
- Revolute joints as
- Geometry Conversion
- All visual and collision geometry is converted to USD
- Visuals are set with
defaultUsdPurpose and colliders withguideUsdPurpose
- Visuals are set with
UsdPhysics.CollisionAPIis applied to colliders- Meshes as
UsdGeom.Mesh- Automatic mesh library generation with reference-based asset structure, to avoid duplicate topology
- STL files converted to USD using
numpy-stlandusd-exchangewith normal processing - OBJ files converted using
tinyobjloaderandusd-exchangewith UV coordinates and normal mapping - DAE files converted using
pycolladaandusd-exchangewith UV coordinates, normal mapping, andUsdGeom.Subsetsupport - OBJ and DAE files specifying multiple meshes convert as a list of meshes under a common parent prim
UsdPhysics.MeshCollisionAPIis applied to mesh colliders with convex hull specified as the approximation preference
- Spheres as
UsdGeom.Sphere - Boxes as
UsdGeom.Cubewith scale transforms - Cylinders as
UsdGeom.Cylinder
- All visual and collision geometry is converted to USD
- Visual Material and Texture Conversion
- All materials are converted to
UsdShade.Materialgraphs usingUsdPreviewSurfaceshaders, and encapsulated as instanceable material interfaces - PNG texture support with automatic texture copying and path resolution
- URDF materials convert rgba as diffuse color and opacity, with support for diffuse textures
- OBJ embedded materials (MTL files) convert diffuse color, specular color, dissolve (opacity), roughness (not shininess), metallic, and ior
- diffuse, specular, normal/bump, roughness, metallic, and opacity textures are all supported
- All materials are converted to
- Prim Naming
- If URDF/DAE/OBJ names are not valid USD specifiers they are automatically transcoded & made unique & valid
- Display name metadata preserves the original source names on the USD Prims
- Command Line Interface
- Input is an URDF file and default output is a USD Layer as a structured Atomic Component with an Asset Interface USDA layer
- All heavy data is compressed binary data (via USDC layers) while lightweight data is plain text for legibility
- Optional comment string embedded into all authored USD Layers
- Optional Stage flattening for single-file output
- Optionally skip the
UsdPhysics.Scene(this may be desirable for multi-asset setups) - Error handling with graceful failures
- Enable verbose output for debugging (exposes any traceback info)
- Input is an URDF file and default output is a USD Layer as a structured Atomic Component with an Asset Interface USDA layer
- Python API
- Full programmatic access via
urdf_usd_converter.Converterclass with configurable parameters for all CLI flags - Enables interactive editing of the USD Layers after conversion
- Full programmatic access via
Known Limitations
USD Data Conversion
- Joint Conversion
- Calibration has no equivalent in
UsdPhysicsand is omitted - Dynamics has no equivalent in
UsdPhysicsand is omitted - Safety Controller has no equivalent in
UsdPhysicsand is omitted - Mimic has no equivalent in
UsdPhysicsand is omitted
- Calibration has no equivalent in
- Geometry Conversion
- No other file formats beyond OBJ/DAE/STL are supported
- For DAE files, only "TriangleSet", "Triangles", "Polylist", and "Polygons" are supported
- For OBJ files, only objects with faces are supported (i.e. no points, lines, or free-form curves/surfaces)
- Visual Material and Texture Conversion
- DAE embedded materials are not implemented
- Projection shaders for basic geometry primitives (box, cylinder, sphere) are not implemented
- More accurate PBR materials (e.g. OpenPBR via UsdMtlx) are not implemented
- Other Elements
- Transmission conversion is not implemented
- Gazebo conversion is not implemented
- Conversion of other out-of-spec URDF extensions are not implemented
Using the USD Asset in other USD Ecosystem applications
- The USD Asset contains nested rigid bodies within articulations.
- Support for nested bodies in UsdPhysics is fairly new (as of USD 25.11), and some existing applications may not support this style of nesting.