feat(teleop): hosted Go2 one-session module + robot commands, multicam, battery, LiveKit#2562
Draft
ruthwikdasyam wants to merge 15 commits into
Draft
feat(teleop): hosted Go2 one-session module + robot commands, multicam, battery, LiveKit#2562ruthwikdasyam wants to merge 15 commits into
ruthwikdasyam wants to merge 15 commits into
Conversation
…ailure; surface heartbeat errors
❌ 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 |
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.
Problem
feat/webrtc-transportshipped hosted teleop as a pure transport swap, but the Go2 driver and the hosted state plane lived in separate modules → separate processes. Because the broker provider is a per-process singleton andGO2Connectionisdedicated_worker=True, the state-plane module opened a second Cloudflare session the operator never saw — so robot→operator telemetry (battery, command-plane stats) silently never arrived. The transport path also had no robot-command channel (posture/actions), no multi-camera support, and only one SFU backend (Cloudflare).Solution
Consolidate the hosted control plane into the Go2 driver as one
dedicated_workermodule (Go2HostedConnection(GO2Connection)) so everything shares one CF session, then build the operator-facing features on top:dimos/robot/unitree/go2/hosted_connection.py. Folds state-plane + camera mux into the driver's process; replaces the standaloneTeleopStateBridge(removed).sport_cmdonstate_reliable, acked back): posture (StandReady combo / Sit / StandDown / RecoveryStand), actions (Hello / Stretch / FrontPounce / FrontJump), and an E-stop (Damp) out-of-band of the twist stream. Newsport_command(api_id)+ bidirectionalset_rage_mode(enable)on the connection.set_mode→ Normal / High (browser scale) + Rage (firmware FSM toggle).camera_select), graceful degrade to Go2-only. Newteleop-hosted-go2-multicamblueprint.get_battery_soc()+_on_lowstate(cachesbms_state.soc).cmd_ackonstate_reliable_back; restored inline pong answering (_maybe_answer_ping) so clock-sync RTT works on the transport path.LiveKitBrokerProvider+LiveKitTransport/LiveKitVideoTransportas a drop-in alternative SFU to Cloudflare; newteleop-hosted-go2-livekitblueprint.Removed the
teleop-state-bridgeandhosted-teleop-recorderblueprints (the latter only set a path; compose the genericteleop-recorderinstead).How to Test
Connect from the operator web client: drive (WASD → twist), fire posture/actions, watch live battery + command-plane telemetry in the HUD. For the two-camera path (needs a RealSense on the dimos host) use
teleop-hosted-go2-multicam; for the LiveKit SFU useteleop-hosted-go2-livekit.Contributor License Agreement