Symptom#
Commanded straight, the robot pulls left or right, or feels sluggish and draws too much current.
Root cause 1: Mismatched feedforward / open-loop scaling#
If left and right (or four swerve) drive motors have slightly different kV, the same voltage produces different speeds and the robot curves. The fix is per-side/per-module SysId characterization so each gets its own kS/kV/kA, then run closed-loop velocity control instead of raw duty cycle. This is the textbook cause of a tank or swerve robot veering.
Root cause 2: Toe / non-square modules or wheels#
In swerve, if modules aren't mounted parallel and square, the wheels fight each other (scrub), wasting current and curving the path. In tank, bent frame rails or misaligned wheels do the same. Check with a straightedge across module mounts; never hand-drill module holes, use the machined bellypan pattern.
Root cause 3: Uneven friction or preload#
A pinched bearing, over-tight chain, or a dragging belt on one side adds friction there. Spin each wheel by hand with the robot on blocks, every wheel should coast similarly. A notably stiff wheel is your culprit.
Root cause 4: Worn or mismatched tread#
Different tread wear left/right changes effective wheel diameter and grip. Replace tread in matched sets.
Root cause 5: Encoder / sign errors#
A flipped encoder direction or a wrong conversion factor makes closed-loop control fight itself. Push the robot by hand and watch reported velocities; signs must match motion.
The gearbox-grenade warning#
A robot cannot instantly go from full speed to a dead stop or slam direction without damaging gearbox teeth or slipping wheels. Add slew-rate limiting (e.g. SlewRateLimiter) and current limits so you don't shear gears or pop a breaker on every direction change.
Diagnostic workflow#
- Robot on blocks. Spin every wheel by hand, compare coast.
- Drive +X slowly off the ground, confirm all wheels point/spin forward with correct reported velocity signs.
- Re-run SysId per side/module; apply distinct gains.
- Drive on the floor closed-loop; if it still veers, recheck module squareness and tread wear.
- Only then blame code.
the part worth keeping
Key takeaways
- Veering is usually mismatched feedforward; characterize each side/module with SysId and run closed-loop velocity, not raw duty cycle.
- Non-square swerve modules or bent tank rails cause scrub: check squareness off the machined bellypan, never hand-drilled mounts.
- Spin every wheel by hand on blocks to find pinched bearings/over-tight chain, and add slew limiting + current limits to spare the gearbox.
Mechanical, Build & PneumaticsCommon Mistakes & Troubleshootinglesson 2 of 5
Keep going
Take the quiz+10 XP with an accountMore in Common Mistakes & Troubleshooting
where this came from
Sources and corrections
This lesson is AI-assisted: drafted from primary sources, then reviewed and edited by hand. Errors still get through. When one is reported we fix it and write down what changed, in public, in the corrections log.
sources and further reading
- docs.wpilib.orgWPILib System Identification (SysId)
- docs.revrobotics.comREV Frame & Drivetrain Build Guides
- docs.wcproducts.comWCP Drive Gearboxes
clipped to this lesson
Articles that go further on this
The lesson gets you through the topic. These go wider on it, and they read in one sitting.
- 18 min readFRC Wheels and Traction: Tread, Durometer, and Choosing the Right WheelHow to choose FRC drivetrain wheels: coefficient of friction, Shore A durometer, tread compounds, Colson vs pneumatic vs traction, diameter, and pushing power./blogread it
- 13 min readFRC Swerve Module Offsets: Calibration & Backwards WheelsZero your FRC swerve module offsets correctly, and fix wheels that spin backwards, modules that fight each other, and field-relative drive that feels rotated./blogread it
- 6 min readSwerve Drive Explained: How FRC's Most Popular Drivetrain WorksA clear, beginner-friendly explanation of swerve drive in FRC — how the modules work, the math behind it, COTS options, and whether your team should run it./blogread it
answer sheet
Lesson quiz
All 3 right completes the lesson. Miss one and only that question comes back, anything you already answered correctly stays banked.
0 of 3 answered
01A tank-drive robot veers to one side at full throttle even with both joysticks centered and equal. With the robot on blocks, which root cause should you check first?
02Left and right drive motors have slightly different kV, so the same voltage produces different speeds and the robot curves. What is the textbook fix for this veering?
03A driver slams the drivetrain from full speed straight into a full-speed reversal every cycle. What should you do to protect the hardware?
Answer every question to submit.
All 47 lessons in Mechanical, Build & Pneumaticsopenclose
01 / prerequisites
02 / drivetrains
03 / power-transmission
04 / structure-materials-fasteners
05 / mechanisms-fabrication-assembly
06 / pneumatics-fundamentals
07 / pneumatic-components
08 / build-wire-program
09 / safety-rules-testing
10 / worked-examples-mini-projects
- Not read yet:Mini-Project 1: A Single-Jointed Arm From Math to Motion
- Not read yet:Mini-Project 2: A Two-Stage Cascade Elevator
- Not read yet:Mini-Project 3: A Velocity-Controlled Flywheel Shooter
- Not read yet:Mini-Project 4: A Pivoting Roller Intake
- Not read yet:Mini-Project 5: Integrating a COTS Swerve Module
11 / common-mistakes-troubleshooting
- Not read yet:Pneumatics Won't Fire: A Full Diagnostic Tree
- Not read yet:The Robot Won't Drive Straight (and Other Drivetrain Sins)
- Not read yet:Gearboxes That Grenade and Fasteners That Vibrate Loose
- Not read yet:Closed-Loop Mechanisms That Oscillate, Sag, or Stall
- Not read yet:Field-Ready Reliability: Inspection, Spares, and the Pit Checklist
12 / advanced-techniques-case-studies
- Not read yet:Characterizing Any Mechanism with SysId
- Not read yet:Simulation-Driven Design with WPILib Physics Models
- Not read yet:Motion Profiling and Superstructure Coordination
- Not read yet:Designing for Weight, Stiffness, and Manufacturability
- Not read yet:Case Studies: Learning From Open Alliance Robots