Skip to content

[FEATURE] Add relative quaternion getter#2764

Open
Travor278 wants to merge 1 commit intoGenesis-Embodied-AI:mainfrom
Travor278:feature/get-quat-relative
Open

[FEATURE] Add relative quaternion getter#2764
Travor278 wants to merge 1 commit intoGenesis-Embodied-AI:mainfrom
Travor278:feature/get-quat-relative

Conversation

@Travor278
Copy link
Copy Markdown

@Travor278 Travor278 commented May 6, 2026

Description

Adds a keyword-only relative parameter to KinematicEntity.get_quat(). When relative=True, the method returns the base link orientation relative to the entity's initial quaternion. The default remains relative=False, so existing calls to get_quat() and get_quat(envs_idx) keep returning the same absolute quaternion as before.

The relative getter mirrors the existing set_quat(..., relative=True) behavior by using the same initial base-link quaternion as the reference frame. The returned quaternion satisfies abs_quat == transform_quat_by_quat(init_quat, delta).

Related Issue

Resolves #2730

Motivation and Context

set_quat() already supports applying quaternions relative to the initial orientation, which is useful for domain randomization and RL observation pipelines. Without the matching getter, users have to manually track the initial quaternion and repeat the inverse-composition math in their own scripts.

This change makes the API more symmetric, reduces boilerplate quaternion math for users, and keeps the absolute-orientation getter as the backwards-compatible default.

How Has This Been / Can This Be Tested?

The existing root-pose test now checks both the new relative path and the old absolute path:

  • get_quat(relative=True) returns the expected relative quaternion after both relative and absolute set_quat() calls.
  • get_quat(relative=False) matches get_quat(), preserving the previous default behavior.

Validated locally with Python 3.12.13:

D:\Dev\conda-envs\py312\python.exe -m pytest tests/test_rigid_physics.py::test_set_root_pose -q --numprocesses=0
D:\Dev\conda-envs\py312\python.exe -m pytest tests/test_utils.py -q

Results:

  • tests/test_rigid_physics.py::test_set_root_pose: 4 passed
  • tests/test_utils.py: 29 passed

Checklist:

  • I read the CONTRIBUTING document.
  • I followed the Submitting Code Changes section of CONTRIBUTING document.
  • I tagged the title correctly (including BUG FIX/FEATURE/MISC/BREAKING)
  • I updated the documentation accordingly or no change is needed.
  • I tested my changes and added instructions on how to test it for reviewers.
  • I have added tests to cover my changes.

@Travor278 Travor278 changed the title Add relative quaternion getter [FEATURE] Add relative quaternion getter May 6, 2026
@Travor278 Travor278 marked this pull request as ready for review May 6, 2026 17:53
@chatgpt-codex-connector
Copy link
Copy Markdown

💡 Codex Review

init_quat = torch.as_tensor(self.base_link.quat, dtype=abs_quat.dtype, device=abs_quat.device)

P1 Badge Compute relative quat from per-env initial pose

get_quat(relative=True) currently uses self.base_link.quat as the reference, but that is a single static quaternion from the primary morph. In heterogeneous simulations, each environment can have a different initial root quaternion via per-variant init_qpos (stored in solver qpos0), and set_quat(..., relative=True) composes against that per-env initial pose. This makes the new getter return wrong relative quaternions for non-primary variants and breaks the expected symmetry between relative set/get in those environments.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

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.

[Feature]: Add get_quat(..., relative=True)

1 participant