Fastest recorded match cycle time, Wisconsin Regional Match Q50
And Finally, 205
Days until Kickoff for the 2019 game DESTINATION: DEEP SPACE!
The *FIRST *Robotics Competition software has a feature called ‘usage reporting’ that tracks what WPILib objects are created in each team’s code and reports that data back to the field when the robot is connected. Here’s the full set of usage data from the 2018 season, and some notes from Kevin O’Connor, *FIRST *Robotics Competition Robotics Engineer:
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 a team creates extra motor controllers that aren’t on the robot, they will still be captured by this system. If a team creates 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).
The other languages are almost entirely Python, and there are 2 teams using “Unknown” languages (rookie years 2001 and 2002). There was a .NET port of wpilib floating around a couple of years ago, not sure where that left off.
401 Copperhead Robotics as well as a few other teams program in Kotlin, a JVM language that is cleaner than Java. Plus it doesn’t have null pointer exceptions. Check out their code here:
Python is also supported through the the wpilib port RobotPy, maintained by virtuald. I think most of those 66 teams were using python. They say the best language is the language your team knows, so my team will be joining the python ranks next year.
Kotlin and other JVM languages like Scala, which was used by my team the past two years (https://github.com/team846/potassium), unfortunately aren’t included in the count of teams using non-standard languages. The statistics for those are based on language IDs that WPILib reports, so any robot code that uses the WPILib Java libraries will just show up as a Java robot.
Fun aside, our Scala code this year technically wasn’t even JVM based. We reimplemented WPILib in Scala (https://github.com/Team846/scala-native-wpilib) so that we could compile it to native code with Scala Native. But we never changed what language ID the rewrite reports so we still show up as a Java bot.
I always learn something about my programmers from this spreadsheet. As usual, it isn’t good this year. We pulled the servos about two weeks after bag, but they’re still there. I don’t want to know why we have FIVE joysticks in our code.
Still, that’s a lot of nominally independent pneumatics devices for a year with only short-range launching. It’s hard to imagine more than two for the drive train (shifting and articulated wheels), one for a gripper, one for intake arms, one for a launcher, and maybe a separate one to push cubes into the vault. Surely pneumatic climbs and elevators were rare or nonexistent? Eight pairs seem reasonable for games like Recycle Rush, where some teams might have decided to make an all-pneumatic tetherbot to stack totes, or just had that many two-state moving pieces (e.g. Ninjabots), or Aerial Assault using the 2015+ control system and no spikes, where each solenoid valve on a launcher needed separate PCM channels.