Gamepad controls
Last updated
The mapping is the prototype’s, so muscle memory carries over.
The sticks have three modes
What the two sticks do depends on the mode, switched with Y and B:
| Left stick | Right stick | |
|---|---|---|
| Default (drive) | Forward/back, strafe | Turn |
| Y / triangle — head | Head yaw and pitch | Neck pitch, head roll |
| B / circle — body pose | Up and crouch | Pitch and roll |
Head mode holds the body still; body-pose mode leans and crouches the standing robot.
Buttons
| Control | Does |
|---|---|
| Start | Toggle the policy — nothing moves until it is on |
| Y / triangle | Head mode |
| B / circle | Body-pose mode |
| A / cross | Ground pick (crouch, on rollers) |
| X / square | Roulade — one forward roll; hold to chain |
| LB / RB | Left / right kick |
| DPad-Down | Sit ↔ stand |
| RT / LT | Mouth (either trigger) — RT also quacks, LT rides the “wheee” |
| DPad-Up, held 3 s | Switch drive mode, walk ⇄ roller |
| Select, held 2 s | Sit down, then power off |
There is no stop button
This is a design decision, not an omission.
Release the sticks and the robot stands. If padd dies, robotd’s deadman stops it. A dedicated stop button would not help in the second case — with the process gone, the button press has nowhere to go either.
walk and roller
After fitting or removing the wheels, hold DPad-Up for three seconds: the robot quacks once for walking or twice for roller, returns to its home pose, loads that mode’s policies there, and drives again. A few seconds, torque on throughout, no restart.
It is a hold rather than a press because D-pad up is easy to lean on while driving.
robotd.toml is not touched, so a reboot comes back in the configured mode. Make it stick with sudo robotctl configure and [policy] mode.
What changes on rollers
On a robot configured as roller (mode = "roller"), the sticks take the roller shaping automatically — asymmetric push and brake, no strafe — and A becomes the crouch.
The other skills ride along: sit, kicks and the roulade work on wheels too.
Driving with non-default limits
Stop the service first, or two processes fight over the sticks:
sudo systemctl stop padd
sudo -u padd /opt/robot/daemon/current/bin/padd --max-linear 0.25