Skip to content

Controllers

Teleoperation is driven by a gamepad through your browser's Gamepad API.

Connecting a gamepad

Plug in or pair a supported controller, then press any button so the browser registers it. The Controller Status panel shows the connection state, the controller's reported Mapping, and live axis and button activity. If nothing appears, try a different USB port or browser, and confirm the controller is supported.

Mapping basics

  • Standard-mapping controllers expose the usual sticks, triggers, and buttons in a consistent order.
  • Stick axes drive motion (forward/back and turn); triggers and buttons map to throttle and actions.
  • Non-standard controllers fall back to the raw axis order reported by the browser.

The exact stick and trigger mapping depends on your robot platform. The Controller Status panel shows live axis and button activity so you can confirm how your controller maps to motion before driving.

Tuning

Open Settings to tune how input is processed before it reaches the robot. Inputs are throttled and only meaningful changes are sent, to keep the control channel responsive.

Setting What it does Default
Target Rate (Hz) Maximum control updates sent per second (1–120) 60
Deadzone (0-0.5) Stick magnitude below this is treated as zero, removing drift 0.08
Smoothing Alpha (0-0.99) Exponential smoothing on axis values — higher is smoother but adds lag; 0 disables it 0.35

Tips:

  • Raise the Deadzone if the robot creeps when sticks are centered.
  • Add Smoothing for gentler motion, but keep it low to avoid sluggish response.
  • Lower the Target Rate on constrained networks to reduce traffic.

How input is sent

Gamepad samples travel over the WebRTC data channel. By default they are sent as a compact binary payload; a JSON format compatible with standard robot input messages is also available.