tl;dr: Check out the proof of concept demo at slfc.dev/command-bindings/ and post your feedback here
Programming an FRC robot needs a lower barrier to entry
RobotBuilder was created back in 2012 as a tool to generate code projects and the skeleton code for a command-based robot program with subsystem and command classes defined based on input in the GUI. What it didn’t do was provide a way to define the behavior of those commands, which left a lot of room for error for inexperienced programmers.
It’s been ten years and RobotBuilder’s maintenance can be best described as “life support”. It has the barest support for the command framework, and no support for all the new additions to the software stack that have been made since it was created. Its use has, unsurprisingly, diminished significantly. Only 87 teams used it last year out of 3,225 registered teams. 2020 usage was even worse, with only 35 teams of 3,914 (less than 1%!).
Its niche, however, is still very much needed. I often see posts on this forum and on the discord from programmers trying to figure out how to do some simple action or how to structure their code and think, “man, this wouldn’t have been a problem if RobotBuilder had been kept up to date”
So, on that note…
I’ve been hacking on a sketch of an idea in the same vein as RobotBuilder. It started as a UI for binding commands to controller buttons (thus the name “command-bindings”), and eventually feature crept its way into something that would be very close to RobotBuilder. I’ve decided to take it all the way, and make it a proper replacement.
A proof-of-concept demo is live at slfc.dev/command-bindings/. It’s not feature-complete but is enough to give an idea of where it’s heading.
Goals
- Tight integration with the WPILib vscode extension. The goal is for this to be used as the default way to create new robot programs. The current new project tool would still be available as an advanced option for experienced programmers
- Make the easiest, most obvious way to do something be the correct way of doing it. It’s easy to use loops and naive thread sleeps when you’re not familiar with the command framework or WPILib in general
- And most ambitiously: Go from zero to driving without writing a single line of code, in less than 10 minutes.
Where you come in
I don’t want ownership and maintenance to be solely on me and my availability; it needs to be self-sustaining in some way so it doesn’t suffer from bitrot like many (or, honestly, most) WPILib tools have.
- Feedback on architecture. The proof of concept started from a controller-based orientation, then pivoted to a component → subsystem → action → command model. Anything that doesn’t fit into that model (for example, how will RAMSETE controllers, path following, and pose estimators fit in?) would need to be looked at to find the best way to integrate them
- Collaboration. Community ownership of and contributions to features and core design (internal APIs, data structures, and so on). This isn’t going to be a one-man show
- Setting goals. Driving features that we should support (and, conversely, ones that we shouldn’t )
- Feedback. Even if you don’t want to write any code, just trying out the app to see if you can get code that does what you need is itself very valuable. See if you can rewrite the code for this year’s robot, or just try making a new project from scratch and see how far you can get
Links
Demo: https://slfc.dev/command-bindings/
Github: https://github.com/SamCarlberg/command-bindings (React, TypeScript)
The project name is subject to change, since it’s now more than just binding commands. I’ll update the links if it changes