Feat: Phone teleoperation stack with Go2 example#1280
Merged
ruthwikdasyam merged 33 commits intodevfrom Feb 19, 2026
Merged
Conversation
Greptile SummaryAdds a phone teleoperation stack that lets users drive robots by tilting a smartphone. The architecture mirrors the existing Quest VR teleop: a mobile web app reads DeviceOrientation/DeviceMotion sensor data, encodes it as LCM messages over WebSocket, and a Deno bridge forwards to Python.
Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant Phone as Phone Browser
participant Deno as Deno Bridge (port 8444)
participant LCM as LCM Transport
participant PTM as PhoneTeleopModule
participant Robot as Robot (Go2)
Phone->>Phone: DeviceOrientation + DeviceMotion events
loop Every 20ms (50 Hz)
Phone->>Deno: WSS: TwistStamped (roll, pitch, yaw + gyro)
Phone->>Deno: WSS: Bool (button state)
Deno->>LCM: UDP: /phone/sensors (TwistStamped)
Deno->>LCM: UDP: /phone/button (Bool)
end
LCM->>PTM: Subscribe /phone/sensors
LCM->>PTM: Subscribe /phone/button
loop Control Loop (50 Hz)
PTM->>PTM: _handle_engage() (button hold → capture home)
PTM->>PTM: _get_output_twist() (delta from home × gains)
PTM->>PTM: _publish_msg() → cmd_vel: Out[Twist]
PTM->>Robot: Twist velocity command
end
Last reviewed commit: beb8fd1 |
spomichter
reviewed
Feb 17, 2026
| # ----------------------------------------------------------------------------- | ||
|
|
||
| # Simple phone teleop (mobile base axis filtering) | ||
| simple_phone_teleop = autoconnect( |
spomichter
previously requested changes
Feb 17, 2026
Contributor
Author
|
Latest Changes:
|
paul-nechifor
approved these changes
Feb 18, 2026
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.
Phone Teleoperation for DimOS
Adding teleoperation via smartphone motion sensors. Tilt the phone to drive.
This extends the teleop subsystem introduced in the Quest PR, reusing the same architecture (WebSocket -> Deno LCM bridge -> Python module) but adapted for phone DeviceOrientation/DeviceMotion APIs
Issue - Linear
closes DIM-393
closes DIM-535
Approach
Web layer
index.html) reads DeviceOrientation (roll, pitch, yaw) and DeviceMotion (gyro rates) at native sensor frequencyTwistStampedand button state asBool, sends over WebSocket at 50 HzPython module
PhoneTeleopModulesubscribes to/phone/sensors(TwistStamped) and/phone/button(Bool) LCM channelsTwistStampedvelocity commandsTeleopProtocol- same interface asQuestTeleopModule_handle_engage(),_should_publish(),_get_output_twist(),_publish_msg()Also in this PR (teleop modules' improvements)
Breaking Changes
None
How to Test
With a Unitree Go2:
ROBOT_IPenv var to the Go2's IPdimos run phone-go2-teleophttps://<host-ip>:8444and accept the self-signed certificate