Members How to Start? About Robotics Achievements
Decode
Contact

🕹️ Tele-Op Control V3

Transitioned to a calculation-based system instead of sensors...
GateSystem.java
public class GateSystem {
    private ElapsedTime timer = new ElapsedTime();
    private double shooterRPM;
    
    public void update() {
        if (shooterRPM >= REQUIRED_RPM) {
            gate.setPosition(GATE_OPEN);
        } else {
            gate.setPosition(GATE_CLOSED);
        }
    }
    public class GateSystem {
    private ElapsedTime timer = new ElapsedTime();
    private double shooterRPM;
    
    public void update() {
        if (shooterRPM >= REQUIRED_RPM) {
            gate.setPosition(GATE_OPEN);
        } else {
            gate.setPosition(GATE_CLOSED);
        }
    }
}

🤖 Autonomous Performance V3

Auto Path V3
Implementation of PID Controller to control shooter speed...
17
Balls per cycle
3
Simultaneous shots
PIDController.java
public class PIDController {
    private double kP, kI, kD;
    private double integral, previousError;
    
    public double calculate(double setpoint, double current) {
        double error = setpoint - current;
        integral += error;
        double derivative = error - previousError;
        previousError = error;
        
        return (kP * error) + (kI * integral) + (kD * derivative);
    }
}

⚙️ PID Controller

A PID controller is a control system used to maintain constant RPM...
PIDTuning.java
// PID Tuning Example
double kP = 0.1;  // Proportional gain
double kI = 0.01; // Integral gain
double kD = 0.05; // Derivative gain

while (opModeIsActive()) {
    double currentRPM = shooter.getVelocity();
    double output = pid.calculate(TARGET_RPM, currentRPM);
    shooter.setPower(output);
}

🎯 Aiming + Tracking

The aiming and tracking system in V3 relies on integrating Odometry...
±0.5°
Aiming accuracy
50Hz
Update rate
Dynamic aiming while moving
DynamicAiming.java
public double calculateTurretAngle(Pose2d robotPose, Pose2d targetPose) {
    double dx = targetPose.getX() - robotPose.getX();
    double dy = targetPose.getY() - robotPose.getY();
    double targetAngle = Math.atan2(dy, dx);
    double robotHeading = robotPose.getHeading();
    
    return targetAngle - robotHeading;
}