Interface Manager (All-In-One)#
Dynamically switch between keyboard, gamepad, and ZMQ input interfaces at runtime using hotkeys (--input-type manager). The manager owns all interfaces simultaneously and delegates to the currently active one. You can switch at any time without restarting the program.
Prerequisites
Complete the Quick Start to have the sim2sim loop running.
Emergency Stop
Press O at any time to immediately stop control and exit — this works regardless of which interface is active, including when the gamepad is selected. Always keep a hand near the keyboard ready to press O.
Launch#
Sim2Sim (MuJoCo):
# Terminal 1 — MuJoCo simulator (from repo root)
source .venv_sim/bin/activate
python gear_sonic/scripts/run_sim_loop.py
# Terminal 2 — C++ deployment (from gear_sonic_deploy/)
bash deploy.sh sim --input-type manager
Real Robot:
# From gear_sonic_deploy/
bash deploy.sh real --input-type manager
If you plan to use the ZMQ interface, add ZMQ flags:
bash deploy.sh sim --input-type manager \
--zmq-host <publisher-ip> \
--zmq-port 5556 \
--zmq-topic pose
Step-by-Step#
The manager starts in Keyboard mode by default.
Press
]to start the control system (keyboard mode). Use the robot as described in the Keyboard tutorial.To switch to gamepad, press
Shift+2(types@). The terminal printsSwitched to: GAMEPAD (safety reset triggered). The robot returns to reference motion at frame 0 and the planner is disabled.Use the gamepad controls as described in the Gamepad tutorial.
To switch to ZMQ streaming, press
Shift+3(types#). A safety reset is triggered and the terminal printsSwitched to: ZMQ. Use the ZMQ controls as described in the ZMQ tutorial.To switch back to keyboard at any time, press
Shift+1(types!).Press
Oto stop control and exit from any interface.
Switching Interfaces#
Hotkey |
Interface |
Notes |
|---|---|---|
Shift+1 ( |
Keyboard |
Default. Full keyboard controls (Normal + Planner modes). See Keyboard tutorial. |
Shift+2 ( |
Gamepad |
Unitree wireless gamepad. See Gamepad tutorial. |
Shift+3 ( |
ZMQ |
ZMQ streaming (requires |
Tip
A ROS2 interface is also available via Shift+4 ($) when built with ROS2 support. It requires the planner to be loaded and falls back to Keyboard otherwise. The ROS2 interface is provided as a reference implementation for building custom ROS2-based control pipelines and may not receive the same level of updates as the other interfaces.
What Happens When You Switch#
Each switch triggers a safety reset on all managed interfaces (not just the one you’re switching to). This:
Disables the planner and returns to reference motion at frame 0
Resets heading and movement states
Disables ZMQ streaming (if it was active)
Prevents control discontinuities from stale state in the previous interface
The safety reset ensures you always start from a clean state after switching, regardless of what the previous interface was doing.
Note
All four interfaces are created at startup and stay alive across switches. Their internal state (e.g., gamepad mode, ZMQ connection) is preserved — only the planner/motion state is reset for safety. This means you don’t need to re-establish the ZMQ connection or re-pair the gamepad when switching back.
Global Controls#
These controls work at the manager level, regardless of which interface is active. They are intercepted by the manager before being passed to the active interface.
Emergency Stop#
Key |
Action |
|---|---|
O / o |
Immediate emergency stop — works even when gamepad or ZMQ is the active interface |
Compliance Controls#
These adjust hand compliance and grasp parameters globally. They are especially useful during teleoperation (ZMQ / ROS2) where the robot’s hands interact with objects.
Key |
Action |
|---|---|
G / H |
Increase / Decrease left hand compliance by 0.1 |
B / V |
Increase / Decrease right hand compliance by 0.1 |
X / C |
Increase / Decrease max hand close ratio by 0.1 |
Note
Compliance controls are global — they affect the robot’s hands no matter which interface is active. This lets you adjust compliance from the keyboard even while the gamepad or ZMQ is controlling the robot’s movement.
Interface-Specific Controls#
Once an interface is active, all its normal controls work as documented in its own tutorial:
Keyboard (
!): All keys from the Keyboard tutorial — T/R/P/N for motions, ENTER for planner, WASD for movement, etc.Gamepad (
@): All buttons from the Gamepad tutorial — Start, A/B, L1/R1, analog sticks, etc.ZMQ (
#): ENTER to toggle streaming, T/P/N/R for reference motions when not streaming. See the ZMQ tutorial.
The only exceptions are:
Ois always intercepted by the manager for emergency stop (not passed to the active interface).G/H/B/V/X/Care always intercepted for compliance control.!/@ /#/$are always intercepted for interface switching.