Skip to content

Commit 9bc7a69

Browse files
authored
Merge pull request #8 from Programming-TRIGON/debugging
TorqueCurrent Sim Control Fix
2 parents 9b2c6f3 + 8f5b020 commit 9bc7a69

File tree

6 files changed

+35
-14
lines changed

6 files changed

+35
-14
lines changed

src/main/java/org/trigon/hardware/phoenix6/talonfx/io/SimulationTalonFXIO.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public void updateMotor() {
2626
return;
2727
physicsSimulation.setInputVoltage(motorSimState.getMotorVoltage());
2828
physicsSimulation.updateMotor();
29-
motorSimState.setRawRotorPosition(physicsSimulation.getPositionRotations());
30-
motorSimState.setRotorVelocity(physicsSimulation.getVelocityRotationsPerSecond());
29+
motorSimState.setRawRotorPosition(physicsSimulation.getRotorPositionRotations());
30+
motorSimState.setRotorVelocity(physicsSimulation.getRotorVelocityRotationsPerSecond());
3131
}
3232

3333
@Override
@@ -43,9 +43,11 @@ protected void setPosition(double positionRotations) {
4343
@Override
4444
public void applyConfiguration(TalonFXConfiguration configuration) {
4545
configuration.MotorOutput.Inverted = InvertedValue.CounterClockwise_Positive;
46-
configuration.Feedback.SensorToMechanismRatio = 1;
47-
configuration.Feedback.RotorToSensorRatio = 1;
4846
configuration.Feedback.FeedbackSensorSource = FeedbackSensorSourceValue.RotorSensor;
47+
if (configuration.Feedback.RotorToSensorRatio != 1.0) {
48+
configuration.Feedback.SensorToMechanismRatio *= configuration.Feedback.RotorToSensorRatio;
49+
configuration.Feedback.RotorToSensorRatio = 1.0;
50+
}
4951
talonFX.getConfigurator().apply(configuration);
5052
}
5153

src/main/java/org/trigon/hardware/simulation/ElevatorSimulation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class ElevatorSimulation extends MotorPhysicsSimulation {
1111
private final double diameterMeters;
1212

1313
public ElevatorSimulation(DCMotor gearbox, double gearRatio, double carriageMassKilograms, double drumRadiusMeters, double retractedHeightMeters, double maximumHeightMeters, boolean simulateGravity) {
14+
super(gearRatio);
1415
diameterMeters = drumRadiusMeters + drumRadiusMeters;
1516
this.retractedHeightMeters = retractedHeightMeters;
1617
elevatorSimulation = new ElevatorSim(
@@ -31,12 +32,12 @@ public double getCurrent() {
3132
}
3233

3334
@Override
34-
public double getPositionRotations() {
35+
public double getSystemPositionRotations() {
3536
return Conversions.distanceToRotations(elevatorSimulation.getPositionMeters() - retractedHeightMeters, diameterMeters);
3637
}
3738

3839
@Override
39-
public double getVelocityRotationsPerSecond() {
40+
public double getSystemVelocityRotationsPerSecond() {
4041
return Conversions.distanceToRotations(elevatorSimulation.getVelocityMetersPerSecond(), diameterMeters);
4142
}
4243

src/main/java/org/trigon/hardware/simulation/FlywheelSimulation.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ public class FlywheelSimulation extends MotorPhysicsSimulation {
1212
private double lastPositionRadians = 0;
1313

1414
public FlywheelSimulation(DCMotor gearbox, double gearRatio, double momentOfInertia) {
15+
super(gearRatio);
1516
flywheelSimulation = new FlywheelSim(gearbox, gearRatio, momentOfInertia);
1617
}
1718

1819
public FlywheelSimulation(DCMotor gearbox, double gearRatio, double kv, double ka) {
20+
super(gearRatio);
1921
flywheelSimulation = new FlywheelSim(LinearSystemId.identifyVelocitySystem(kv, ka), gearbox, gearRatio);
2022
}
2123

@@ -25,12 +27,12 @@ public double getCurrent() {
2527
}
2628

2729
@Override
28-
public double getPositionRotations() {
30+
public double getSystemPositionRotations() {
2931
return Units.radiansToRotations(lastPositionRadians);
3032
}
3133

3234
@Override
33-
public double getVelocityRotationsPerSecond() {
35+
public double getSystemVelocityRotationsPerSecond() {
3436
return Units.radiansToRotations(flywheelSimulation.getAngularVelocityRadPerSec());
3537
}
3638

src/main/java/org/trigon/hardware/simulation/MotorPhysicsSimulation.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,25 @@
44
* An abstract class to simulate the physics of a motor.
55
*/
66
public abstract class MotorPhysicsSimulation {
7+
private final double gearRatio;
8+
9+
MotorPhysicsSimulation(double gearRatio) {
10+
this.gearRatio = gearRatio;
11+
}
12+
13+
public double getRotorPositionRotations() {
14+
return getSystemPositionRotations() * gearRatio;
15+
}
16+
17+
public double getRotorVelocityRotationsPerSecond() {
18+
return getSystemVelocityRotationsPerSecond() * gearRatio;
19+
}
20+
721
public abstract double getCurrent();
822

9-
public abstract double getPositionRotations();
23+
public abstract double getSystemPositionRotations();
1024

11-
public abstract double getVelocityRotationsPerSecond();
25+
public abstract double getSystemVelocityRotationsPerSecond();
1226

1327
public abstract void setInputVoltage(double voltage);
1428

src/main/java/org/trigon/hardware/simulation/SimpleMotorSimulation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class SimpleMotorSimulation extends MotorPhysicsSimulation {
1010
private final DCMotorSim motorSimulation;
1111

1212
public SimpleMotorSimulation(DCMotor gearbox, double gearRatio, double momentOfInertia) {
13+
super(gearRatio);
1314
motorSimulation = new DCMotorSim(gearbox, gearRatio, momentOfInertia);
1415
}
1516

@@ -19,12 +20,12 @@ public double getCurrent() {
1920
}
2021

2122
@Override
22-
public double getPositionRotations() {
23+
public double getSystemPositionRotations() {
2324
return Units.radiansToRotations(motorSimulation.getAngularPositionRad());
2425
}
2526

2627
@Override
27-
public double getVelocityRotationsPerSecond() {
28+
public double getSystemVelocityRotationsPerSecond() {
2829
return Units.radiansToRotations(motorSimulation.getAngularVelocityRadPerSec());
2930
}
3031

src/main/java/org/trigon/hardware/simulation/SingleJointedArmSimulation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class SingleJointedArmSimulation extends MotorPhysicsSimulation {
1111
private final SingleJointedArmSim armSimulation;
1212

1313
public SingleJointedArmSimulation(DCMotor gearbox, double gearRatio, double armLengthMeters, double armMassKilograms, Rotation2d minimumAngle, Rotation2d maximumAngle, boolean simulateGravity) {
14+
super(gearRatio);
1415
armSimulation = new SingleJointedArmSim(
1516
gearbox,
1617
gearRatio,
@@ -29,12 +30,12 @@ public double getCurrent() {
2930
}
3031

3132
@Override
32-
public double getPositionRotations() {
33+
public double getSystemPositionRotations() {
3334
return Units.radiansToRotations(armSimulation.getAngleRads());
3435
}
3536

3637
@Override
37-
public double getVelocityRotationsPerSecond() {
38+
public double getSystemVelocityRotationsPerSecond() {
3839
return Units.radiansToRotations(armSimulation.getVelocityRadPerSec());
3940
}
4041

0 commit comments

Comments
 (0)