From sensors to calculations - The evolution of precision in V3
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); } } }
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 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); }
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; }