Eliminating friction

We’ve been having issues with having our motors overheat during competition, as with many other teams. What are some general tips in reducing friction in a robot?

The robot is 18 lbs, has 6 motors on its base, and uses a 2:1 gear ratio

Have you done any research / what have you tried to fix the issue?

A starting point: https://vexforum.com/t/high-torque-motor-overheat/24286/1

Make sure your axles are straight, add slack to your chain, drill through your pillow blocks slightly, don’t cantilever your system, dont add too many spacers, make sure the system is squared

if you can remove the motor and spin the wheel, the wheel should spin for an additional 5 or so rotations

Does this really help that much? I can see where drilling a pillow block could create a rough inside edge and increase friction? I know this seems really simple to ask, but do you mind to post a picture of the drilled block as an example?

Don’t drill through your pillow blocks. The normal holes in pillow blocks work just fine. If anything, that’ll just make your drive base more unstable.

This is what jack attack did on their drivetrain last year: https://vexforum.com/t/2915a-lynfield-jack-attack-special-nationals-reveal-sack-attack/23126/1&page=7&highlight=jack+attack

If he believes it helped him become world champion and score 400 points in robot skills last year, I’d definitely try it if you had the time.

5 rotations with everything but the motors in place (with all the chain and sprockets)? That’s a lot of rotations

My bad, not with the additional chain, linking the sprockets together. However, it’s very doable to get 5 rotations on a bare wheel on an axle and bare sprocket on an axle.

I think we can get 5 rotations on our wheel, but I’m not sure about the whole drilling thing- the links on the thread are broken

We don’t drill any holes in our bearings. We just make sure that without a motor on, all the wheels can spin freely for at least 30 seconds.

Sometimes when you tighten a bearing too much it will cause the plastic to permanently disform from its original state. Shafts inserted in such bearings cause unnecessary friction. Re-drilling the bearing holes will make sure they are the correct diameter. Drilling the holes too large on the other hand will cause the shaft to rotate on the now semi-square metal hole which is not good at all for friction. Just use caution while doing this, bearings are cheap and easily replaceable if you screw up.

What I took out of what Jack said was that he reduced the chance of friction between the metal and shaft, not necessarily the bearing itself. I could be wrong though I haven’t done it myself.

This should be very possible, if not you probably have too much friction (the chains shouldn’t add much friction?). Check both wheels individually too and see if ones slightly more resistant vs the other as said before.

If you get it running well after this, I would highly recommend that you look into lubricating your drive as well. In particular, lubricate the internal gears inside the motors. The (new) motors in my experience have a lot of excess friction that can be mostly fixed by applying new lubrication.

A small amount of lithium grease is allowed as long as it does not get on the tiles or goop on to other robots/objects.

It works best on linear slides but can be used for gears and axles too (but much harder to apply in moderation though).

Teflon washers also help. Having two elements with low coefficient of friction next to each other should make them move before other elements.

But making sure your structure is sound without bending is the best method. Does the weight of your robot make your wheels kick out a bit under the stress?

What is your motor power set to? Is it 127 in your program because if it is then I would decrease by 20%. My team found out that a motor will get about the same speed and torque if you decrease the power to 20%. The other 20% just causes heat and in turn causes the motors to over heat and stall. We had a over heating issue at our state competition but once we decreased the power by 20% we did not have another issue all day.

This is really interesting. We had to go back to high torque because our motors were stalling. We never heard of this or tried it. It would be really interesting to know if this helped any other team.

Yeah it would be we just know that it helped us a lot and we even had a robot that was made out of 98% aluminium with very low friction on all of the axles.

So did i set this up right?

motor[LeftDrive2] = ((vexRT[Ch3] * 100)) - ((vexRT[Ch3] * 100));
motor[RightDrive4] = ((vexRT[Ch2] * 100)) - ((vexRT[Ch2] * 100));

wow that’s really not right…haha… Do you mind helping us with reducing the drive speeds?

I’ve never heard of this, n̶o̶r̶ ̶d̶o̶e̶s̶ ̶i̶t̶ ̶m̶a̶k̶e̶ ̶s̶e̶n̶s̶e̶ ̶t̶o̶ ̶m̶e̶. From a graph found by JPearsmen, you can see the output of the motor controllers are essentially identical between 128 and ~100 so reducing it should have no effect whatsoever. If you could explain in more detail why that would work, I would be interested to hear. Perhaps the graph will look different with a load on it?

EDIT: Thinking about it some more, there could be some truth to that statement. Given the PWM wave would be “high” for longer, I would assume more power would be put to the motor (and hence more heat). However, I feel with lower PWM you get lower amounts of torque which would make it work harder and give off just the same amount of heat? I don’t really know (maybe the question is why do motors give off heat? haha)


A solution every team should look into if you want to improve their software is acceleration ramping (typically a simple for-loop will suffice, and can be very effective at preventing overheating)

NOOOOOOOO, if you do this, it will be really bad (do nothing) if you want tank drive, i suggest something like

  motor[LeftDrive2]         = vexRT[Ch3] * .8;
  motor[RightDrive4]        = vexRT[Ch2] * .8;

and if you want arcade, do something like

    motor[LeftDrive2]  = (vexRT[Ch3] + vexRT[Ch4])*.8;
    motor[RightDrive4] = (vexRT[Ch3] - vexRT[Ch4])*.8;

And be sure you reverse one of the sides in the setup.
I am fairly sure this will work. It might decrease performance slightly, but hopefully not significantly.