Skip to content

Add configurable stand_height to Droid embodiment#911

Open
xyao-nv wants to merge 5 commits into
mainfrom
xyao/feature/droid-separate-stand-robot-scale
Open

Add configurable stand_height to Droid embodiment#911
xyao-nv wants to merge 5 commits into
mainfrom
xyao/feature/droid-separate-stand-robot-scale

Conversation

@xyao-nv

@xyao-nv xyao-nv commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add configurable stand_height to Droid embodiment.

Detailed description

  • The Droid base stand had a hardcoded size and no way to resize it independently of the robot; users needed to adjust stand height/footprint without altering the robot articulation.
  • Only stand_height is being configured thru inputs params of Embodiment class. Surfaced it in one robolab env.
  • It also changes the base pose z values automatically.

3.0
image
1.7
image

@xyao-nv xyao-nv force-pushed the xyao/feature/droid-separate-stand-robot-scale branch from d778302 to cfdcc94 Compare July 14, 2026 22:34
@xyao-nv xyao-nv marked this pull request as ready for review July 14, 2026 22:40
@greptile-apps

greptile-apps Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR makes the Droid stand scale configurable. The main changes are:

  • Adds a shared default stand-scale constant.
  • Threads stand_scale through Droid embodiment constructors.
  • Applies the value to the stand spawn config only.
  • Sets the default value in one robolab environment YAML.
  • Adds tests for default, direct override, and registry-style inputs.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
isaaclab_arena/embodiments/droid/droid.py Adds stand_scale support while keeping the existing default scale and leaving robot scale unchanged.
isaaclab_arena/tests/test_droid_stand_scale.py Adds coverage for default stand scale, custom stand scale, unchanged robot scale, and registry-style list input.
isaaclab_arena_environments/robolab/bagel_plate_banana_bowl_linked.yaml Passes the default Droid stand scale through the environment embodiment params.

Reviews (1): Last reviewed commit: "Add configurable stand_scale to Droid em..." | Re-trigger Greptile

registry_name: droid_abs_joint_pos
params: {}
params:
stand_scale: [1.2, 1.2, 1.7]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 This override equals the default

[1.2, 1.2, 1.7] is exactly _DEFAULT_STAND_SCALE, so this env behaves the same as it did with params: {} — the line is a no-op. Was the intent just to surface the knob? If so a short comment might read more clearly; otherwise this could stay {} and the feature is still available to anyone who wants a non-default stand.

@arena-review-bot

Copy link
Copy Markdown
Contributor

🤖 Isaac Lab-Arena Review Bot

Summary

Adds a stand_scale constructor parameter to the Droid embodiments so the base stand can be resized independently of the robot articulation, with the previous hardcoded (1.2, 1.2, 1.7) promoted to a shared _DEFAULT_STAND_SCALE constant. The change is small and well-scoped: the knob threads cleanly through the base class into scene_config.stand.spawn.scale, the stand stays inside the embodiment's own DroidSceneCfg (no layer crossing), and the robot articulation is left at native scale. Nice touch adding a regression test that also covers the YAML/list path.

Findings

🔵 Improvement — bagel_plate_banana_bowl_linked.yaml:11 — the surfaced stand_scale: [1.2, 1.2, 1.7] is exactly the default, so it's a no-op. If the goal is to advertise the knob, a comment may be clearer; otherwise params: {} is equivalent. (Left inline.)

Test Coverage

test_droid_stand_scale.py uses the inner/outer run_simulation_app_function pattern with deferred imports and asserts three things: the default applies, an override reaches the stand spawn while the robot stays at native scale, and the YAML list-valued path works via the registry. It runs in persistent (same-process) mode like test_galbot_embodiment.py, so no with_cameras/with_subprocess marker is needed — Phase 1 is correct. Copyright year is a single 2026, correct for a new file. Coverage is appropriate for the change.

Verdict

Ship it — one optional nit on the no-op YAML override.

@alexmillane alexmillane 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.

Looks good.

I have one comment about renaming the scale to make the purpose clear to a user.

initial_joint_pose: list[float] | None = None,
concatenate_observation_terms: bool = False,
arm_mode: ArmMode | None = None,
stand_scale: tuple[float, float, float] = _DEFAULT_STAND_SCALE,

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.

What's the goal of the scale? I'm thinking that the goal is likely to be able to adjust the height? Am I correct there, the PR description doesn't mention the intention here.

I'm wondering if the goal is to be able to adjust the robot height, if we should expose that in another way. I.e. add a constructor variable stand_height. Right now the user has to know that the stand scale can be used to affect the height. They have to know that the stand stretches around the robot base (rather than for example scaling around the stand's center which would cause collisions).

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.

yeah it's for adjusting the height. taking your suggestion. thx

@xyao-nv xyao-nv changed the title Add configurable stand_scale to Droid embodiment Add configurable stand_height to Droid embodiment Jul 15, 2026
@xyao-nv xyao-nv force-pushed the xyao/feature/droid-separate-stand-robot-scale branch from 41a314d to 9b2f18b Compare July 15, 2026 22:56

@qianl-nv qianl-nv 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.

Thanks for the change, a few nits.

initial_joint_pose: list[float] | None = None,
concatenate_observation_terms: bool = False,
arm_mode: ArmMode | None = None,
stand_height: float = _DEFAULT_STAND_HEIGHT_SCALE,

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.

stand_height sounds like a metric value by name but is actually a scale.
I'd prefer to update the implementation to actually treat it as an absolute height in meter. the default 1.7 scale is a bit arbitrary anyway

_FALLBACK_STAND_UNIT_HEIGHT_M: float = 0.795


@functools.cache

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.

move this private helper to the back of the file.
nicer to see class DroidEmbodimentBase at the top...

_STAND_FOOTPRINT_SCALE_XY: tuple[float, float] = (1.2, 1.2)
_DEFAULT_STAND_HEIGHT_SCALE: float = 1.7

# The stand's top is pinned at the robot base and it extends downward to the floor, so scaling its

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.

these docstring should move to line 107.

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.

4 participants