Intake Subsystem Readme

Intake Subsystem

Overview

The intake subsystem spins rollers to pull Fuel from the carpet and push it into the feeder. It has no storage of its own — it is a pass-through that runs fast in teleop for cycle speed and stops when pieces are not wanted.

The arm that deploys and retracts the rollers is managed by the separate harvester subsystem. The two subsystems share no direct references and are composed through trigger bindings in RobotContainer.

How it works

The intake is the first mechanism a game piece touches after leaving the field. Rollers spin forward (positive RPM) to grab Fuel off the carpet and push it into the feeder, or reverse (negative RPM) to eject unwanted pieces back onto the field. When no command is active, the default idle command holds the rollers at 0 RPM.

Key classes

File Purpose
IntakeSubsystem.java Velocity subsystem with forward/reverse helpers
config/IntakeSubsystemConfig.java Forward/reverse RPM, PID, tolerance, and tunables
shared/config/MotorConfig.java CAN ID, gear ratio, current limit (inherited)
devices/IntakeMotor.java SparkMax velocity motor wrapper
devices/IntakeSimMotor.java Simulation velocity motor for testing
commands/IdleIntakeCommand.java Default command — holds idle RPM (0)
commands/EjectIntakeCommand.java Reverses rollers at configured eject RPM
commands/IntakeSubsystemCommandFactory.java Factory for idle, eject, intake, and continuous

Configuration

All velocities are stored in RPM in subsystems.json (and sim/test variants). The subsystem config provides tunable getters so speeds can be adjusted on the fly from Elastic without redeploying.

Setting Units Purpose
enabled Master enable flag
forwardVelocityRpm RPM Inward roller speed for collection
reverseVelocityRpm RPM Reverse roller speed for ejection
idleVelocityRpm RPM Speed when idle (typically 0)
maximumVelocityRpm RPM Motor velocity ceiling