feat(g1): stack Quest teleop on shared dual-arm IK - #3436
Draft
TomCC7 wants to merge 7 commits into
Draft
Conversation
❌ 3 Tests Failed:
View the top 3 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
TomCC7
force-pushed
the
pim/feat/g1-quest-teleop-stacked
branch
from
August 11, 2026 03:00
afb9673 to
7c38ec0
Compare
14-DOF pinocchio IK over both arms as a g1_dual_arm_ik coordinator task. Wrist targets arrive on coordinator_cartesian_command with frame_id "<task>/left|right"; the card binds the port ungated (direct) and the handler drops foreign task names, since by_task_name's exact match cannot address sub-targets. Engage is both index triggers via the teleop_buttons broadcast; disengage holds the last pose. set_estop drops the held pose so a coordinator E-STOP leaves nothing commanding the arms, and reset_runtime_state clears solver state after a sim respawn.
Head-relative absolute retargeting: each controller pose relative to the headset, yaw-normalized and workspace-scaled, becomes a wrist pose relative to the waist; thumbsticks map to cmd_vel. The web client now streams the viewer pose (frame_id "head") and pads Joy buttons to the layout from_joy requires; the base quest module ignores non-controller poses instead of letting them kill the websocket.
The groot WBC stack plus quest teleop, head RealSense, and a memory2-backed episode recorder (B toggles an episode, Y discards). Camera frames ride SHM, not LCM (raw multicast starved the Orin control loops), and camera/quest/recorder run as dedicated workers so per-frame numpy/JPEG work never shares a GIL with the coordinator or the DDS connection. Command/status streams are declared poseless so recording doesn't warn per message.
Mypy: the ControlTask protocol declares reactivate: bool | None; the dual-arm task has no arming concept, so it accepts and ignores it.
TomCC7
force-pushed
the
pim/feat/g1-quest-teleop-stacked
branch
from
August 11, 2026 03:07
1b1e9dc to
82c7e51
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contribution path
Problem
The G1 Quest teleop branch duplicated the dual-arm IK task, relative-pose handling, and web UI that are now provided by the shared dual-arm teleop work. Keeping both implementations would leave two competing control paths and two UI protocols.
Solution
teleop_iktask and Pink pose-target solver.MovementManager.How to Test
dimos --simulation mujoco --scene-package office run unitree-g1-teleopValidation:
AI assistance
Codex with GPT-5 implemented the refactor and tests under human direction.
Checklist