Skip to main content

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:
  1. One main .urdf file
  2. Every file referenced by that URDF (meshes, textures, materials)
Then zip that folder.

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.
Symbolic links inside the ZIP are supported and resolved automatically.

Upload from the UI

  1. Sign in (or sign up)
  2. Go to cyberwave.com/catalog
  3. Click Upload Asset
  4. Fill in required fields and upload your URDF ZIP
  5. (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
Example:
API payload fields:
  • file_url: URL to your ZIP file
  • force_name: Name for the asset
  • main_file_path: Main URDF path in the ZIP
  • description (optional)
  • subfolder (optional)
  • branch (optional)
For API uploads, make sure file_url is reachable by Cyberwave and points to the final ZIP file.

Set physics properties

When Cyberwave processes your URDF ZIP it generates a universal schema — the canonical JSON representation of your robot. The schema includes a physics 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
Each call sends a single JSON Pointer operation:
You can also patch individual sub-fields without overwriting the entire object:

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

Returns 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

Re-parses the uploaded URDF/MJCF/SDF and regenerates the schema. Useful after uploading new source files or to discard manual edits.

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.
Your control timestep must be an exact integer multiple of the physics timestep. For example, a 50 Hz control loop (0.02 s) with a 0.002 s physics timestep means 10 physics sub-steps per control step. Fractional ratios cause subtle timing bugs.

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)
When two objects collide, most engines pick the minimum friction of the two surfaces. Set friction on your robot’s gripper pads separately from the rest of the body.
Restitution (bounciness)
  • 0.0 – completely inelastic (objects stick on contact) — good for grippers and heavy payloads
  • 0.1 – default; slight energy absorption
  • 0.5 – 0.8 – bouncy; use for balls, elastic impacts
  • 1.0 – perfectly elastic (no energy loss) — rarely realistic
Stiffness and damping control how “soft” contacts feel. The defaults (10 000 / 20) model hard rigid bodies. Lower stiffness for deformable objects or compliant surfaces; increase damping if contacts oscillate.

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.

Common pitfalls