[FRC Blog] 2018 Beta Testing and 2017 Usage Reporting

From: 2018 Beta Testing and 2017 Usage Reporting | FIRST

2018 Beta Testing and 2017 Usage Reporting
Written by Kevin O’Connor, FIRST Robotics Competition, Robotics Engineer

Beta Testing

This year we are once again looking for 90 teams, 30 for each software language, to help us test the 2018 FIRST Robotics Competition software. A small number of teams have been invited to bypass the application process based on past performance in Beta testing. Most of the spots are still up for grabs, though, so make sure to fill out the application found here by Sunday, September 24th, if you are interested. Beta teams will be asked to upgrade their 2017 robots to the 2018 software, perform some specific tests with any significant changes or new tools, and help educate other teams about the changes for 2018. Beta Testing will begin approximately the 2nd – 3rd week of October and each task will have specific deadlines through approximately the end of November. Teams may continue to test through Kickoff, but software starts to lock in early December so testing done in December may not be done in time to fix any bugs discovered.

2017 Usage Reporting

One of the under-the-hood features of the FRC Control System software is a system called Usage Reporting. This system tracks what WPILib objects are created in each team’s code and reports the data back to FMS when the robot is connected to the field. This data helps FIRST and our Suppliers understand how teams are using the Control System which can give us insight into things such as adoption of new features or usage of legacy classes.

Here are a few numbers from the data that teams may find interesting:

25,151

The total number of motor controllers used on 2017 robots

6,296

The total number of USB input devices used to control those motors

2,0451

Total Encoders used to get feedback from those motors

1,4122

The number of teams that used pneumatics (with the PCM) on their 2017 robot

762

The number of Digital Outputs used to control non-actuators (lights, sensors, etc.) on 2017 robots

33

Number of teams programming in Python

15

The number of Analog Outputs used to control non-actuators (sounds, lights, etc.) on 2017 robots

The complete processed data set can be found here.

A few notes on this data:

  • The data has been semi-anonymized. Team numbers have been replaced with rookie years and the data has been resorted so teams are not in order by team number.
  • We can only track the objects teams create in code. If you create extra motor controllers that aren’t on your robot3, they will still be captured by this system. If you create motor controller objects of the wrong type, that wrong type will be captured by this system.
  • Counted objects and TRUE/FALSE show the largest number of any given object used in any one match (i.e. if a Robot had 2 Encoders in match 1 and 3 Encoders in match 7, 3 will be reported). Language and Framework report what was used in the last recorded match.
  • Some objects naturally result in double counting (Encoders use Digital Inputs)

1 Only includes encoders plugged directly into the roboRIO

2 Compressor may not show for C++ and Java teams that didn’t use the Compressor object. Counting the # of teams that had > 1 Solenoids is a more accurate count of teams using pneumatics.

3 Example: A handful of teams report more than 16 motor controllers which would be awfully tough with only 16 channels on the PDP.

Big brother is always watching :yikes:

When they uploaded this document, they put it at the same url as the one they linked to in the blog last year. Is the 2016 report still available anywhere?

I went to my downloads folder to check if I had it,
I downloaded the 2016 report back in 29/7 but it has the same data as the new one.

When looking at the properties of the 2017 report it says ‘Content created: 31/05/2016’.
So I guess the link hasn’t updated yet.

That is probably why there are no 2017 rookies in this data set.

It looks like FIRST fixed the bad link in the original blog. Here’s the updated link.

Edit: 3946 is row 1553 this year, based on rookie year, language, infrastructure, 4+ CANTalons, 1+Talon, 1+Analog Input, 1+Encoder (direct). But…we didn’t have three joysticks or use arcade this year??

Edit2: Three joysticks is because we used two flight sticks as a primary and a single xBox as a secondary, and put all three in the code. I couldn’t find arcade drive code anywhere on our 2017 competition GitHub; it must have been something we used in the last match but never synced to the repository.

Cool

https://i.imgur.com/fXqAVx7.png

Fairly certain team 3991 is 1705 on the list this year (nothing else matches), and everything seems pretty accurate :smiley:

I’d be interested to see this as “% of market” as well, since the raw values are going to scale with # of teams and average # of motors per robot (I think average number of motors per robot in 2017 was higher than 2016 just based on the game)

Some summary data for 2017:

https://i.imgur.com/sFtZi4d.png

I’m interested in the two Unknown programming languages, rows 359 and 580. Anyone who used a nonstandard language care to come forward? Kotlin reports as Java.

I wonder whether any of these statistics are correlated with OPR.

It would seem rookie year is correlated with OPR. Hmm… :rolleyes:

Anyone have an idea of why my team isn’t on here? There’s no 1999 Java teams with compressors so I’m pretty sure.

Did you actually use the compressor object in your code? Instantiating a Solenoid will run the compressor automatically, but will not report a compressor usage.

(2017-Robot/src/org/usfirst/frc/team236/robot/Robot.java at master · Team236/2017-Robot · GitHub)

Can we drill into this Telemetry data ourselves on our own systems?

Usage wasn’t being reported for Compressors. Look for something else.

What do you mean?

Is this data from a log file somewhere on the RoboRio or DriverStations? Or is it simply captured when the robot executes its code when plugged into the FMS? I’m no software engineer but at time my curiosity gets me to wonder and explore deeper into the how it works.

I assume the boot order looks something like:


Driverstation Launch >
Contention to Robot using [USB, Wifi, Ethernet, FMS] > 
Match Team Numbers >
Launch Robot user code [Log file created or FMS listens for objects created]

If there are log files and we knew what date, time, match#, we could use that for a number of fun or useless reasons. Seems our Diverstations are logging A LOT of useful data. I even heard of teams that had hard drives overwhelmed with log files. RoboRio resources are limited so if there are Logs they might get overwritten.

We have had a few time after a code update the TalaonSRX’s don’t either get created or set to a mode. We use them all as Velocity closed loop but they don’t respond to any user commands. Using the Rio’s Web dashboard the CAN bus does see all drives and the test function show each drive as no mode. I have chatted about this in the past. I can’t 100% reproduce the conditions but for some reason it feels like it tied to us using the Driverstation TEST mode before putting the robot into Teliop or Auto. If there was a log file of objects created that would eliminate one possibility.

All the data is captured through the UsageReporting class in WPILib. That data is reported back to the driver station that then pushes it to the FMS. You can find most data yourself in the DriverStation logs.

It should be noted that at no point is the match number communicated to the driver station or robot.