Problems driving straight.

Hello team 5261 here. We drive rotate fine and can get by going forward and backwards but whenever we try to go faster like down a hall it seems the robot starts to turn left. I think this happens because one motor is faster than all the other. If someone could please tell me what the problem is or how to slow down just one specific motor.


If you try moving the wheels by hand, does one side seem more difficult to move than another? Does one side of the drive sound differently to another? If you have more than one motor per side, make sure all motors are actually running (try one motor plugged in at a time and see if you notice anything). Without sensors to read it could be difficult to tell, though sound is usually a decent indicator

Check that all your motor controllers are properly calibrated. Check that you are using the same motor controllers on all motors in the drivetrain.

If you are using chains/belts, check tension, perhaps one is tighter than the other and causing issues. Did you lubricate gears? Is anything potentially bent in a weird way? Is your drivetrain square (that is are both sides parallel)?

Chances are the problem is a mechanical or electrical one. It is not impossible but most likely not a software problem, unless you are trying something fancy coding-wise.

What are you using for a controller?

It could be mechanical as others have indicated (chain being tighter one one side, one sides gearbox not being assembled as smoothly as the other, etc), but it could also be electrical - if one of the motor calibrations are way off for some reason, that could be an indicator. Read up in the user guides of the motor controller for how to calibrate.

Also are you using arcade drive (pushing forward on one joystick makes both sides go forward?) Otherwise it might be user input making it veer off a little bit.

Not only could one motor be running slower, but one motor could actually be running REVERSE relative to the others. We’ve done this before, so check your program that each rotates the same direction as the others. You may need to do some dis-assembly to make sure each motor is running the right way.

Welcome to Chief Delphi

There is already a thread where someone is having a similar problem. You may find some useful information there.

Is the hallway floor slick? try it on carpeting… :wink:

If you are using dead axles (round bearings supported by bolts) make sure the bolts are a little loose. Like others have said, take the system apart and test each component separately and then as it is reassembled.

Is your robot’s CoG centered side to side? If one side of your bot is heaver it may increase friction and cause you to turn in that direction.

As others have said, if your frame is not square, your robot won’t track straight. If the bearings on one of your motors or wheels has higher friction, you bot won’t go straight.

If its not mechanical, you could try using a ‘Y’ cable so each motor controller gets the same PWM signal.

You can program a button to pass both sides of the robot the same value or use a ‘Y’ cable to distribute the same PWM signal to the right and left sides of the bot. If the bot goes straight with this set up its likely your joystick controller is the issue.

The key to finding the problem, is to be able to rule out each component in a systematic fashion. Let us know what you try and the results.


This should be shouted from the rooftops.

Not near the bot at the moment but will try all those when I get the chnace later today.

An Xbox afterglow controller.

We’re using tank drive for mecanum. This isn’t for the 2016 bot because we a haven’t completed. But all the programmers this year are new to programming so we wanted something to test on.

Two different gearboxes will never produce the same exact output power/torque/rpm, because small variances in gear friction and efficiency can drastically change the performance.
I assume you don’t have encoders you can use to match the wheel speeds?
If not, then simply add a “bias” multiplier to the motors in the faster gearbox so its max speed is slower such that it matches the other gearbox.

For example, if the robot is steering to the left, that means the right gearbox needs to be slowed down:

bias=0.9; // Figure out what number to use here until the robot drives straight, should be between 0 and 1 noninclusive


Sometimes motors don’t run at the same exact rate. You can either play around with new motors, program one motor to be slower than the other or, my personal favorite, use a gyroscope! Gyros are easy to program, very useful, fun to use! Good luck with everything

Since you mentioned mecanum … ensure that all the rollers take the same force to spin. A really tight or loose roller will cause your robot to veer off

That made me think of an experiment for which I’d be quite interested to see the results.

Take a well-crafted mecanum bot that drives fairly straight without the need for any closed loop control.

Tighten all the rollers on the left-side wheels and see what effect that has on forward-only commands on both carpet and hard flooring.

Do you think it would

a) still drive straight

b) veer to the left

c) veer to the right

d) do different things on carpet vs hard flooring

Give a rationale for your answer.

I’d like to see that experiment as well.

My guess would be a slight turn to the right (“C”) as the vector addition on the left side (both straight forward) would be greater than the vector addition on the right side (1 @ 45 degrees right plus 1 at 45 degrees left). I’m just not sure if it would be enough of a difference to cause it to turn.

My post before was for a single mecanum wheel roller set to be tight (or significantly different from the others).

I’m going to say the robot will veer to the right. Even when driving straight the mecanums should inevitably experience a little bit of slip with rollers. Preventing the rollers from moving will prevent this slip, so you effectively get more forward movement per wheel rotation on the left compared to the right.

I’m envisioning a person walking on an inclined sidewalk which is half covered in snow, and half dry. One foot on the pavement, the other in the snow. The foot in snow will “slip” back a bit with every step, but the foot on pavement gives you the full stride.

I’d be inclined to agree. I could also see a possibility for a performance difference between hard floors like tile or concrete and softer ones like carpet. I would think the locked roller side would get even more traction on carpet than on the hard floor and make the effect even more pronounced.

I was going to provide you the link to the calibration process but school internet blocks sites that are related to gaming. Just google Xbox Afterglow controller calibration and it should be the first link.