Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Principle:ARISE Initiative Robosuite Composite Object Construction

From Leeroopedia
Knowledge Sources
Domains Robotics, Simulation, Procedural Generation
Last Updated 2026-02-15 07:00 GMT

Overview

Composite object construction assembles complex task objects from primitive geometric shapes using procedural generation, enabling parametrically randomizable objects with multi-body articulation for manipulation tasks.

Description

Many manipulation tasks require objects with complex geometry that cannot be represented by a single primitive shape: a hammer has a cylindrical handle and a rectangular head, a pot has a cylindrical body with handles, a hook frame has multiple connected segments, and a wrench has a hinged jaw mechanism. The composite object construction principle provides a systematic approach for building these complex objects from primitive components, either within a single body (composite objects) or across multiple linked bodies (composite body objects).

Single-body composite objects are assembled by appending multiple geom primitives (boxes, cylinders, spheres, capsules) to a single root body. Each primitive is positioned and oriented relative to the root body using offset and quaternion specifications. The object's geometric properties (bounding box, horizontal radius, top/bottom offsets) are computed automatically from the union of all primitive positions and sizes. Material properties (density, friction, color, texture) can vary per-primitive, allowing realistic multi-material objects like a hammer with a wooden handle and metal head.

Multi-body composite objects extend this approach by linking multiple sub-objects (each potentially a composite or XML-based object) into a kinematic chain with joints between them. This enables articulated objects like hinged boxes, ratcheting wrenches, or objects with moving parts. Sub-objects are positioned relative to their parent body and can have joints added at the connection point. The composite body object manages the namespace (adding prefixes to prevent naming collisions between sub-objects), tracks all body positions for computing global geometric properties, and strips top-level joints from sub-objects before attachment (since the parent-child relationship defines the kinematic constraint).

All composite objects support parametric randomization: dimensions, densities, frictions, and colors can be specified as ranges, with random values sampled at construction time. This is essential for domain randomization in robot learning, where the policy must generalize across object variations.

Usage

Apply composite object construction when a task requires objects with complex geometry that would be cumbersome to author manually in XML. Use single-body composites for rigid objects made of multiple primitives (hammer, pot, hook). Use multi-body composites for articulated objects with moving parts (hinged box, wrench). Parametric randomization should be used to create object distributions for training robust manipulation policies.

Theoretical Basis

Composite Object Construction:

  Type 1 - Single-Body Composite (CompositeObject):
    Extends MujocoGeneratedObject

    Construction:
      1. Define primitive specifications:
           For each part: type, size, position, quaternion,
                          material, density, friction, rgba

      2. Build object subtree:
           root_body = new_body("root")
           For each primitive spec:
             geom = new_geom(type, size, pos, quat, ...)
             root_body.append(geom)

      3. Add joints to root body:
           "default" -> free joint
           Custom -> specified joint list

      4. Compute geometric properties:
           top_offset    = max(pos_z + size_z) across all primitives
           bottom_offset = min(pos_z - size_z) across all primitives
           horizontal_radius = max(sqrt(pos_x^2 + pos_y^2) + max_size)

    Example - Hammer:
      handle: cylinder(radius=0.015-0.02, length=0.1-0.25)
      head:   box(offset at handle end, density=2x handle)
      face:   cylinder(on head front)
      claw:   triangular prism(on head back)

  Type 2 - Multi-Body Composite (CompositeBodyObject):
    Extends MujocoGeneratedObject

    Construction:
      1. Define sub-objects and their spatial relationships:
           objects: list of MujocoObject instances
           locations: 3D position for each, relative to parent
           quats: orientation for each
           parents: which body each attaches to

      2. Build body tree:
           root = new_body("root")
           For each (object, location, quat, parent):
             Strip top-level joints from object
             Add object body to parent body at location/quat
             Track absolute positions for bounding computation

      3. Optionally add joints between bodies:
           body_joints: maps body names to joint specs

      4. Compute geometric properties from all body positions

    Example - Hinged Box:
      base: box body
      lid:  box body (child of base)
      hinge joint between base and lid

Key design decisions:

  • Primitive-based construction: Using MuJoCo geometric primitives (box, cylinder, sphere, capsule) ensures efficient collision detection while allowing expressive object shapes through composition.
  • Parametric randomization: Accepting ranges for all numeric parameters enables automatic domain randomization at object construction time.
  • Density ratios: Different parts of a composite can have different densities (e.g., metal head vs. wooden handle), producing realistic mass distributions and inertia properties.
  • Automatic bounding computation: Top offset, bottom offset, and horizontal radius are computed from the union of all component positions, eliminating manual specification.
  • Joint stripping on attachment: When sub-objects are added to a composite body, their original top-level joints are removed because the parent-child body relationship defines the kinematic structure. New joints can be explicitly added at connection points.
  • Namespace management: Each sub-object's elements are prefixed to prevent naming collisions within the composite.

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment