|
6 | 6 |
|
7 | 7 | import static edu.wpi.first.wpilibj2.command.Commands.*; |
8 | 8 | import static frc.robot.Constants.*; |
9 | | -import static frc.robot.Constants.DriveConstants.*; |
10 | 9 | import static frc.robot.Constants.RobotConstants.*; |
11 | 10 | import static frc.robot.subsystems.PoseEstimationSubsystem.*; |
12 | 11 |
|
13 | 12 | import java.util.Arrays; |
14 | 13 | import java.util.LinkedList; |
15 | 14 | import java.util.List; |
16 | 15 | import java.util.Map; |
| 16 | +import java.util.function.DoubleSupplier; |
17 | 17 |
|
18 | 18 | import org.littletonrobotics.urcl.URCL; |
19 | 19 | import org.photonvision.PhotonCamera; |
20 | 20 |
|
21 | | -import edu.wpi.first.math.MathUtil; |
22 | | -import edu.wpi.first.math.controller.PIDController; |
23 | 21 | import edu.wpi.first.math.geometry.Pose2d; |
24 | 22 | import edu.wpi.first.math.geometry.Rotation2d; |
25 | 23 | import edu.wpi.first.math.geometry.Transform2d; |
26 | | -import edu.wpi.first.math.geometry.Translation2d; |
| 24 | +import edu.wpi.first.math.kinematics.ChassisSpeeds; |
27 | 25 | import edu.wpi.first.wpilibj.DataLogManager; |
28 | 26 | import edu.wpi.first.wpilibj.DriverStation; |
29 | 27 | import edu.wpi.first.wpilibj.PowerDistribution; |
@@ -113,7 +111,11 @@ public void bindDriveControls() { |
113 | 111 |
|
114 | 112 | m_driverController.button(Button.kLeftBumper) |
115 | 113 | .whileTrue( |
116 | | - driveToClosestTag(new Transform2d(0.5, 0, Rotation2d.fromDegrees(180)), 2)); |
| 114 | + driveWithAlignmentCommand( |
| 115 | + () -> -m_driverController.getLeftY(), |
| 116 | + () -> -m_driverController.getLeftX(), |
| 117 | + () -> m_driverController.getR2Axis() - m_driverController.getL2Axis(), |
| 118 | + new Transform2d(0.5, 0, Rotation2d.fromDegrees(180)), 2)); |
117 | 119 |
|
118 | 120 | // m_driverController.button(Button.kLeftBumper) |
119 | 121 | // .whileTrue( |
@@ -144,45 +146,14 @@ public void bindDriveControls() { |
144 | 146 | // robotToTarget, 12, 15, 14, 16, 17, 18, 19, 20, 21, 22)); |
145 | 147 | } |
146 | 148 |
|
147 | | - Command driveToClosestTag(Transform2d robotToTarget, double distanceThresholdInMeters) { |
148 | | - @SuppressWarnings("resource") |
149 | | - PIDController controllerXY = new PIDController(kDriveP, kDriveI, kDriveD); |
150 | | - controllerXY.setSetpoint(0); |
151 | | - |
152 | | - @SuppressWarnings("resource") |
153 | | - PIDController controllerYaw = new PIDController(kTurnP, kTurnI, kTurnD); |
154 | | - controllerYaw.enableContinuousInput(-180, 180); |
155 | | - controllerYaw.setSetpoint(0); |
| 149 | + Command driveWithAlignmentCommand(DoubleSupplier forwardSpeed, DoubleSupplier strafeSpeed, |
| 150 | + DoubleSupplier rotation, Transform2d robotToTarget, double distanceThresholdInMeters) { |
156 | 151 |
|
157 | 152 | return run(() -> { |
158 | | - |
159 | | - double fwdSpeed = MathUtil |
160 | | - .applyDeadband(-m_driverController.getLeftY(), ControllerConstants.kDeadzone); |
161 | | - fwdSpeed = Math.signum(fwdSpeed) * Math.pow(fwdSpeed, 2) * kDriveMaxSpeed; |
162 | | - |
163 | | - double strSpeed = MathUtil |
164 | | - .applyDeadband(-m_driverController.getLeftX(), ControllerConstants.kDeadzone); |
165 | | - strSpeed = Math.signum(strSpeed) * Math.pow(strSpeed, 2) * kDriveMaxSpeed; |
166 | | - |
167 | | - double rotSpeed = MathUtil.applyDeadband( |
168 | | - m_driverController.getR2Axis() - m_driverController.getL2Axis(), ControllerConstants.kDeadzone); |
169 | | - rotSpeed = Math.signum(rotSpeed) * Math.pow(rotSpeed, 2) * kTurnMaxAngularSpeed; |
170 | | - |
171 | | - var pose = m_poseEstimationSubystem.getEstimatedPose(); |
172 | | - |
173 | | - var targetPose = m_poseEstimationSubystem |
174 | | - .closestTagPose(180, distanceThresholdInMeters); |
175 | | - if (targetPose != null) { |
176 | | - targetPose = targetPose.plus(robotToTarget); |
177 | | - Translation2d t = targetPose.getTranslation().minus(pose.getTranslation()); |
178 | | - double speed = controllerXY.calculate(t.getNorm()); |
179 | | - t = t.getNorm() > 0 ? t.times(-speed / t.getNorm()) : t; // translation toward target |
180 | | - fwdSpeed += t.getX(); |
181 | | - strSpeed += t.getY(); |
182 | | - rotSpeed += -controllerYaw |
183 | | - .calculate(targetPose.getRotation().minus(pose.getRotation()).getDegrees()); |
184 | | - } |
185 | | - m_driveSubsystem.drive(fwdSpeed, strSpeed, rotSpeed, true); |
| 153 | + ChassisSpeeds speeds = DriveSubsystem.chassisSpeeds(forwardSpeed, strafeSpeed, rotation); |
| 154 | + speeds = speeds |
| 155 | + .plus(m_poseEstimationSubystem.chassisSpeedsToClosestTag(robotToTarget, distanceThresholdInMeters)); |
| 156 | + m_driveSubsystem.drive(speeds.plus(speeds), true); |
186 | 157 | }); |
187 | 158 | } |
188 | 159 |
|
|
0 commit comments