Controls
The controller.py provides an API to control the robot by emulating a PS4 controller, similar to this. Main difference is some keybinds are different, but it can also be called from code.
The UDP message
This is a breakdown of the dictionary's fields that is sent through UDPComms to the robot.
| Field | Value | Comments |
|---|---|---|
| lx | [-1,1] | Walk left or right |
| ly | [-1,1] | Walk front or backwards |
| rx | [-1,1] | Turn left or right (yaw) |
| ry | [-1,1] | Tilt up or down (pitch) |
| L2 | 0 | Nothing |
| R2 | 0 | Nothing |
| R1 | 1 or 0 | Toggle trot/rest |
| L1 | 1 or 0 | Toggle activation/deactivation |
| dpadx | [-1,1] | Move body up or down |
| dpady | [-1,1] | Roll left/right (roll) |
| square | 0 | Nothing |
| circle | 0 | Nothing |
| triangle | 0 | Nothing |
| x | 0 | Nothing |
| message_rate | 20 | Rate of which messages are sent |
Note: values [-1,1] means any values between -1 and 1 and values 1 or 0 are a toggle. This means that the first time 1 is sent, it will cause the value on the pupper to change. A 0 needs to be sent before another 1 will cause a toggle.
It is a good idea to use some sort of smoothing for lx, ly and rx to avoid abrupt stops.
Keybinds
If running the controller manually, these are the controls:
| Keybind | Function |
|---|---|
| space | Toggle trot/rest |
| v | Toggle activation |
| w/s | Move forward/back |
| a/d | Turn left/right |
| q/e | Move left/right |
| x | Stop any sort of movement |
Control sequence
Robot must first be activated, this will also trigger calibration if the pupper software was run with the --zero flag. Then it must be in trotting mode and only then can it be controlled with other functions.