So, we built our robot, and our drive is uneven. What I mean by this is the left side motors are travelling faster than the right side motors. We tried switching out the motors, but that didn’t help, so we think it might be a problem with friction and the bearings. Does anyone have any idea what the cause is and how to fix it?
Check to make sure that all your motors have the same internal gearing.
As @puzzler7 said, check your internals. Also verify the consistency in your build quality. If one side has more friction/resistance than the other the speed at which that side will run will vary, thus creating a slight turn as you attempt to move forwards.
Shaft encoders are always an option if you don’t want to try and adjust build consistency, or want to fine tune further after said adjustment.
There are many things that could have caused this problem. As stated, the build quality could be jaded on either side, causing the drive to turn a bit. Another possibility could be in code. It may seem stupid, but I’ve been typing fast (max out at 65 wpm) while coding and I have put one value instead of the value that I wanted. Also, if all your checking resulted in nothing, you could create a P loop for the wheels to make sure that they are always going at the same speed.
On our old robot we had a chain drive and we had similar problem how one side was faster then the other, when we checked the wheels, the insert was rounded off, so the motor wasn’t spinning the wheel, so we changed it to metal inserts and removed the plastic inserts that came with the omniwheel, you could use a bar lock as well. That solved our problem, so try checking your wheels in addition to all the suggestions above.
If you are insistent on having wheels at the same speed and a straight drive, a PD or PID loop with a few encoders on your wheels can be of benefit. Otherwise: axles, bearings and collars are usually the most prominent culprits for extra friction.