--- /dev/null
+package frc.robot.commands.gpm;
+
+public class FieldConstants {
+
+}
--- /dev/null
+package frc.robot.commands.gpm;
+
+import edu.wpi.first.math.geometry.Translation2d;
+import edu.wpi.first.math.util.Units;
+import edu.wpi.first.wpilibj.DriverStation.Alliance;
+import edu.wpi.first.wpilibj2.command.Command;
+import frc.robot.Robot;
+import frc.robot.constants.FieldConstants;
+import frc.robot.subsystems.drivetrain.Drivetrain;
+import frc.robot.subsystems.turret.Turret;
+import frc.robot.util.Vision.TurretVision;
+
+public class TurretAutoShoot extends Command {
+ private Turret turret;
+ private Drivetrain drivetrain;
+ private TurretVision turretVision;
+
+ double turretSetpoint;
+ double yawToTagCamera;
+ double yawToTag;
+
+ public TurretAutoShoot(Turret turret, Drivetrain drivetrain, TurretVision turretVision){
+ this.turret = turret;
+ this.drivetrain = drivetrain;
+ this.turretVision = turretVision;
+ }
+
+ public void align() {
+ Translation2d drivepose = drivetrain.getPose().getTranslation();
+ Translation2d target = FieldConstants.HUB_TRANSLATION3D.toTranslation2d();
+ double D_y = target.getY() - drivepose.getY();
+ double D_x = target.getX() - drivepose.getX();
+ double angleRad = Math.atan2(D_y, D_x);
+ System.out.println("Aligning the turn to degree angle: " + Units.radiansToDegrees(angleRad));
+ turretSetpoint = Units.radiansToDegrees(angleRad);
+ }
+
+ public void adjustWithTurretCam(){
+ if(Robot.getAlliance() == Alliance.Blue){
+ yawToTagCamera = turretVision.getYawToTagRad(26).get();
+ }
+ else{
+ yawToTagCamera = turretVision.getYawToTagRad(10).get();
+ }
+
+
+ }
+
+ public void updateYawToTag(){
+ double D_y = FieldConstants.HUB_TRANSLATION3D.getY() - drivetrain.getPose().getY();
+ double D_x = FieldConstants.HUB_TRANSLATION3D.getX() - drivetrain.getPose().getX();
+ double angleToTag = Units.radiansToDegrees(Math.atan())
+ }
+
+ @Override
+ public void initialize() {
+ // TODO Auto-generated method stub
+ super.initialize();
+ }
+
+ @Override
+ public void execute() {
+ // TODO Auto-generated method stub
+ super.execute();
+ }
+
+ @Override
+ public void end(boolean interrupted) {
+ // TODO Auto-generated method stub
+ super.end(interrupted);
+ }
+
+
+}
}
}
- public void align() {
- Translation2d drivepose = drivetrain.getPose().getTranslation();
- // Using tag #??
- int tagNumber = 17;
- Translation2d tagpose = FieldConstants.field.getTagPose(tagNumber ).get().toPose2d().getTranslation();
- double D_y = tagpose.getY() - drivepose.getY();
- double D_x = tagpose.getX() - drivepose.getX();
- double angleRad = Math.atan2(D_y, D_x);
- System.out.println("Aligning the turn to degree angle: " + Units.radiansToDegrees(angleRad));
- setSetpoint(Units.radiansToDegrees(angleRad));
- }
-
@Override
public void periodic() {
position = Units.rotationsToDegrees(motor.getPosition().getValueAsDouble()) / gearRatio; // Gear Ratio
velocity = Units.rotationsPerMinuteToRadiansPerSecond(motor.getVelocity().getValueAsDouble() * 60);
-
- // SmartDashboard.putNumber("Turret Position", position);
- if (alignOn) {
- align();
- }
ligament2d.setAngle(position);
}
--- /dev/null
+package frc.robot.util.Vision;
+
+import java.util.Optional;
+
+import org.photonvision.PhotonCamera;
+import org.photonvision.targeting.PhotonPipelineResult;
+import org.photonvision.targeting.PhotonTrackedTarget;
+
+import edu.wpi.first.math.util.Units;
+
+public class TurretVision {
+
+ private final PhotonCamera camera;
+
+ public TurretVision(String cameraName) {
+ camera = new PhotonCamera(cameraName);
+ }
+
+ /**
+ * @param tagId AprilTag ID to aim at
+ * @return Optional yaw error in radians (positive = target to the right, negative = target to the left)
+ */
+ public Optional<Double> getYawToTagRad(int tagId) {
+ PhotonPipelineResult result = camera.getLatestResult();
+
+ if (!result.hasTargets()) {
+ return Optional.empty();
+ }
+
+ for (PhotonTrackedTarget target : result.getTargets()) {
+ if (target.getFiducialId() == tagId) {
+ // PhotonVision yaw is in DEGREES
+ double yawRad = Units.degreesToRadians(target.getYaw());
+ return Optional.of(yawRad);
+ }
+ }
+
+ return Optional.empty();
+ }
+
+ public boolean canSeeTag(int tagId) {
+ PhotonPipelineResult result = camera.getLatestResult();
+ if (!result.hasTargets()) return false;
+
+ for (PhotonTrackedTarget target : result.getTargets()) {
+ if (target.getFiducialId() == tagId) {
+ return true;
+ }
+ }
+ return false;
+ }
+}