Next-gen FIRST robotics codebase for efficient reef scoring automation π
- Drivetrain: Optimize swerve responsiveness + odometry accuracy.
- Path Planning: Seamless autonomous navigation via Path Planner.
- Vision: Real-time AprilTag tracking + multi-camera support.
- Tune PID + feedforward
- Real-world position conversion (meters via pulley ratios)
β Completed Items
- Subsystem framework
- Manual + PID control commands
- Motion profiling (
TrapezoidProfile) - Safety: Software limits + output clamping
π Code Snippets
// Position conversion
elevatorEncoder.setPositionConversionFactor(C_Elevator.ENCODER_DISTANCE_PER_PULSE);
elevatorEncoder.setVelocityConversionFactor(C_Elevator.ENCODER_VELOCITY_FACTOR);
- Tune PID + feedforward + motion profiling
- Implement safety checks for mechanism limits
- PID tuning
π Code Snippets
// Separate logic for CoralIn and AlgaeOut
if (mechanismType == MechanismType.ROLLER) {
// Roller-specific logic
rollerMotor.set(coralInSpeed);
} else if (mechanismType == MechanismType.BELT) {
// Belt-specific logic
beltMotor.set(algaeOutSpeed);
}
// Safety checks
if (isAtLimit()) {
motor.stop();
} else {
motor.set(desiredSpeed);
}β Completed Items
- Subsystem setup
- Support main wrist joint movement
- Support actual intake mechanism (e.g., rollers, belts)
- Manual + PID controls
- Separate CoralIn/AlgaeOut logic if mechanisms differ (e.g., rollers vs. belts).
- Full swerve diagnostic tuning
- Odometry calibration
- Path following optimization
β Completed Items
- Swerve base code (Advantage Kit)
- Constraint tuning
β Completed Items
- Path Planner evaluation
- Integration of Path Planner into codebase and test creation of basic paths (TI)
- Define robot constraints for path planning
- Implement basic path commands
- Implement basic event triggers for use in paths
- AssistedMove (e.g., aligning to AprilTags on the reef/barge)
- PipelineCommand to dynamically switch vision pipelines for different targets
π Code Snippets
// AssistedMove command
public class AssistedMove extends CommandBase {
private final Drivetrain drivetrain;
private final VisionSubsystem vision;
public AssistedMove(Drivetrain drivetrain, VisionSubsystem vision) {
this.drivetrain = drivetrain;
this.vision = vision;
addRequirements(drivetrain, vision);
}
@Override
public void initialize() {
vision.enableAprilTagTracking();
}
@Override
public void execute() {
Pose2d targetPose = vision.getAprilTagPose();
drivetrain.alignToPose(targetPose);
}
@Override
public void end(boolean interrupted) {
vision.disableAprilTagTracking();
}
@Override
public boolean isFinished() {
return drivetrain.isAligned();
}
}
// PipelineCommand to switch vision pipelines
public class PipelineCommand extends InstantCommand {
private final VisionSubsystem vision;
private final int pipeline;
public PipelineCommand(VisionSubsystem vision, int pipeline) {
this.vision = vision;
this.pipeline = pipeline;
}
@Override
public void initialize() {
vision.setPipeline(pipeline);
}
}β Completed Items
- Limelight selected (legacy compatibility)
- Advantage Kit + Limelight setup (BM)
- Dual camera configuration
- AprilTag pose estimation
- Subsystem setup
- Basic color control
- Pattern animations (e.g., rainbow, chase)
- Integrate with match events (e.g., alliance color, scoring feedback)
π Code Snippets
// Basic color control
public void setColor(Color color) {
ledStrip.set(color);
}
// Pattern animation example
public void setRainbowPattern() {
// Implementation for rainbow pattern
for (int i = 0; i < ledStrip.length(); i++) {
ledStrip.set(i, Color.getHSBColor((i / (float) ledStrip.length()), 1.0, 1.0));
}
ledStrip.show();
}β Completed Items
- None yet
- Elevator
- Vision
- π AprilTag Filtering
Gillbert: Swerve prototype base π§ͺdevelop: Active integration + testing πmain: Competition-ready stable releases π
- Protect Branches: Require PR reviews for
main/develop. - Develop in
develop: All features tested here first. - PR Reviews: Approved by leads (Max/Greg) before merging.
- Release to
main: Only after rigorous validation.
Made with β€οΈ by Team 4534 - The Wired Wizards