Mobile gamepad
Driving an environment from a phone
A full controller as a touch surface: two analog sticks, a d-pad, four face buttons, bumpers and pressure triggers. Every control captures its own pointer, so a thumb sliding off a button still releases it — the failure that makes most on-screen pads unusable. Try it with a mouse here; it is built for thumbs in landscape.
workspace/human/gamepad/mobile-gamepad.tsxNo target: the pad still works, nothing is being driven{
"buttons": [],
"axes": {},
"triggers": {}
}onInput fires on every press, release, stick move and trigger changePad primitives
The parts, on their own
Each control is usable outside the pad — a single stick for a two-axis actuator, a pressure trigger for a throttle, a labelled button for a discrete action. Accents are identity, never state: cyan for motion, violet for surfaces, teal for system, orange for pressure.
Thumb anywhere in the pad takes the sticksticky: holds position on release, for a trim axisPress high for light, low for fullMomentary: they report press and release, not clicksTeleop console
The pad in context
What an operator actually sees on a phone: who is driving above, the controls below. Taking control here is the same act the takeover bar records, so the steps a human drove stay separable from the ones the policy drove.
Sized to a phone held sideways