77import edu .wpi .first .math .MathUtil ;
88import edu .wpi .first .units .Units ;
99import edu .wpi .first .units .measure .*;
10+ import edu .wpi .first .wpilibj .Timer ;
1011import edu .wpi .first .wpilibj .smartdashboard .SmartDashboard ;
1112import edu .wpi .first .wpilibj2 .command .Command ;
1213import frc .robot .subsystems .drive .*;
@@ -22,12 +23,18 @@ public class VisionAutoCommand extends Command {
2223 private final Drivetrain kDrivetrain ;
2324 private final Time kRobotPeriod ;
2425
26+ private final Timer kTimer = new Timer ();
27+
2528 private boolean mIsDoneStafing = false ;
2629 private boolean mIsDoneMoving = false ;
30+
2731 private boolean mDoneAutoInit = false ;
2832
2933 private int mTargetDriveAprilTagId ;
3034
35+ private final int kTargetTag1 ;
36+ private final int kTargetTag2 ;
37+
3138 private AngularVelocity mAngularVelocity = Units .RadiansPerSecond .zero ();
3239 private LinearVelocity mStafeVelocity = Units .MetersPerSecond .zero ();
3340 private LinearVelocity mForwardVelocity = Units .MetersPerSecond .zero ();
@@ -45,6 +52,9 @@ public VisionAutoCommand(
4552 kDrivetrain = drivetrain ;
4653 kRobotPeriod = period ;
4754
55+ kTargetTag1 = targetTagId1 ;
56+ kTargetTag2 = targetTagId2 ;
57+
4858 mConfig = kVisionSubsystem .getConfigCopy ();
4959
5060 addRequirements (kDrivetrain , kVisionSubsystem );
@@ -60,12 +70,33 @@ public void initialize() {
6070 mIsDoneMoving = false ;
6171 mIsDoneStafing = false ;
6272
73+ mDoneAutoInit = false ;
74+
75+ // reset the timer
76+ kTimer .reset ();
77+ kTimer .start ();
78+
6379 }
6480
6581 @ Override
6682 public void execute () {
83+
84+ if (!mDoneAutoInit ) {
85+
86+ if ((int ) kVisionSubsystem .mLimelightTable .getEntry ("priorityid" ).getInteger (-1 ) == -1
87+ && kVisionSubsystem .getTagId () != -1 && (kVisionSubsystem .getTagId () == kTargetTag1 || kVisionSubsystem .getTagId () == kTargetTag2 )) {
88+
89+ mDoneAutoInit = true ;
6790
68- if (mTargetDriveAprilTagId == -1 )
91+ kVisionSubsystem .setFilter (kVisionSubsystem .getTagId ());
92+
93+ mTargetDriveAprilTagId = kVisionSubsystem .getTagId ();
94+
95+ System .out .println ("Going to: " + kVisionSubsystem .getTagId ());
96+ }
97+ }
98+
99+ if (mTargetDriveAprilTagId <= 0 || !mDoneAutoInit )
69100 return ;
70101
71102 Vision .VisionTagData data = kVisionSubsystem .robotDriveToAprilTag (mTargetDriveAprilTagId , mOffset );
@@ -180,15 +211,21 @@ public void execute() {
180211
181212 @ Override
182213 public boolean isFinished () {
214+ boolean limelightInitFailed = (kTimer .get () >= mConfig .LIMELIGHT_INIT_FAILED_TIME && !mDoneAutoInit );
215+
183216 // if (mIsDoneMoving && !mIsDoneStafing) {
184217 // System.out.println("stafing is holding us up");
185218 // } else if (mIsDoneStafing && !mIsDoneMoving) {
186219 // System.out.println("moving is holding us up");
187220 // }
188221
189- if ((mIsDoneStafing && mIsDoneMoving )) {
222+ if (limelightInitFailed ) {
223+ System .out .println ("Limelight init failed" );
224+ return true ;
225+
226+ } else if ((mIsDoneStafing && mIsDoneMoving )) {
190227
191- System .out .println ("Done" );
228+ System .out .println ("Done: " + kTimer . get () );
192229
193230 return true ;
194231 }
0 commit comments