A few months ago, we published a whitepaper on a method for characterizing FRC drives. If you haven’t read it, please do so (it can be found in my signature) - we think many teams will find it extremely helpful.
The paper, among other things, provides a convenient framework for the sharing of FRC drive performance data; the constants Vintercept, Kv, and Ka (as described in the paper) jointly describe the majority of the non-turning behavior of a FRC drive to a high degree of accuracy. Combined with information on drive motor choice, gearing, and wheel size, they also give detailed insight into the degree and nature of frictional losses in the drive.
In this thread, I invite teams to share the results of the characterization described in our paper, in the hopes of compiling a reasonable impression of the “typical” behavior of an FRC drive - something which the community currently lacks, and (I think) which would be of significant value. The tests are easy to run for any team with encoders, and the data not difficult to analyze.
This endeavor will only work, however, if participants a standard test procedure. I will describe the procedure, which consists of only two tests below. The tests I outline are designed around differential drives, but can easily be adapted to most other types of drives with a bit of imagination.
For all tests, the following data must be recorded: robot velocity, voltage seen at motors (for teams without TalonSRX motor controllers who cannot measure this directly, battery voltage will suffice - but please indicate that you have done this in your post), and time. If you do not have a telemetry logging implementation, I am pretty sure it is possible to do this with Shuffleboard; I will edit this post with instructions after looking into it (or if someone replies with instructions before I do so, I will add them).
Four tests must be performed to fully-characterize a single-speed drive - two for each direction, forwards and backwards (for shifting drives, each gear must be characterized separately, so eight tests would be needed):
First, participating teams should run quasi-static tests. This involves, simply, slowly ramping the robot velocity at a rate low enough that the robot’s acceleration is small. The exact rate of ramping is not crucial, so long as it is sufficiently-slow; we currently use .15 volts per second. It is not necessary that the robot reach maximum velocity, so do not worry if you cannot do so in the space available.
Secondly, participating teams should run step-voltage acceleration tests. In these tests, the robot is simply given a constant voltage. Again, the exact voltage is not crucial (we use 6v), so long as it is low enough to avoid slipping the wheels.
Tests should be run on carpet similar to the FRC field carpet, if possible. If it was not possible, please note the surface tests were run on in your post.
Data processing is not difficult. Firstly, data should be “trimmed” to exclude any data points at which the robot was not being commanded to do anything. Secondly, robot acceleration should be calculated from robot velocity and time. We have found it effective to do this by taking the slope of the secant line of velocity over a 60ms (3 standard loop iterations) window. Thirdly, data from the quasi-static test should be trimmed to exclude the initial period in which the robot is not moving due to static friction. Fourthly, data from the step-voltage acceleration tests must be trimmed to remove the initial “ramp-up” period that exists due to motor inductance; this can be done by simply removing all data points before maximum acceleration is reached.
Finally, the data can be analyzed: pool your trimmed data into four data sets - one for each side of the robot (left or right) and each direction (forwards or backwards). For each set, run a linear regression of voltage seen at the motor (or battery voltage if you do not have Talon SRXs) versus velocity and acceleration. Voltage should be in units of volts, velocity in units of feet per second, and acceleration in units of feet per second squared.
Each data pool will then yield three parameters - intercept, Kv (the regression coefficient of velocity), and Ka (the regression coefficient of acceleration). Please report those here, along with robot specifications.
I realize this has been wordy, and may be a lot to ask of teams that are undoubtedly busy during build season; but I think sharing of this data would be of great benefit to the community as a whole.
Accordingly, I will include the data from our test bed. The test bed is driven by a 6CIM drive using VexPro Ball Shifter gearboxes, geared 4.16:1 in high-gear and 9.01:1 in low-gear. The gearboxes direct-drive the front wheel shafts, with motion transferred to the other wheels via. 15mm HTD belts on 30T pulleys. The wheels are 4’’ diameter, 1.5’’-width Colson wheels. The tests were run on FRC-field-like carpet. The test bed weighed 135 lbs (including battery) during tests.
It is worth noting that due to an oversight in test bed design, the wire runs between the motor controllers and the motors were unusually long on this test bed, and so the motors may have seen lower voltages than those that were recorded; this could decrease the effective efficiency of the drive.
I have also included “theoretical” parameters (computed as described in the whitepaper), and “efficiency” values calculated from them (again as described in the whitepaper). Please include these values in your analysis.
Well, that turned out extremely long-winded. I do hope some other teams have time to run these tests and share their results. If there are any other values you’d like to see included, let me know.