Skip to content

[DO NOT MERGE] Example of adding articulated cart into Arena obj library#547

Draft
xyao-nv wants to merge 1 commit intomainfrom
xyao/exp/contact_sensor_cart
Draft

[DO NOT MERGE] Example of adding articulated cart into Arena obj library#547
xyao-nv wants to merge 1 commit intomainfrom
xyao/exp/contact_sensor_cart

Conversation

@xyao-nv
Copy link
Copy Markdown
Collaborator

@xyao-nv xyao-nv commented Apr 7, 2026

Screenshot from 2026-04-07 14-35-33

Problem

The MobileShelvingCart USD asset has 9 rigid bodies (cart body + 4 swivels + 4 wheels) connected by joints, but was registered as ObjectType.RIGID with no ArticulationRootAPI baked into the USD. This caused two failures:

find_shallowest_rigid_body raised ValueError — found 9 rigid bodies at the same depth when expecting one
Isaac Lab's articulation initializer raised RuntimeError — no ArticulationRootAPI on the prim

Changes

New files (4)

isaaclab_arena/affordances/movable.py — Movable affordance for objects that can be pushed across the floor (carts, trolleys). Provides get_displacement(env) (XY Euclidean distance from initial position) and is_moved(env, threshold).

isaaclab_arena/utils/usd/spawners.py — Custom spawn function spawn_from_usd_and_add_articulation_root that wraps the standard USD spawner and calls schemas.define_articulation_root_properties to create the ArticulationRootAPI at spawn time for USDs that have joints but were authored without the API.

isaaclab_arena/tasks/move_object_task.pyMoveObjectTask extending TaskBase. Success is defined as XY displacement exceeding a configurable threshold. Includes MoveObjectTerminationsCfg with timeout + displacement-based success.

isaaclab_arena_environments/kitchen_move_object_environment.pyKitchenMoveObjectEnvironment example env with the kitchen background. Defaults to mobile_shelving_cart as the movable object. CLI args: --object, --embodiment, --displacement_threshold, --episode_length, --teleop_device.

Modified files (3)

isaaclab_arena/assets/object_library.pyMobileShelvingCart updated:

  • Added Movable to class bases and "movable" to tags
  • Set object_type = ObjectType.ARTICULATION
  • Added spawn_cfg_addon with custom func pointing to the new spawner + ArticulationRootPropertiesCfg
  • Added asset_cfg_addon with EMPTY_ARTICULATION_INIT_STATE_CFG
  • Added init passing displacement_threshold to Movable
  • Added Movable import at top of file

isaaclab_arena/tasks/terminations.py — Added object_displaced() termination function that measures XY displacement from initial position.

isaaclab_arena_environments/cli.py — Registered KitchenMoveObjectEnvironment in the ExampleEnvironments dict.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant