|
1 | | -# 0.1.0dev0 |
| 1 | +# 0.1.0a1 |
| 2 | + |
| 3 | +## Features |
| 4 | + |
| 5 | +- **USD Asset Structure** |
| 6 | + - Output Assets are completely standalone with no dependencies on the source URDF, OBJ, DAE, or STL files |
| 7 | + - Atomic Component structure with Asset Interface layer and payloaded contents |
| 8 | + - Separate geometry, material, and physics content layers for easy asset-reuse across domains |
| 9 | + - Library-based asset references for meshes and materials to avoid heavy data duplication |
| 10 | + - Explicit USD stage metadata with units (meters, kilograms) and up-axis (Z) |
| 11 | +- **Link Conversion** |
| 12 | + - URDF links are converted as `UsdGeom.Xform` prims with `UsdPhysics.RigidBodyAPI` applied |
| 13 | + - The root link has `UsdPhysics.ArticulationRootAPI` applied to indicate the root of the kinematic tree |
| 14 | + - Links are nested in USD, reflecting the kinematic hierarchy of the source URDF rather than the XML file structure |
| 15 | + - Complete mass properties including explicit inertia & center of mass via `UsdPhysics.MassAPI` |
| 16 | +- **Joint Conversion** |
| 17 | + - Revolute joints as `UsdPhysics.RevoluteJoint` with angular limits |
| 18 | + - Continuous joints as `UsdPhysics.RevoluteJoint` without limits |
| 19 | + - Prismatic joints as `UsdPhysics.PrismaticJoint` with linear limits |
| 20 | + - Fixed joints as `UsdPhysics.FixedJoint` |
| 21 | + - Planar joints as `UsdPhysics.Joint` with the appropriate `UsdPhysics.LimitAPI` applied to constrain the locked DOFs |
| 22 | + - Floating joints (bodies are free by default in USD) |
| 23 | + - All joints have automatic joint frame alignment between Body0 and Body1, accounting for URDF joint axis, position, and orientation. |
| 24 | + - Joint limits for velocity & effort have no equivalent in `UsdPhysics`, but are authored as custom attributes `urdf:limit:velocity` and `urdf:limit:effort` respectively. |
| 25 | +- **Geometry Conversion** |
| 26 | + - All visual and collision geometry is converted to USD |
| 27 | + - Visuals are set with `default` UsdPurpose and colliders with `guide` UsdPurpose |
| 28 | + - `UsdPhysics.CollisionAPI` is applied to colliders |
| 29 | + - Meshes as `UsdGeom.Mesh` |
| 30 | + - Automatic mesh library generation with reference-based asset structure, to avoid duplicate topology |
| 31 | + - STL files converted to USD using `numpy-stl` and `usd-exchange` with normal processing |
| 32 | + - OBJ files converted using `tinyobjloader` and `usd-exchange` with UV coordinates and normal mapping |
| 33 | + - DAE files converted using `pycollada` and `usd-exchange` with UV coordinates, normal mapping, and `UsdGeom.Subset` support |
| 34 | + - OBJ and DAE files specifying multiple meshes convert as a list of meshes under a common parent prim |
| 35 | + - `UsdPhysics.MeshCollisionAPI` is applied to mesh colliders with convex hull specified as the approximation preference |
| 36 | + - Spheres as `UsdGeom.Sphere` |
| 37 | + - Boxes as `UsdGeom.Cube` with scale transforms |
| 38 | + - Cylinders as `UsdGeom.Cylinder` |
| 39 | +- **Visual Material and Texture Conversion** |
| 40 | + - All materials are converted to `UsdShade.Material` graphs using `UsdPreviewSurface` shaders, and encapsulated as instanceable material interfaces |
| 41 | + - PNG texture support with automatic texture copying and path resolution |
| 42 | + - URDF materials convert rgba as diffuse color and opacity, with support for diffuse textures |
| 43 | + - OBJ embedded materials (MTL files) convert diffuse color, specular color, dissolve (opacity), roughness (not shininess), metallic, and ior |
| 44 | + - diffuse, specular, normal/bump, roughness, metallic, and opacity textures are all supported |
| 45 | +- **Prim Naming** |
| 46 | + - If URDF/DAE/OBJ names are not valid USD specifiers they are automatically transcoded & made unique & valid |
| 47 | + - Display name metadata preserves the original source names on the USD Prims |
| 48 | +- **Command Line Interface** |
| 49 | + - Input is an URDF file and default output is a USD Layer as a structured Atomic Component with an Asset Interface USDA layer |
| 50 | + - All heavy data is compressed binary data (via USDC layers) while lightweight data is plain text for legibility |
| 51 | + - Optional comment string embedded into all authored USD Layers |
| 52 | + - Optional Stage flattening for single-file output |
| 53 | + - Optionally skip the `UsdPhysics.Scene` (this may be desirable for multi-asset setups) |
| 54 | + - Error handling with graceful failures |
| 55 | + - Enable verbose output for debugging (exposes any traceback info) |
| 56 | +- **Python API** |
| 57 | + - Full programmatic access via `urdf_usd_converter.Converter` class with configurable parameters for all CLI flags |
| 58 | + - Enables interactive editing of the USD Layers after conversion |
| 59 | + |
| 60 | +# Known Limitations |
| 61 | + |
| 62 | +## USD Data Conversion |
| 63 | + |
| 64 | +- **Joint Conversion** |
| 65 | + - Calibration has no equivalent in `UsdPhysics` and is omitted |
| 66 | + - Dynamics has no equivalent in `UsdPhysics` and is omitted |
| 67 | + - Safety Controller has no equivalent in `UsdPhysics` and is omitted |
| 68 | + - Mimic has no equivalent in `UsdPhysics` and is omitted |
| 69 | +- **Geometry Conversion** |
| 70 | + - No other file formats beyond OBJ/DAE/STL are supported |
| 71 | + - For DAE files, only "TriangleSet", "Triangles", "Polylist", and "Polygons" are supported |
| 72 | + - For OBJ files, only objects with faces are supported (i.e. no points, lines, or free-form curves/surfaces) |
| 73 | +- **Visual Material and Texture Conversion** |
| 74 | + - DAE embedded materials are not implemented |
| 75 | + - Projection shaders for basic geometry primitives (box, cylinder, sphere) are not implemented |
| 76 | + - More accurate PBR materials (e.g. OpenPBR via UsdMtlx) are not implemented |
| 77 | +- **Other Elements** |
| 78 | + - Transmission conversion is not implemented |
| 79 | + - Gazebo conversion is not implemented |
| 80 | + - Conversion of other out-of-spec URDF extensions are not implemented |
| 81 | + |
| 82 | +## Using the USD Asset in other USD Ecosystem applications |
| 83 | + |
| 84 | +- The USD Asset contains nested rigid bodies within articulations. |
| 85 | + - 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. |
0 commit comments