Skip to content

Commit ad96ffd

Browse files
questnav
1 parent 32bb82c commit ad96ffd

5 files changed

Lines changed: 47 additions & 14 deletions

File tree

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public interface GyroIO {
2121
public static class GyroIOInputs {
2222
public boolean connected = false;
2323
public Rotation2d yawPosition = new Rotation2d();
24-
public double yawVelocityRadPerSec = 0.0;
2524
public double[] odometryYawTimestamps = new double[] {};
2625
public Rotation2d[] odometryYawPositions = new Rotation2d[] {};
2726
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313

1414
package frc.robot.subsystems.drive;
1515

16+
import java.util.Queue;
17+
1618
import com.studica.frc.AHRS;
1719
import com.studica.frc.AHRS.NavXComType;
20+
1821
import edu.wpi.first.math.geometry.Rotation2d;
19-
import edu.wpi.first.math.util.Units;
20-
import java.util.Queue;
2122

2223
/** IO implementation for NavX. */
2324
public class GyroIONavX implements GyroIO {
@@ -34,7 +35,6 @@ public GyroIONavX() {
3435
public void updateInputs(GyroIOInputs inputs) {
3536
inputs.connected = navX.isConnected();
3637
inputs.yawPosition = Rotation2d.fromDegrees(-navX.getYaw());
37-
inputs.yawVelocityRadPerSec = Units.degreesToRadians(-navX.getRawGyroZ());
3838

3939
inputs.odometryYawTimestamps =
4040
yawTimestampQueue.stream().mapToDouble((Double value) -> value).toArray();

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,39 +23,33 @@
2323
import com.ctre.phoenix6.hardware.Pigeon2;
2424

2525
import edu.wpi.first.math.geometry.Rotation2d;
26-
import edu.wpi.first.math.util.Units;
2726
import edu.wpi.first.units.measure.Angle;
28-
import edu.wpi.first.units.measure.AngularVelocity;
2927

3028
/** IO implementation for Pigeon 2. */
3129
public class GyroIOPigeon2 implements GyroIO {
3230
private final Pigeon2 pigeon;
3331
private final Queue<Double> yawPositionQueue;
3432
private final Queue<Double> yawTimestampQueue;
3533
private final StatusSignal<Angle> yaw;
36-
private final StatusSignal<AngularVelocity> yawVelocity;
3734

3835
public GyroIOPigeon2(int Pigeon2Id, CANBus bus) {
3936

4037
// Init Pigeon and Statuses
4138
pigeon = new Pigeon2(Pigeon2Id, bus);
4239
yaw = pigeon.getYaw();
43-
yawVelocity = pigeon.getAngularVelocityZWorld();
4440

4541
pigeon.getConfigurator().apply(new Pigeon2Configuration());
4642
pigeon.getConfigurator().setYaw(0.0);
4743
yaw.setUpdateFrequency(Drive.ODOMETRY_FREQUENCY);
48-
yawVelocity.setUpdateFrequency(50.0);
4944
pigeon.optimizeBusUtilization();
5045
yawTimestampQueue = PhoenixOdometryThread.getInstance().makeTimestampQueue();
51-
yawPositionQueue = PhoenixOdometryThread.getInstance().registerSignal(pigeon.getYaw());
46+
yawPositionQueue = PhoenixOdometryThread.getInstance().registerSignal(yaw.clone());
5247
}
5348

5449
@Override
5550
public void updateInputs(GyroIOInputs inputs) {
56-
inputs.connected = BaseStatusSignal.refreshAll(yaw, yawVelocity).equals(StatusCode.OK);
51+
inputs.connected = BaseStatusSignal.refreshAll(yaw).equals(StatusCode.OK);
5752
inputs.yawPosition = Rotation2d.fromDegrees(yaw.getValueAsDouble());
58-
inputs.yawVelocityRadPerSec = Units.degreesToRadians(yawVelocity.getValueAsDouble());
5953

6054
inputs.odometryYawTimestamps =
6155
yawTimestampQueue.stream().mapToDouble((Double value) -> value).toArray();
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package frc.robot.subsystems.drive;
2+
3+
import java.util.Queue;
4+
5+
import edu.wpi.first.math.geometry.Rotation2d;
6+
import frc.robot.subsystems.vision.QuestNav;
7+
8+
public class GyroIOQuest implements GyroIO {
9+
10+
private final QuestNav quest_;
11+
private final Queue<Double> yawPositionQueue_;
12+
private final Queue<Double> yawTimestampQueue_;
13+
14+
public GyroIOQuest() {
15+
quest_ = new QuestNav();
16+
yawTimestampQueue_ = PhoenixOdometryThread.getInstance().makeTimestampQueue();
17+
yawPositionQueue_ = PhoenixOdometryThread.getInstance().registerSignal(() -> getYaw().getRadians());
18+
}
19+
20+
@Override
21+
public void updateInputs(GyroIOInputs inputs) {
22+
inputs.connected = quest_.getConnected();
23+
inputs.yawPosition = getYaw();
24+
25+
inputs.odometryYawPositions = yawPositionQueue_
26+
.stream()
27+
.map(Rotation2d::fromRadians)
28+
.toArray(Rotation2d[]::new);
29+
30+
inputs.odometryYawTimestamps = yawTimestampQueue_
31+
.stream()
32+
.mapToDouble((Double d) -> d)
33+
.toArray();
34+
}
35+
36+
private Rotation2d getYaw() {
37+
return quest_.getPose().getRotation();
38+
}
39+
40+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,15 @@ public ModuleIOTalonFX(
159159
// Create drive status signals
160160
drivePosition = driveTalon.getPosition();
161161
drivePositionQueue =
162-
PhoenixOdometryThread.getInstance().registerSignal(driveTalon.getPosition());
162+
PhoenixOdometryThread.getInstance().registerSignal(drivePosition.clone());
163163
driveVelocity = driveTalon.getVelocity();
164164
driveAppliedVolts = driveTalon.getMotorVoltage();
165165
driveCurrent = driveTalon.getStatorCurrent();
166166

167167
// Create turn status signals
168168
turnAbsolutePosition = cancoder.getAbsolutePosition();
169169
turnPosition = turnTalon.getPosition();
170-
turnPositionQueue = PhoenixOdometryThread.getInstance().registerSignal(turnTalon.getPosition());
170+
turnPositionQueue = PhoenixOdometryThread.getInstance().registerSignal(turnPosition.clone());
171171
turnVelocity = turnTalon.getVelocity();
172172
turnAppliedVolts = turnTalon.getMotorVoltage();
173173
turnCurrent = turnTalon.getStatorCurrent();

0 commit comments

Comments
 (0)