Hello all. As FRC progresses and increased amounts of accurate closed-loop control become a more essential part of a successful robot, our team struggles with backlash more than anything else. We have the means and abilities to program systems that operate utilizing advanced closed-loop control such as Motion Profiling and PIDF loops, but we consistently struggle to design, fabricate, and assemble mechanisms that don’t develop (or even begin with) obscene amounts of backlash.
Some things to note:
Our team currently doesn’t have reliable access to a CNC Router or CNC Mill
We use live axle (.5" Hex) for nearly everything due to time and part availability
We build a practice robot
I am aware that teams like 254 and 971 machine oversized Hex axle and weld+rivet lots of parts, but I am concerned we don’t have the resources to do these things. Are there any cost-effective, time-effective tips/techniques that can be used to reduce backlash in our robots?
I’d say the number one thing is to use a tensioned sprocket or belt setup as your final reduction. Gears can have a pretty wide amount of slop, but if you tension things you can get them to be very precise.
In some mechanisms, you can use a disc brake (this is especially useful for arms and elevators). This will let you lock in position when you reach the spot you want. You can pair that with a limit switch so that you barely have to bother with control loops - just pin down when you see the switch.
However, I’ll note that KISS is your friend when it comes to precision. More joints -> more error -> less fun.
The only time we have ever made custom hexes was this season for our wrist. Usually we just deal with whatever backlash is present in thunderhex+1/2" hex broached parts. I would not recommend the effort involved in doing that for anything that isn’t really critical.
This isn’t going to help with backlash. There will still be backlash between all gears in the system, which will be significant, plus any slop in your shafts and sprockets/wheels/gears/etc.
Sorry for the confusion. I remember reading that somewhere, and I made the mistake of assuming it was a more common practice. How do you deal with the said backlash, if you don’t mind me asking?
In 2016 we used aluminum can shims in the hex hubs in our shooter wheel. I have also heard of teams powder coating their shafts, I think it was 299 this year. Both of these options much less effort and accessible than custom shafts.
Mount your sensors after as much reduction as possible. Do your best to be measuring the actual movement you care about, not necessarily just measuring the rotations of the motor or gearbox output shaft.
One thing that can help, though not a catch-all solution, is to mount sensors like encoders as close to the thing they are measuring, rather than on an intermediate stage in your gear reduction or on your motor shaft. Now, depending on what you want to do with your sensor, this might not work (especially if you numerically differentiate for velocity), because for a given encoder, the ratio of the number of ticks sensed vs degrees (radians?) of rotation of the mechanism will decrease as you move the sensor further down the geartrain toward the mechanism. However, sensor location is still something to think about.
There is also an argument to be made that one should measure at both sides of the geartrain to get better velocity feedback as well, but there is no easy or single answer to solve every problem.
In this thread Jared from 254 posts on reducing ‘stiction’ and backlash. It’s at the bottom of the page. I’m not sure this is the same backlash OP is referring to, but look at it anyway. ::safety::
From the world of high-end industrial CNC machinery (Mazak, Okuma, DMG Mori, Hermle, etc etc…) backlash is dealt with in several ways. Some of them perhaps not really applicable to FRC but who knows?
Reduction stages have long given up for more powerful motors (AC servos or sometimes hydraulic) to direct drive the ball-screw. The ball-screw itself, its bearings, and especially the ball-nut also cause backlash, so they will add huge amounts of preload to the bearings by stretching out the ball-screw. Of course this results in effectively a smaller thread pitch, but this can be mapped out on the controller. Ball nuts sometimes will run oversize balls for a small interference fit between them and the screw. Or they can use two ball nuts preloaded into or away from each other. Increasingly though, as Sean mentioned, the closer they measure to the actual movement the better. so linear encoders can be attached to the table or even built into the linear rails, with read heads attached to the linear bearing blocks themselves. Eliminating the whole ball-screw assembly in the first place is ideal, so linear servo motors have gained huge momentum in the past decade or so. They are much faster than ball-screws, so I believe this is the primary motivation for switching to them.
Accuracy can also suffer from stick-slip or stiction. Generally this applies to the ways of the machines, many of which have switched from box or dovetail ways to linear bearings long ago. However on systems that require extreme accuracy, box ways can have an edge with fluid film or air bearings. Many CMM’s use large granite blocks lapped ridiculously flat with air bearings for smooth, near frictionless movement.
If anyone could apply some of those concepts to FRC though… eh. Just ideas. Personally I’m working on a swerve drive that rotates the module with a worm gear. I can print the worm gear from nylon and turn the worm, then run some experimentally determined amount of interference between them for next to no backlash. Despite being a single reduction, I loose a bunch of power due to the friction between them, but I could mount the encoder directly on the motor shaft with little penalty.
Every system is going to have some amount of backlash. Most of the time it’s pretty easy to deal with however and I think your overestimating the necessity of eliminating backlash. Part of the reason I’d assume 254’s wrist needed particularly low backlash is they can’t rely on gravity alone to take up the backlash since the wrist moves past the 12 o’clock position. There design decision inherently requires additional accuracy. It’s something to juggle with when you consider the resources required of any design.
On 5406 we decided that we really wanted our cube scoring mechanism to be stable and solid. We knew with our fairly low resource design style a long arm could introduce some slop and backlash into the system so we intentionally made the decision for our arm to push against a hard stop in scoring position. Since the motor is pre-loading the arm against the hard stop any backlash and slop is quickly taken up making it rock solid. We can then use our elevator to control scoring height.
Another easy way to remove backlash is by adding some sort of tensioner to pre-load the mechanism in one direction so the backlash is taken up.
I’d be careful about pigeonholing yourself into the idea that just because 971, 254 or whoever does a thing and is competitive means you also need to do that thing to be competitive. I’ll point out the 4678 had a nearly identical design to 971 which some may argue was just as good if not better. From speaking to them it doesn’t appear they do anything in particular to reduce backlash. 99% of the time your better off spending the time/resources needed to make special custom hex shaft or whatever by just tuning/iterating/practicing with your final design.
I spent a lot of time when I was in high school trying to improve my team by obsessing over the little things that teams like 254 do. We’d use the exact same model of encoder they used, we made our own Scantron scouting system so we could scout just like they do and we’d use Cheezy drive so we could drive just like they do… *
Now there’s really nothing wrong with learning from other teams, it helped us quite a great deal. However something I’ve come to realize is even when you add all these little things up it’s only a small part of the reason teams like 254 are so good. What it really comes down to is time. These teams spend a lot of there time prototyping, strategizing, practicing and iterating. While having a good robot design helps a ton it really comes down to tuning and execution of that design. 469 2012-2014 comes to mind as a team that makes a lot of design decisions that I think are totally insane. They’d look fine from afar but you’d go up close and you’d see them using Dewalt gearboxes for drive and parts harvested from a shopping cart. It was they kind of stuff you’d never recommend anybody to do, yet they’d spend so much time refining it that they’d end up with some of the best bots in the world.
Our manufacturing cncs have encoders on the Ball screws and glass scales on the linear bearings. They calculate the backlash in the system and take care of it mathematically. When the ball screw hits to much backlash the machines tells us and shut down.
In frc we usually instrument just the final shaft with an encoder so you are measuring actual position.
Thats pretty neat. Love the extent we’re seeing machine tool builders go after process reliability. Another thing that impresses me is the extent manufactures are going to these days to manage the thermal growth of the machines. The Hermle centers we run at work have huge chillers sitting behind them to keep the coolant as well as the spindle, ways and casting cool. Not sure if ours do, but many DMG’s and I think some Mazaks go as far as circulating coolant through the linear guideways and ball-screws to keep them at a precise temperature. I doubt these are the only companies, just familiar with them. Completely irrelevant to FRC currently but pretty neat
Actually though, does anyone (Jared) adjust for changing motor temp over the match? Would that even be a benefit?
While this is a good solution for automated manufacturing, it’s a terrible solution for a teleoperated robot! Doing things at reduced efficiency, based on eyeball feedback, is definitely better than not doing them at all! Failure of sensors in a competition robot should switch over to open-loop control rather than a shutdown.
If possible, can you give an example of a mechanism that was giving you trouble? It might be easier to provide feedback on a particular design than just general points.
Generally what we do is place an encoder as close to the motor as possible in the transmission assembly, so there is as little backlash as possible between the sensor and the motor. This makes the control system easier to deal with (since you see an immediate feedback when you tell the motor to do something), but we still have to deal with the backlash of the rest of the transmission/mechanism making our mechanism not end up exactly where we want. Usually this doesn’t matter much.
For this year, our two main mechanisms were an elevator and a wrist. Both had closed loop control with an encoder. We didn’t see any backlash in the elevator at all, since we didn’t counter balance it with springs. Gravity always took up the backlash in the downward direction. It also didn’t require very much reduction. Our wrist had a lot of reduction in comparison, and a lot of backlash. We used a mechanical hard stop that it would rest against in the two main positions we cared about, so we didn’t have to deal with the backlash in the geartrain affecting its position when picking up or scoring (the two positions where you care about accuracy). The control system just had to move it between the two hard stops.
We did have a lot of fun with the drivetrain backlash. Our solution to this issue (among other issues) was to mount a floating omni wheel with an encoder that was sprung to the floor with latex. This let us feel the carpet directly to get a precise location measurement.
I know I’m not Jared, but I’ll chime in here anyway.
I don’t believe anyone explicitly controls for motor temperature. However, basically any closed-loop controls will end up accounting for them indirectly. If you’re controlling for output RPM, the reduction in efficiency as heat builds up will impact that output RPM and thus be accounted for by the control scheme. Even if you’re controlling for end position, motion profiling may end up accounting for the velocity, acceleration, and jerk during phases of that motion towards the desired end position (each impacted by motor efficiency). On the input side, many teams implement current limits, voltage limits, and/or voltage ramps, which can end up reducing heat buildup in the motors as well.
My guess is that this functionality checks long term trends of machine wear and tear over months or years of constant operation, not during a single cycle. If it was approaching the threshold, you can better schedule the downtime/PM’s to not interfere with production. It actually is a really cool feature in that regard.
In FRC though, wouldn’t it be cool if the robot could know exact backlash amounts and then tell you if a gearbox was wearing quicker, close to failing, skipping a tooth on belts, etc…
The sprung wheel encoder is a clever implementation, but would you need it if you knew the position of the wheels? Seems like the cart is leading the horse here, do want the motor’s position or the robot’s position?
Controlling the temps in the first place makes sense. I guess I was kind of asking if the temperature delta over the course of a match effects power output of the motors enough to be considered significant. If we held a 775 at stall with the voltage it can stall out for 180 seconds, is the % of power lost at its new temperature meaningful?
It depends on what voltage you’re stalling that 775Pro. Both the locked rotor test and the peak power tests from Vex can be helpful for considering this. Ideally, don’t load your motor to the point where this becomes a serious concern and you should be okay.
Going from both FRC and non-FRC experience, the best thing I can suggest is that one put the sensor directly on the output device (encoder omni for drivetrains, shaft axises for manipulators/lifts/arms). One trick that worked well 2783’s robot in 2011) was using a bit of fishing line (or other inelastic string material) and an extension spring to push/pull the string around a pulley on an absolute encoder- the arm joint pulled the string against spring tension, and rotated the pulley as tension changed, reflecting the position of the arm. This resulted in virtually no backlash from the sensor’s point of view; the pulley was sized so the entire range of motion was less than rotation of the encoder (although one could do the same with a smaller pulley and a multiturn pot).
If one must do gear-to-gear backlash elimination, one way that I’ve seen done (particularly in optical drives for the laser head position servo) is to make the center of 3 gears a “double gear” that is sprung in a way (similar to how non-solid automotive clutch discs are built) that the teeth on each half of the double gear presses against opposing sides of the valley of the mating gear. Generally this doesn’t lend itself to large loads (depending on the strength of the springs) but it does work and has use in industry.
As mentioned before, appropriately tensioned timing belts (assuming a strong enough tensioner) also work for this, as can chains (until they wear out). I must stress that this all assumed good tension… if the tensioning device yields, you will get backlash under load