Skip to content

Commit 61e6181

Browse files
committed
add auto-alignment and creep
1 parent 13e9465 commit 61e6181

File tree

5 files changed

+52
-11
lines changed

5 files changed

+52
-11
lines changed

src/main/java/frc/robot/Constants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public static class EFCConstants{
7272

7373
public static class ArmConstants{
7474

75-
public static final double armkP = 0.3;
75+
public static final double armkP = 0.8;
7676
public static final double armkI = 0.1;
7777
public static final double armkD = 0.0;
7878
public static final double armIZone = 0.15;

src/main/java/frc/robot/RobotContainer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class RobotContainer {
3939
PneumaticControlSub pneumaticControlSub = new PneumaticControlSub();
4040

4141

42-
VisionSubsystem visionSub = new VisionSubsystem();
42+
VisionSubsystem visionSub = new VisionSubsystem(stateController);
4343

4444
SendableChooser<Command> autoChooser = new SendableChooser<>();
4545

src/main/java/frc/robot/StateControllerSub.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ public StateControllerSub(){
215215
SmartDashboard.putBoolean("alignWhenClose",alignWhenCloseEnabled);
216216

217217

218+
218219
}
219220

220221
double climbAngle = 0.0;
@@ -297,14 +298,25 @@ public void setDuckMode(boolean down){
297298
public boolean alignWhenClose() {
298299
if(objective == Objective.SPEAKER && distanceToMySpeaker() < 6)
299300
return alignWhenCloseEnabled;
301+
if(armState == ArmState.INTAKE)
302+
return alignWhenCloseEnabled;
300303
return false;
301304
}
302305

303306

304307

305-
public double alignWhenCloseAngDiff() {
308+
public double
309+
alignWhenCloseAngDiff() {
310+
if(armState == ArmState.INTAKE){
311+
return noteAlignAngleDiff;
312+
}
306313
return MBUtils.angleDiffRad(angleToObjective(objective),robotPose.getRotation().getRadians());
307314
}
315+
double noteAlignAngleDiff = 0;
316+
317+
public void feedNoteAlignAngleDiff(double noteAlignAngleDiff){
318+
this.noteAlignAngleDiff = noteAlignAngleDiff;
319+
}
308320

309321

310322

src/main/java/frc/robot/subsystems/drive/SwerveSubsystem.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ public SwerveModulePosition[] getPositions(){
131131

132132
public void joystickDrive(double joystickX, double joystickY, double rad){
133133

134+
double rawJoyHypot = Math.hypot(joystickX,joystickY);
135+
134136
if(Math.abs(rad)<controllerDeadband)
135137
rad = 0;
136138

@@ -182,9 +184,18 @@ public void joystickDrive(double joystickX, double joystickY, double rad){
182184

183185

184186

185-
if(stateController.alignWhenClose() && stateController.getArmState() != StateControllerSub.ArmState.INTAKE && stateController.getArmState() != StateControllerSub.ArmState.HOLD)
187+
if(stateController.alignWhenClose() && stateController.getArmState() != StateControllerSub.ArmState.HOLD)
186188
rad+=MBUtils.clamp(stateController.alignWhenCloseAngDiff() * alignmentkP,1);
187189

190+
double creep = 0;
191+
192+
if(stateController.getArmState() == StateControllerSub.ArmState.INTAKE && rawJoyHypot<0.1)
193+
creep = -0.3;
194+
195+
SmartDashboard.putNumber("rawJoyHypot",rawJoyHypot);
196+
197+
SmartDashboard.putNumber("alignWhenCloseAngDiff",stateController.alignWhenCloseAngDiff());
198+
188199

189200

190201
/* Angular adjustment stuff */
@@ -194,7 +205,7 @@ public void joystickDrive(double joystickX, double joystickY, double rad){
194205

195206

196207

197-
drive(-joystickY ,-joystickX ,-rad);
208+
drive(-joystickY + creep ,-joystickX ,-rad);
198209
}
199210

200211

src/main/java/frc/robot/subsystems/drive/VisionSubsystem.java

+24-6
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import edu.wpi.first.apriltag.AprilTagFields;
66
import edu.wpi.first.math.geometry.*;
77
import edu.wpi.first.math.util.Units;
8-
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
98
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
109
import edu.wpi.first.wpilibj2.command.SubsystemBase;
10+
import frc.robot.StateControllerSub;
1111
import org.photonvision.EstimatedRobotPose;
1212
import org.photonvision.PhotonCamera;
1313
import org.photonvision.PhotonPoseEstimator;
14+
import org.photonvision.targeting.PhotonTrackedTarget;
1415

16+
import java.util.List;
1517
import java.util.Optional;
1618

1719
public class VisionSubsystem extends SubsystemBase {
@@ -20,28 +22,32 @@ public class VisionSubsystem extends SubsystemBase {
2022

2123

2224
AprilTagFieldLayout aprilTagFieldLayout;
23-
PhotonCamera cam;
25+
PhotonCamera shooterSideArducam;
26+
27+
PhotonCamera intakeAssistCamera = new PhotonCamera("intake_assist_scary");
2428
PhotonPoseEstimator photonPoseEstimator;
25-
public VisionSubsystem() {
2629

27-
// SmartDashboard.putData("poseStrategy",selectedPoseStrategy);
30+
StateControllerSub stateControllerSub;
31+
public VisionSubsystem(StateControllerSub stateControllerSub) {
2832

33+
// SmartDashboard.putData("poseStrategy",selectedPoseStrategy);
2934
try{
3035
aprilTagFieldLayout = AprilTagFieldLayout.loadFromResource(AprilTagFields.k2024Crescendo.m_resourceFile);
3136
}catch (Exception e){
3237
e.printStackTrace();
3338
}
3439

35-
cam = new PhotonCamera("Arducam_OV2311_USB_Camera");
40+
shooterSideArducam = new PhotonCamera("Arducam_OV2311_shooter");
3641
Transform3d robotToCam = new Transform3d(new Translation3d(0.357,0.076,0.224), new Rotation3d(0,Units.degreesToRadians(-30),0));
37-
photonPoseEstimator = new PhotonPoseEstimator(aprilTagFieldLayout, PhotonPoseEstimator.PoseStrategy.MULTI_TAG_PNP_ON_COPROCESSOR, cam, robotToCam);
42+
photonPoseEstimator = new PhotonPoseEstimator(aprilTagFieldLayout, PhotonPoseEstimator.PoseStrategy.MULTI_TAG_PNP_ON_COPROCESSOR, shooterSideArducam, robotToCam);
3843
// photonPoseEstimator.setPrimaryStrategy();
3944
photonPoseEstimator.setMultiTagFallbackStrategy(PhotonPoseEstimator.PoseStrategy.LOWEST_AMBIGUITY);
4045

4146
//1st + is cam forward
4247
//2nd + is cam to left
4348
//3rd + is cam up
4449

50+
this.stateControllerSub = stateControllerSub;
4551

4652
}
4753

@@ -54,8 +60,20 @@ public Optional<EstimatedRobotPose> getEstimatedGlobalPose(Pose2d prevEstimatedR
5460

5561
}
5662

63+
64+
65+
5766
public void periodic(){
5867

68+
List<PhotonTrackedTarget> targets = intakeAssistCamera.getLatestResult().getTargets();
69+
double assistAngle = 0;
70+
if(!targets.isEmpty())
71+
assistAngle = Units.degreesToRadians(targets.get(0).getYaw());
72+
stateControllerSub.feedNoteAlignAngleDiff(assistAngle);
73+
74+
SmartDashboard.putNumber("noteAssistAngle",assistAngle);
75+
76+
5977
}
6078

6179

0 commit comments

Comments
 (0)