What is a URDF?
URDF (Unified Robot Description Format) is the standard XML format used in ROS to describe a robot’s links, joints, visuals, and collisions. Useful open-source references:Prepare your ZIP file correctly
Before uploading, create a folder that contains:- One main
.urdffile - Every file referenced by that URDF (meshes, textures, materials)
File references inside URDF
Your URDF can reference other files, for example:- STL files for collision geometry
- OBJ files for visual geometry / textured visuals
- Texture image files used by materials (for example PNG/JPG)
Use relative paths that match your ZIP structure. If the URDF references
meshes/arm_visual.obj, that file must exist in the ZIP.Upload from the UI
- Sign in (or sign up)
- Go to cyberwave.com/catalog
- Click Upload Asset
- Fill in required fields and upload your URDF ZIP
- (Optional) Open Advanced for extra fields
Advanced form fields
- Main URDF File Path
- If your ZIP has only one URDF file, you can leave this empty
- If your ZIP has multiple URDF files, set the path (for example
urdf/robot.urdf)
- Thumbnail
- Optional
- If you do not upload one, Cyberwave can generate a thumbnail automatically
Upload from the API (create-with-urdf)
Use:
POST /api/v1/assets/create-with-urdf
file_url: URL to your ZIP fileforce_name: Name for the assetmain_file_path: Main URDF path in the ZIPdescription(optional)subfolder(optional)branch(optional)
Set physics properties
When Cyberwave processes your URDF ZIP it generates a universal schema — the canonical JSON representation of your robot. The schema includes aphysics object that controls world-level simulation parameters such as gravity, timestep, solver, and default contact surface.
There is no physics editor in the UI yet. Use the PATCH API below to configure physics after uploading.
Physics object structure
Set physics via API
Use the universal schema PATCH endpoint:PATCH /api/v1/assets/{uuid}/universal-schema
Set physics via Python SDK
The Python SDK provides convenience methods so you don’t need to craft JSON Pointer operations manually. All setter methods use a read-modify-write pattern: omitted fields keep their current values.set_physics — set multiple physics fields at once
set_gravity — shorthand for the gravity vector
set_physics_solver — configure the solver
set_contact_properties — tune the default contact surface
get_physics — read the current physics
None if no physics have been configured yet.
Universal schema helpers (Python SDK)
Beyond physics, the SDK exposes general-purpose methods for reading and writing any part of the universal schema.get_universal_schema — download the full schema
get_universal_schema_at_path — read a specific sub-path
patch_universal_schema — write to any JSON Pointer path
rebuild_universal_schema — regenerate from source files
Physics tuning best practices
Getting physics parameters right is the difference between a simulation that behaves like the real world and one that explodes on the first contact. This section distills practical guidance from the MuJoCo, Bullet, and Gazebo communities.Pick the right timestep
The timestep is the single most impactful parameter. Too large and the simulation becomes unstable; too small and you waste compute for no visible gain.Choose a solver type
Cyberwave maps solver types to the underlying engine. Use this as a starting point:
Increase
iterations (default 50) when you see jitter or interpenetration at contacts. Higher iterations improve accuracy at the cost of speed — 100–200 is a reasonable upper bound before you should reduce the timestep instead.
Tune contact parameters for realism
Default contact values are deliberately “grippy” (high friction, low restitution). This works well for tabletop manipulation but may need adjustment for other scenarios. Friction (mu_static, mu_dynamic)
Restitution (bounciness)
0.0– completely inelastic (objects stick on contact) — good for grippers and heavy payloads0.1– default; slight energy absorption0.5 – 0.8– bouncy; use for balls, elastic impacts1.0– perfectly elastic (no energy loss) — rarely realistic
Prepare for sim-to-real transfer
If your goal is to deploy policies trained in simulation onto real hardware, physics parameters are a critical part of the reality gap. 1. Measure, don’t guess. Use a scale, force gauge, or system identification to get real mass, inertia, and joint friction values. Even rough measurements beat defaults — research shows unexpectedly high friction-torque ratios in real joints compared to simulation defaults. 2. Randomize what you can’t measure. Domain randomization over physics parameters helps policies generalize. Randomize friction (±30%), mass (±10%), and contact stiffness across training episodes. This is especially important for contact-rich tasks like assembly or grasping. 3. Validate on simple motions first. Before training a full policy, compare simulated vs. real joint trajectories on a basic motion (e.g., gravity drop, sine-wave tracking). If these diverge, fix the model before scaling up. 4. Iterate on the timestep last. Changing the timestep affects controller gains, contact behavior, and training speed simultaneously. Get other parameters right first, then tune timestep if needed.A policy that achieves 95% success in simulation can drop to 30–50% on real hardware without careful parameter calibration. Investing time in physics tuning pays off more than training longer.