# paper: FRC Drivetrain Characterization

Thread created automatically to discuss a document in CD-Media.

FRC Drivetrain Characterization
by: noah.gleason

A series of tests performed on a standard drivetrain, showing how to characterize a drive’s behavior in terms of voltage, velocity, and acceleration.

Me and Eli (Oblarg) have been working this preseason on a project that started as just trying to see how linear the frictional forces in a drivetrain are, but quickly grew into coming up with a pair of equations that show how an FRC drivetrain behaves for a given voltage. It’s pretty easy to find these equations, and it’ll give you a good degree of precision on how your drive will behave, without needing any encoders. We got 2% accuracy in open-loop motion profiling for a wide variety of profiles, and .2% for closed-loop. The data we used are linked at the bottom of the white paper, and all the graphs were generated in R using ggplot.

motor_characterization.pdf (232 KB)

9 Likes

Something I didn’t get around to cleaning up for inclusion in the whitepaper, but which is kinda cool regardless: Here’s a 3d scatterplot with best-fit plane of motor voltage over the whole velocity-acceleration plane:

Edit: Note that the intercept of the plot is nonzero, as the voltage axis does not start at zero. This is, as mentioned in the paper, very important!

I’m pretty sure I followed everything here, and see how we can use this to significantly improve programming the robot, both in open-loop and feed-forward-closed-loop scenarios; I had been worried about not including static (as opposed to viscous/speed dependent) friction in the control software for a while. +reps to you both!
Were you able to learn anything that would help in designing the drive train?

Edit: You must spread some rep around before giving it to noah.gleason again.

Not yet - we have only characterized our test robot so far. Now that we have the testing procedures established, however, it shouldn’t be too hard to start collecting data on different drive configurations (belt vs. chain, wheel type, etc) and see where it leads. Of course, we encourage other teams to do the same - we hope that this method of characterization might become something of a “standard” so that teams can more-easily share information about drive performance in a common format.

Good read, I learned a couple things here today. :]

To check my understanding, is it correct to say that the .8 multiplicative fudge factor is only accurate at or near the top speed of the robots that were tested to get that .8 fudge factor? So that the .8 factor would work for one “usual” FRC speed, and get more inaccurate as the top speed deviates?

I wonder if it would lead to more intuitive controls if the joystick was scaled to velocity instead of voltage.

Can this be applied to increase acceleration by keeping the wheel on the edge of slipping? By measuring the torque/voltage at a steady state wheel slip (robot pushing against wall or something), and then measuring velocity as the robot speeds up, can’t equation 14 be applied so that the robot operates at the edge of wheel almost slipping? Or maybe even make sure the robot always operates at the edge of wheels almost slipping no matter what, to decrease tire wear. How significant would that be? (I have no idea whether wheels slipping is an issue or not, so idk)

Yes, this is about the measure of it. Speed loss due to friction simply isn’t a fractional loss, so even if you find a fraction that correctly describes your robot there’s no reason to expect it to generalize to other robots or gearings because that’s just not how the physics works.

In particular, we should expect that the “fractional loss” of more slowly-geared robots will be less than those geared to move fast, as the “intercept” term really represents a constant torque load and a higher gear ratio will overcome this with less voltage/current (and thus have a smaller intercept). Really, though, stating it in terms of “fractional loss” at all is just physically ill-founded and kind of misleading.

I wonder if it would lead to more intuitive controls if the joystick was scaled to velocity instead of voltage.

It almost certainly would, as you’d no longer have a fairly wide “dead-band” around zero; adding the intercept voltage allows you to correctly linearize the robot response.

Can this be applied to increase acceleration by keeping the wheel on the edge of slipping? By measuring the torque/voltage at a steady state wheel slip (robot pushing against wall or something), and then measuring velocity as the robot speeds up, can’t equation 14 be applied so that the robot operates at the edge of wheel almost slipping? Or maybe even make sure the robot always operates at the edge of wheels almost slipping no matter what, to decrease tire wear. How significant would that be? (I have no idea whether wheels slipping is an issue or not, so idk)

It should be possible to calculate from equation 14 the outputs required to “just nearly slip the wheels,” yes, though you probably want a bit of headroom to be safe. You should try this and report back on how well it works! Keep in mind, though, that it will likely only really make a difference on shifting bots in low-gear or on a very light robot, as it is somewhat hard to actually slip the wheels on a FRC

bot geared to move at an appreciable rate. Also, be sure that you back-calculate “effective torque” from your empirical Ka, rather than from the theoretical - as seen in the paper, these can differ by a factor of two due to frictional losses! The easiest way to do this would simply be to divide the empirical Ka by the theoretical to obtain your drive’s “frictional torque loss factor,” and then multiply the theoretical torque by that factor.

1 Like

Thanks.

You should try this and report back on how well it works!

lol, I don’t have a team right now. Would someone else care to try this?

1 Like

We’ll put it on the list of “things to try” (basecamp to-do lists are wonderful), but it’s a very long list at the moment so I dunno when we’ll be able to get back to you on it.

This is awesome! Thanks for doing the research and posting your results!

This post may shed some light on your question.

If you add more friction to your robot and re-run the Quasi-static kV determination, does the value of kV change? For example, say you introduced a small rubber pad that rested on top of all 6 wheels, do you reach the same kV value as without them?

It depends crucially on what kind of friction you add - not all drivetrain friction is created equal. As we mention in the paper, the observed linearity indicates there are (at most) three types of significant frictional effects present: constant effects, effects proportional to velocity, and effects proportional to acceleration. These show up in the values of Vintercept, Kv, and Ka respectively.

While we have not done a direct experiment to confirm this, I strongly suspect that doing what you have suggested (adding a rubber pad rubbing against the wheels) would greatly increase Vintercept (constant effects), but not necessarily Kv, due to the fact that the test robot we used to obtain our data had certain parts causing friction pretty much in this fashion (i.e. a sagging electronics board rubbing on the ground as it moved) and still gave us a Kv basically indistinguishable from the theoretical value. Remember that the only things that are going to cause a change in the value of Kv are viscous effects (i.e., those proportional to velocity) - dry friction between surfaces is usually not viscous.

If there is an effect on Kv, it may actually be to decrease it, as the friction force may decrease with velocity. Something to watch out for. This may seem counterintuitive, as a smaller Kv might seem to imply a higher top speed (and clearly we cannot increase top speed by adding friction!), but this would occur in combination with an increase in Vintercept, resulting in a net decrease of top speed.

Effects proportional to acceleration, on the other hand, almost certainly come from gear-to-gear and belt-to-tooth friction, as these are effects that are proportional to internal forces in the drive that are proportional to motor output torque (which is itself proportional to acceleration, so long as the wheels are not slipping).

Interesting. Knowing which constant to tune late in a season (as robot parts wear) is crucial to keeping consistency in automation. I think this paper lays a good foundation in that regard. I’m still digesting it though; some of the explanations are a bit of a leap without references.

Has anyone explored potential ways for computing a theoretical value of Vintercept?

A theoretical computation would require a lot of build-specific inputs about mechanical friction. However, it’s not too difficult to measure. Just drive the robot slowly, keeping it moving without grinding to a halt. Meanwhile, log the product of Vbat and the duty cycle.

I’m thinking about this more from a simulation point of view – it would be nice to compute a theoretical value for a robot that doesn’t exist yet, or a robot that is in a bag or is otherwise inaccessible. Not everyone has practice robots after all.

. . .

If you’re just looking for a SWAG, let’s look at the canonical SWAG of a drivetrain that’s 80% to 85% of free speed. That means that at top speed between 1.8V and 2.6V is used to overcome friction; the amount should be somewhat **less **at low speed assuming some combination of constant friction and viscous friction. Eyeballing oblarg’s plot gives a value of 1.3V. I’d SWAG around 1.0 to 1.5V for a well made two stage fixed wheel drive train, ranging up to at least 2V for something that might not be completely square or have some binding or holonomic wheels.

Well, a SWAG is fine, but I was hoping someone had tried to estimate the relationship between vintercept and the various parameters (mass, static friction, voltage, etc… ) so it could be vaguely computable. Of course, I suppose that might not be possible.

Teasing out relationships like this is very much one of the long term goals of my drive characterization data sharing thread.

There are currently some plans in the works to collaborate with Jaci to distribute characterization code to teams, which hopefully (in addition to assisting teams in better-controlling their robots) will result in a large wave of new data to look at.