@@ -17,6 +17,8 @@ public class DeadeyeHuntCommand extends Command {
1717 private ProfiledPIDController deadeyeYDrive ;
1818 private PIDController deadeyeXDrive ;
1919 private LedSubsystem ledSubsystem ;
20+ private HuntState huntState ;
21+ private int seenNote = 0 ;
2022
2123 public DeadeyeHuntCommand (
2224 DeadEyeSubsystem deadeye ,
@@ -34,12 +36,13 @@ public DeadeyeHuntCommand(
3436 AutonConstants .kIDeadEyeYDrive ,
3537 AutonConstants .kDDeadEyeYDrive ,
3638 new Constraints (
37- AutonConstants .kMaxVelDeadeyeDrive , AutonConstants .kMaxAccelDeadeyeDrive ));
39+ AutonConstants .kMaxAutonVelDeadeyeDrive , AutonConstants .kMaxAccelDeadeyeDrive ));
3840 deadeyeXDrive =
3941 new PIDController (
4042 AutonConstants .kPDeadEyeXDrive ,
4143 AutonConstants .kIDeadEyeXDrive ,
4244 AutonConstants .kDDeadEyeXDrive );
45+ huntState = HuntState .SEARCHING ;
4346 }
4447
4548 @ Override
@@ -51,30 +54,49 @@ public void initialize() {
5154 double ySpeed = deadeyeYDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
5255 double xSpeed = deadeyeXDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
5356 driveSubsystem .move (AutonConstants .kXSpeed / (xSpeed * xSpeed + 1 ), ySpeed , 0.0 , false );
57+ seenNote ++;
5458 } else {
55- driveSubsystem .move (0.0 , 0.0 , - 4.0 , false );
59+ driveSubsystem .move (0.0 , 0.0 , AutonConstants . kDeadeyeHuntOmegaRadps , false );
5660 }
5761 }
5862
5963 @ Override
6064 public void execute () {
61- if (deadeye .getNumTargets () > 0 ) {
62- double ySpeed = deadeyeYDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
63- double xSpeed = deadeyeXDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
64- driveSubsystem .recordYVel (ySpeed );
65- driveSubsystem .move (AutonConstants .kXSpeed / (xSpeed * xSpeed + 1 ), ySpeed , 0.0 , false );
66- } else {
67- driveSubsystem .move (0.0 , 0.0 , -4.0 , false );
65+ switch (huntState ) {
66+ case SEARCHING :
67+ if (deadeye .getNumTargets () > 0 ) {
68+ seenNote ++;
69+ if (seenNote >= AutonConstants .kFoundNoteLoopCounts ) {
70+ huntState = HuntState .DRIVING ;
71+ }
72+ } else {
73+ driveSubsystem .move (0.0 , 0.0 , AutonConstants .kDeadeyeHuntOmegaRadps , false );
74+ seenNote = 0 ;
75+ }
76+ break ;
77+ case DRIVING :
78+ if (deadeye .getNumTargets () > 0 ) {
79+ double ySpeed = deadeyeYDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
80+ double xSpeed = deadeyeXDrive .calculate (deadeye .getDistanceToCamCenter (), 0.0 );
81+ driveSubsystem .recordYVel (ySpeed );
82+ driveSubsystem .move (AutonConstants .kXSpeed / (xSpeed * xSpeed + 1 ), ySpeed , 0.0 , false );
83+ }
84+ break ;
6885 }
6986 }
7087
7188 @ Override
7289 public void end (boolean interrupted ) {
73- driveSubsystem .move (0 , 0 , 0 , true );
90+ driveSubsystem .move (0 , 0 , 0 , false );
7491 }
7592
7693 @ Override
7794 public boolean isFinished () {
7895 return robotStateSubsystem .hasNote ();
7996 }
97+
98+ private enum HuntState {
99+ SEARCHING ,
100+ DRIVING
101+ }
80102}
0 commit comments