Ninjineers 2025 Base Robot Code

Ninjineers 2025 Robot Code Template

Ninjineers 2383 are happy to announce our 2025 robot code template.

This template is designed to speed up on-season robot code development by removing the time-consuming task of reimplementing subsystems and io-layers year after year. In developing this template, we realized that almost all robots can be broken up into flywheels that require simple voltage or PIDF velocity control, or position joints such as elevators and pivots. For this, we have created sensible defaults for these two subsystems and their associated IO layers with options for TalonFX motor controllers and SparkMax motor controllers. We have also created commands to control the subsystems.

Swerve Drive and VIsion are taken care of using a modified version of the AdvantageKit swerve base and the AdvantageKit vision base. Drive has support for TalonFX currently and SparkMax coming in a few days. AdvantageKit’s Photonvision, PhotonvisionSim, and Limelight is currently supported.

Why Should I Use This Template?

Nothing in the template is required; you can use it as much as developing your entire robot code with just the premade subsystems and commands or as little as using it as example implementations to redevelop in your own style. Whichever way will get your team the best results is what you should use.
None of the code is hidden in libraries either, so if at any point you decide something isn’t working for you, it is easy to change right in the open project.

Getting Started

Look at the README in the github repo to get started, and make sure to reach out to me on Discord (I would love to help you get started and connect)

11 Likes

Amazing work, always nice to see teams releasing incredible information, it truly benefits us all. I think the work you guys do is always awesome. On a side note, in the PositionJointIONeo.java file at line 152. Is it suppose to supply desiredPosition where nextVelocity is?

Thank you very much for the kind words, you are right it should be desiredVelocity instead of desiredPosition. I was testing that code on our offseason robot last week and for the life of me could not figure out why setting kA to anything other than 0 would induce heavy oscillations in the mechanism but you found it. Thank you