Introducing Sertain: A framework that makes programming robots easy-peasy!

Hi everyone! I’m Aidan, and I’m part of team 2521 SERT.

I’m going to get straight to the point: programming is hard. SERT 2521 has spent the past 6 months developing and testing a new framework called sertain (get it? it’s a pun!). Anyway, sertain takes a new approach to robot programming. Using the language features of kotlin, sertain allows you to construct robot programs in a simple and intuitive way, making programming robots the way it should be. Take a look here.

Be absolutely SERTain that your robot works! (thats a pun to geez we should stop)

PS: Sertain is not done being developed, however it is ready for use and can be use to create a beautiful codebase for your robot.

Also PS: Sertain would not exist if it weren’t for team 2471’s meanlib. While sertain is really different from meanlib in a lot of ways, some of it’s core aspects are inspired by meanlib. It’s a really great framework, check it out!

Also also PS: We made a version of sertain before. This sertain is completely different and frankly has nothing to do with the other sertain. We just like the name :sweat_smile:


What is the advantage of using your subsystem and event framework as opposed to the WPILib command based framework?

1 Like

For one thing, it’s less work. Commands in WPILib require you to create an entire class just to run what is basically just a function. In sertain, it is a function.

Additionally, sertain’s subsystem framework makes it so that accidentally using a subsystem is impossible. In WPILib it is easy to forget to require a subsystem. Assuming you are using add to store subsystems, the only way to get a subsystem is to either call use inside a subsystem or to call access for safe access.

Meanlib actually takes a pretty similar approach to this.

The new 2020 WPILib has completely-rewritten the command-based framework. Small commands can now be defined in-line, which is about as short as it can get. I’m interested by sertain, but I don’t know if it’s as warranted as perhaps it once was.

Edit: this is just a response to Jamdan’s justifications for using sertain.


Yeah, the new framework looks a lot better.

However, the framework still allows for error because you need to pass in all the required subsystems to the InstantCommand. Also it’s still less concise. Basically it’s this:

InstantCommand(subsystem::someCommand, subsystem)

versus this:


A small difference, but in my opinion a framework should strive to make things as concise as possible :sweat_smile:

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.