Skip to content

Support Embodiment Placement for Droid/Franka - #954

Merged
qianl-nv merged 6 commits into
mainfrom
qianl/feature/cache-stand-height-usd
Jul 28, 2026
Merged

Support Embodiment Placement for Droid/Franka#954
qianl-nv merged 6 commits into
mainfrom
qianl/feature/cache-stand-height-usd

Conversation

@qianl-nv

@qianl-nv qianl-nv commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Local on-stand USD compose for Franka and Droid to support placement with stand/camera

Detailed description

  • Stand and Droid external cameras were detaching on relation reset when spawn and reset layouts differed; parenting them under panda_link0 lets a single write_root_pose_to_sim move the full assembly in Fabric/Kit.
  • Franka and Droid now compose cached robot+stand USDs locally (robot_on_stand_utils, embodiment-specific mount helpers) instead of relying on Nucleus combined assets or a separate Droid stand scene entity.
  • Remove has_unplaced_auxiliary_prims API since the only use case Droid has been updated to a single USD.
  • Added test_robot_on_stand_utils.py and merge test_droid_stand_height.py into it.

Before:
image

After:
image

@qianl-nv qianl-nv left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self review 1

Comment thread isaaclab_arena/embodiments/droid/droid_stand_usd.py Outdated
Comment thread isaaclab_arena/embodiments/droid/droid_stand_usd.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/tests/test_on_stand_root_link_follow.py Outdated
@zhx06
zhx06 force-pushed the zxiao/feature/robo_placement_prototype branch from aa6d4e5 to 1504896 Compare July 27, 2026 15:54
@qianl-nv
qianl-nv force-pushed the qianl/feature/cache-stand-height-usd branch 2 times, most recently from dd9da4a to b7bc268 Compare July 27, 2026 16:26

@qianl-nv qianl-nv left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self review 2

Comment thread isaaclab_arena/embodiments/franka/franka.py
Comment thread isaaclab_arena/tests/test_embodiment_collision_mesh.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
@qianl-nv
qianl-nv force-pushed the qianl/feature/cache-stand-height-usd branch from b7bc268 to 828da7a Compare July 27, 2026 16:39
@qianl-nv
qianl-nv changed the base branch from zxiao/feature/robo_placement_prototype to main July 27, 2026 16:40
@qianl-nv
qianl-nv marked this pull request as ready for review July 27, 2026 16:40
@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR locally composes Franka and Droid robot-and-stand USD assemblies.

  • Parents stands and Droid external cameras beneath panda_link0 so root-pose writes move the complete assembly.
  • Replaces Droid's separate stand entity and removes the obsolete auxiliary-prim placement guard API.
  • Adds composition, stand-height, hierarchy, camera, and root-write tests.

Confidence Score: 3/5

The PR should not merge until composed USD cache paths uniquely represent the requested stand height.

Distinct supported stand-height values can resolve to one rounded filename, allowing a later embodiment construction to overwrite the USD referenced by an earlier configuration and produce order-dependent stand geometry.

Files Needing Attention: isaaclab_arena/embodiments/robot_on_stand_utils.py

Important Files Changed

Filename Overview
isaaclab_arena/embodiments/robot_on_stand_utils.py Adds shared USD composition and caching, but rounded cache filenames allow distinct stand-height configurations to overwrite one another.
isaaclab_arena/embodiments/droid/droid.py Replaces the separate Droid stand with a composed assembly and reparents external cameras under the robot base link.
isaaclab_arena/embodiments/franka/franka.py Switches both Franka control variants to locally composed robot-on-stand USDs.
isaaclab_arena/environments/relation_solver_interface.py Removes the auxiliary-prim guard after Droid's stand becomes part of the robot assembly.
isaaclab_arena/tests/test_robot_on_stand_utils.py Adds simulation tests for composition, stand dimensions, hierarchy, cameras, and root-pose movement.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[Embodiment configuration] --> B[compose_on_stand_usd]
  B --> C[Resolve robot and stand USDs]
  C --> D[Mount stand beneath panda_link0]
  D --> E[Write composed USD to local cache]
  E --> F[ArticulationCfg spawn path]
  F --> G[Root-pose reset moves robot, stand, and cameras]
Loading

Reviews (1): Last reviewed commit: "Add shared on-stand USD compose for Droi..." | Re-trigger Greptile

Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py
Comment thread isaaclab_arena/embodiments/droid/droid.py
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/droid/droid.py Outdated

@qianl-nv qianl-nv left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed all review comments

Comment thread isaaclab_arena/embodiments/droid/droid.py Outdated
Comment thread isaaclab_arena/embodiments/droid/droid.py
Comment thread isaaclab_arena/embodiments/franka/franka.py
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/embodiments/robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py Outdated
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py
Comment thread isaaclab_arena/tests/test_robot_on_stand_utils.py Outdated
qianl-nv added 5 commits July 28, 2026 11:10
Compose robot+stand locally under panda_link0 so relation placement moves
the full assembly via write_root_pose_to_sim. Droid keeps configurable
stand_height_m; Franka uses the fixed legacy stand height.

Signed-off-by: Qian Lin <qianl@nvidia.com>
Explain how initial_pose and stand_height_m interact when placing the robot on the floor.

Signed-off-by: Qian Lin <qianl@nvidia.com>
Move robot USD/paths and default stand height into embodiment-specific specs so compose helpers stay generic and Franka cfg copies stay at call sites.

Signed-off-by: Qian Lin <qianl@nvidia.com>
Catch Sdf.Layer.Save() returning False so a failed write does not get os.replace'd into the cache.

Signed-off-by: Qian Lin <qianl@nvidia.com>
Drop the Franka stand-under-link0 sim test covered by Droid runtime checks, and rely on run_simulation_app_function headless defaults.

Signed-off-by: Qian Lin <qianl@nvidia.com>
@qianl-nv
qianl-nv force-pushed the qianl/feature/cache-stand-height-usd branch from 828da7a to c1d726d Compare July 28, 2026 03:12

@zhx06 zhx06 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@qianl-nv
qianl-nv enabled auto-merge (squash) July 28, 2026 06:38
@qianl-nv
qianl-nv merged commit 110c961 into main Jul 28, 2026
28 of 30 checks passed
@qianl-nv
qianl-nv deleted the qianl/feature/cache-stand-height-usd branch July 28, 2026 07:23
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.

3 participants