Wheels
Wheels
Your robot’s wheels are its only connection to the ground. The type of wheels you choose will determine how well your robot accelerates, pushes, turns, and follows its autonomous path.
Picking the wrong wheel can cause your robot to slide around when bumped, struggle to turn smoothly, or drift off course during an autonomous routine. Let’s look at the three main wheel types.
Why does this matter?
Different game challenges call for different wheel strategies. A game that rewards powerful pushing needs different wheels than a game where you need to quickly dodge and reposition.
Wheel Types
Traction Wheels: These are solid rubber or silicone-covered wheels — similar to a car tire. They grip the ground extremely well in all directions. They are great for pushing and resisting being pushed sideways, but they make turning difficult because they fight sideways movement.
Omni Wheels: These wheels have small rollers built around their outer edge, pointing sideways. This means the wheel rolls freely in the forward/backward direction AND can also slide sideways with almost no resistance. Omni wheels make turning very smooth and fast, which is why many robots use them on the back or as secondary wheels.
Mecanum Wheels: These are the most advanced type. Their rollers are mounted at a 45-degree angle. When all four mecanum wheels spin in the right combinations, the angled forces add together and push the robot sideways — even though the wheels themselves only spin forward or backward! This is the magic behind the Mecanum drivetrain.
Comparison Table
| Wheel Type | Forward Traction | Sideways Resistance | Turning | Strafing (Moving Sideways) |
|---|---|---|---|---|
| Traction | Excellent | Extreme | Poor | No |
| Omni | Excellent | Zero | Excellent | No |
| Mecanum | Medium | Medium | Good | Yes |
Code for Mecanum Wheels
Mecanum wheels need special math in your code to work correctly. Each of the four wheels gets a different power level depending on how you want to move. Below is an example:
void userMecanumControl() {
while (true) {
// 1. Capture raw analog joystick inputs (-100 to +100 percent)
int forwardVector = Controller1.Axis3.position(); // Forward/Backward
int strafeVector = Controller1.Axis4.position(); // Sideways Strafing
int turnVector = Controller1.Axis1.position(); // Rotational Heading
// 2. Vector Addition: Combine components uniquely for all four corner wheels
double frontLeftPower = forwardVector + strafeVector + turnVector;
double backLeftPower = forwardVector - strafeVector + turnVector;
double frontRightPower = forwardVector - strafeVector - turnVector;
double backRightPower = forwardVector + strafeVector - turnVector;
// 3. Hardware Execution: Command independent smart motors
FrontLeftMotor.spin(forward, frontLeftPower, percent);
BackLeftMotor.spin(forward, backLeftPower, percent);
FrontRightMotor.spin(forward, frontRightPower, percent);
BackRightMotor.spin(forward, backRightPower, percent);
// Fixed sampling cycle to stabilize CPU thread processing
wait(20, msec);
}
}Potential Problems: Wheel Slip
Omni and mecanum wheels slide sideways easily — which is great for driving, but causes a problem when tracking position. If your robot gets bumped sideways, the drive motors do not spin, so the Motor Encoders do not register any movement. But the robot moved! This causes your position tracking to be wrong.
To fix this, advanced teams use dead wheels — separate unpowered wheels that only exist to track movement. Because they have no motor, they only spin when the robot actually rolls across the ground. See the Odometry page to learn more.