Control Schemas
What Are Control Schemas?
A control schema defines how a gamepad's sticks and buttons map to a bot's functions. When a pilot connects their controller, the schema tells the system which axis controls throttle, which button fires the gripper, etc.
Each bot type comes with a standard schema. Owners can override it with a custom schema if their bot has unique controls.
Standard Layouts
| Bot Type | Left Stick | Right Stick | Key Buttons |
|---|---|---|---|
| Differential Drive | Throttle (Y) / Turn (X) | Camera Pan (X) / Tilt (Y) | A = Action, B = Lights, LB/RB = Speed |
| Mecanum Drive | Strafe (X) / Throttle (Y) | Rotate (X) / Camera Tilt (Y) | A/B = Actions, LB/RB = Speed |
| Robotic Arm | Base Rotate (X) / Shoulder (Y) | Wrist Rotate (X) / Elbow (Y) | LT = Gripper Open, RT = Gripper Close |
| Tracked Vehicle | Left Track (Y) | Right Track (Y) / Turret Pan (X) | A = Action, B = Lights |
| Aerial Drone | Throttle (Y) / Yaw (X) | Pitch (Y) / Roll (X) | A = Takeoff/Land, B = Return Home |
| Custom | Define your own via JSON editor | ||
Schema JSON Format
Control schemas are JSON objects with axes and buttons arrays:
{
"axes": [
{
"id": "left_x", // Which gamepad axis
"label": "Turn", // Display label for pilot
"type": "analog", // analog or digital
"deadzone": 0.1, // Ignore values below this
"inverted": false // Flip the axis direction
}
],
"buttons": [
{
"id": "a", // Button identifier
"label": "Action", // Display label for pilot
"gamepad_index": 0 // Standard Gamepad API index
}
]
}
Gamepad Button Indices (Standard Gamepad API)
| Index | Xbox | PlayStation |
|---|---|---|
| 0 | A | ✕ |
| 1 | B | ○ |
| 2 | X | □ |
| 3 | Y | △ |
| 4 | LB | L1 |
| 5 | RB | R1 |
| 6 | LT | L2 |
| 7 | RT | R2 |
Custom Schemas
If your bot has a unique control scheme (e.g., a hybrid arm-on-wheels), select "Custom" as the bot type and paste your schema JSON in the bot editor. Your custom schema overrides the bot type's default.