====Adding a Subsystem to the Software==== The mechanisms that the software controls are organized into subsystems and the software structure follows this same organization. The steps to add a new subsystem to the robot template or a repository based on the template are as follows: - Add the subsystem class including setup and control of associated hardware, logging of subsystem data and public methods to control and monitor the subsystem. The file goes in robot/subsystems. - Add subsystem specific constants including preferences to the constants.java file in the robot folder. - Edit the RobotContainer.java file to instantiate the new subsystem, connect operator controller inputs to subsystem commands. We also need a method for other classes to get a reference to the subsystem - this is primarily for data logging and simulation. Add publishing of the subsystem data including commands via the [[training:software:sendable]] interface. - Add a subsystem model class to the sim folder for simulation and modify the top level RobotModel to run the new subsystem model. Add any new simulation constants to the sim/constants file.