Skip to content
This repository was archived by the owner on Jan 10, 2025. It is now read-only.

Commit 0ca70df

Browse files
vision bringup
1 parent 1168ae8 commit 0ca70df

File tree

3 files changed

+28
-39
lines changed

3 files changed

+28
-39
lines changed

src/main/java/frc/robot/Robot.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public class Robot extends TimedRobot {
3939
new IntakeSubsystem(hardware.intakeMain, hardware.intakeCenteringMotor);
4040
private final SwerveSubsystem swerve = new SwerveSubsystem();
4141
private final ImuSubsystem imu = new ImuSubsystem(swerve.drivetrainPigeon);
42-
private final Limelight leftLimelight = new Limelight();
43-
private final Limelight rightLimelight = new Limelight();
42+
private final Limelight leftLimelight = new Limelight("left");
43+
private final Limelight rightLimelight = new Limelight("right");
4444

4545
private final VisionSubsystem vision = new VisionSubsystem(imu, leftLimelight, rightLimelight);
4646
private final LocalizationSubsystem localization = new LocalizationSubsystem(imu, vision, swerve);
Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,43 @@
11
package frc.robot.vision;
22

33
import edu.wpi.first.math.geometry.Pose2d;
4+
import frc.robot.vision.LimelightHelpers.LimelightResults;
45
import frc.robot.vision.interpolation.InterpolatedVision;
56
import java.util.Optional;
67

8+
import dev.doglog.DogLog;
9+
710
public class Limelight {
811
private Optional<VisionResult> rawVisionResult;
912
private Optional<VisionResult> processedVisionResult;
10-
public String limeLightName = "";
11-
12-
public Optional<VisionResult> getRawVisionResult() {
13-
var estimatePose = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2(limeLightName);
13+
private final String limelightTableName;
14+
private final String name;
1415

15-
if (estimatePose == null) {
16-
return Optional.empty();
17-
}
16+
public Limelight(String name) {
17+
limelightTableName = "limelight-" + name;
18+
this.name = name;
19+
}
1820

19-
if (estimatePose.tagCount == 0) {
20-
return Optional.empty();
21-
}
21+
public Optional<VisionResult> getInterpolatedVisionResult() {
22+
var rawResult = getRawVisionResult();
2223

23-
// This prevents pose estimator from having crazy poses if the Limelight loses power
24-
if (estimatePose.pose.getX() == 0.0 && estimatePose.pose.getY() == 0.0) {
24+
if (rawResult.isEmpty()) {
2525
return Optional.empty();
2626
}
27-
28-
return Optional.of(new VisionResult(estimatePose.pose, estimatePose.timestampSeconds));
27+
28+
Pose2d interpolatedPose = InterpolatedVision.interpolatePose(rawResult.get().pose());
29+
return Optional.of(new VisionResult(interpolatedPose, rawResult.get().timestamp()));
2930
}
3031

31-
public Optional<VisionResult> getInterpolatedVisionResult() {
32-
var estimatePose = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2(limeLightName);
32+
private Optional<VisionResult> getRawVisionResult() {
33+
var estimatePose = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2(limelightTableName);
3334

3435
if (estimatePose == null) {
3536
return Optional.empty();
3637
}
3738

39+
DogLog.log("Vision/" + name + "/RawLimelightPose", estimatePose.pose);
40+
3841
if (estimatePose.tagCount == 0) {
3942
return Optional.empty();
4043
}
@@ -43,7 +46,7 @@ public Optional<VisionResult> getInterpolatedVisionResult() {
4346
if (estimatePose.pose.getX() == 0.0 && estimatePose.pose.getY() == 0.0) {
4447
return Optional.empty();
4548
}
46-
Pose2d interpolatedPose = InterpolatedVision.interpolatePose(estimatePose.pose);
47-
return Optional.of(new VisionResult(interpolatedPose, estimatePose.timestampSeconds));
49+
50+
return Optional.of(new VisionResult(estimatePose.pose, estimatePose.timestampSeconds));
4851
}
4952
}

src/main/java/frc/robot/vision/VisionSubsystem.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
import java.util.ArrayList;
77
import java.util.List;
88

9+
import dev.doglog.DogLog;
10+
911
public class VisionSubsystem extends StateMachine<VisionState> {
1012
private final ImuSubsystem imu;
1113
private final Limelight leftLimelight;
1214
private final Limelight rightLimelight;
13-
private final List<VisionResult> processedVisionResult = new ArrayList<>();
1415
private final List<VisionResult> interpolatedVisionResult = new ArrayList<>();
1516

1617
public VisionSubsystem(ImuSubsystem imu, Limelight leftLimelight, Limelight rightLimelight) {
@@ -22,19 +23,13 @@ public VisionSubsystem(ImuSubsystem imu, Limelight leftLimelight, Limelight righ
2223

2324
@Override
2425
protected void collectInputs() {
25-
var leftResult = leftLimelight.getRawVisionResult();
26-
var rightResult = rightLimelight.getRawVisionResult();
2726
var leftInterpolatedVisionResult = leftLimelight.getInterpolatedVisionResult();
2827
var rightInterpolatedVisionResult = rightLimelight.getInterpolatedVisionResult();
2928

30-
processedVisionResult.clear();
3129

32-
if (leftResult.isPresent()) {
33-
processedVisionResult.add(leftResult.get());
34-
}
35-
if (rightResult.isPresent()) {
36-
processedVisionResult.add(rightResult.get());
37-
}
30+
31+
interpolatedVisionResult.clear();
32+
3833
if (leftInterpolatedVisionResult.isPresent()) {
3934
interpolatedVisionResult.add(leftInterpolatedVisionResult.get());
4035
}
@@ -43,16 +38,7 @@ protected void collectInputs() {
4338
}
4439
}
4540

46-
public List<VisionResult> getVisionResult() {
47-
return processedVisionResult;
48-
}
49-
5041
public List<VisionResult> getInterpolatedVisionResult() {
5142
return interpolatedVisionResult;
5243
}
53-
54-
@Override
55-
public void robotPeriodic() {
56-
super.robotPeriodic();
57-
}
5844
}

0 commit comments

Comments
 (0)