Skip to content

Support Quest teleop for G1 locomanipulation example#350

Open
linqianqian-work wants to merge 9 commits intomainfrom
qianl/quest_teleop
Open

Support Quest teleop for G1 locomanipulation example#350
linqianqian-work wants to merge 9 commits intomainfrom
qianl/quest_teleop

Conversation

@linqianqian-work
Copy link
Collaborator

@linqianqian-work linqianqian-work commented Jan 26, 2026

Summary

Support Quest3 for loco-manipulation teleop and record/replay

Detailed description

  • What was the reason for the change?
    Support Quest3 for loco-manipulation teleop for g1_pink example. This allows proper data recording for the locomanipulation.
  • What has been changed?
    Adds openxr + g1_pink teleop support
    Adds documention for locomanip data recording with Quest

@linqianqian-work linqianqian-work marked this pull request as ready for review March 5, 2026 17:10
@linqianqian-work linqianqian-work changed the title DRAFT: Support Quest teleop Support Quest teleop for G1 locomanipulation example Mar 5, 2026
@linqianqian-work linqianqian-work force-pushed the qianl/quest_teleop branch 2 times, most recently from df10ae8 to 1eb21e2 Compare March 6, 2026 08:02
* Fix x1 anchor pose test in isaaclab_arena/tests/test_xr_anchor_pose.py
  to adapt to the new XrCfg
* Fix G1DecoupledWBCPinkAction to no crash for zero norm quaternion
  inputs from the
isaaclab_arena/tests/test_device_and_retargeter_registry.py test
Copy link
Collaborator

@peterd-NV peterd-NV left a comment

Choose a reason for hiding this comment

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

This is a great addition, thanks for putting it all together!


# Expand to batch dimension
actions = action.repeat(env.num_envs, 1)
# Hack for G1 Pink WBC to transferm EE into robot base coordinates
Copy link
Collaborator

Choose a reason for hiding this comment

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

I wondering why this transformation from world frame to robot frame needs to happen in the action term versus being something done by the XR retargetters. Seems like it would make sense for the action from the teleop device to be already relative to the robot since the robot can be placed arbitrarily anywhere.

Totally fine to have this as it is right now but just curious if you know why XR designed the retargetter for G1 like that.

Copy link

@rwiltz rwiltz Mar 6, 2026

Choose a reason for hiding this comment

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

We can do world space to some frame of reference attached to some part of the robot, but then that would require that the retargeter be aware of where the robot is w.r.t. the teleop "world origin/base space" coordinate frame. I felt that would introduce additional shared state between the teleop stack and the application and require a tighter integration.

The other option is to consider every EE target a "relative pose" based on the initial or calibrated position of the teleoperator. We opted against this for the Lab integration because it requires a manual calibration step, or for the teleoperator to be aware of their initial starting position relative to the initial position of the robot. This is currently how real robot teleop works since they do not have a shared origin.

Once Isaac Teleop is integrated here, we can take advantage of this setup if you all prefer since it's also shared by the real robot stack (with clutching of the inputs, etc). Another option once Isaac Teleop is integrated, you can specify which coordinate system to output transforms in and apply a per frame offset. So if you pass in the robot base link to scene origin transform, you'll get all the poses relative to that link.

Copy link

Choose a reason for hiding this comment

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

FWIW, in lab this is done in an action term before passing the EE tasks to IK

Copy link
Collaborator Author

@linqianqian-work linqianqian-work Mar 7, 2026

Choose a reason for hiding this comment

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

I've tried including this in the action term process_action before passing the IK, but then the recorded action is in world coordinate, and during reply this is sensitive to the record/replay delta of the robot position and leads to gradual but noticable motion drift during replay when replaying multiple episodes. See the video in this thread

@rwiltz
Copy link

rwiltz commented Mar 6, 2026

XR/teleop parts LGTM. Thanks @linqianqian-work

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