88import static edu .wpi .first .units .Units .Rotations ;
99
1010import com .ctre .phoenix6 .configs .TalonFXConfiguration ;
11- import com .ctre .phoenix6 .controls .Follower ;
1211import com .ctre .phoenix6 .hardware .TalonFX ;
1312import com .ctre .phoenix6 .signals .InvertedValue ;
14- import com .ctre .phoenix6 .signals .MotorAlignmentValue ;
1513import com .ctre .phoenix6 .signals .NeutralModeValue ;
1614import com .ctre .phoenix6 .sim .TalonFXSimState ;
1715import edu .wpi .first .epilogue .Logged ;
1816import edu .wpi .first .epilogue .Logged .Importance ;
1917import edu .wpi .first .math .system .plant .LinearSystemId ;
18+ import edu .wpi .first .networktables .DoublePublisher ;
19+ import edu .wpi .first .networktables .DoubleSubscriber ;
20+ import edu .wpi .first .networktables .NetworkTableInstance ;
2021import edu .wpi .first .wpilibj .RobotController ;
2122import edu .wpi .first .wpilibj .simulation .DCMotorSim ;
2223import edu .wpi .first .wpilibj2 .command .SubsystemBase ;
@@ -29,17 +30,27 @@ public class Indexer extends SubsystemBase {
2930 @ Logged (name = "Indexer Motor 1" , importance = Importance .INFO )
3031 private final TalonFX m_indexerMotor1 = new TalonFX (CAN .kIndexerMotor1 , CAN .driveBaseCanbus );
3132
32- @ Logged (name = "Indexer Motor 2" , importance = Importance .DEBUG )
33+ @ Logged (name = "Indexer Motor 2" , importance = Importance .INFO )
3334 private final TalonFX m_indexerMotor2 = new TalonFX (CAN .kIndexerMotor2 , CAN .driveBaseCanbus );
3435
3536 // @Logged(name = "Indexer Motor 3", importance = Importance.DEBUG)
3637 // private final TalonFX m_indexerMotor3 = new TalonFX(CAN.kIndexerMotor3);
3738
39+ private DoubleSubscriber m_speedSubscriber1 ;
40+ private DoublePublisher m_speedPublisher1 ;
41+ private DoubleSubscriber m_speedSubscriber2 ;
42+ private DoublePublisher m_speedPublisher2 ;
43+
3844 private final DCMotorSim m_indexerMotor1Sim =
3945 new DCMotorSim (
4046 LinearSystemId .createDCMotorSystem (INDEXER .gearbox , INDEXER .kInertia , INDEXER .gearRatio ),
4147 INDEXER .gearbox );
42- private final TalonFXSimState m_simState ;
48+ private final DCMotorSim m_indexerMotor2Sim =
49+ new DCMotorSim (
50+ LinearSystemId .createDCMotorSystem (INDEXER .gearbox , INDEXER .kInertia , INDEXER .gearRatio ),
51+ INDEXER .gearbox );
52+ private final TalonFXSimState m_simState1 ;
53+ private final TalonFXSimState m_simState2 ;
4354
4455 /** Creates a new Indexer. */
4556 public Indexer () {
@@ -54,42 +65,80 @@ public Indexer() {
5465 config .CurrentLimits .StatorCurrentLimit = 60 ;
5566 config .CurrentLimits .StatorCurrentLimitEnable = true ;
5667 CtreUtils .configureTalonFx (m_indexerMotor1 , config );
68+ config .MotorOutput .Inverted = InvertedValue .Clockwise_Positive ;
5769 CtreUtils .configureTalonFx (m_indexerMotor2 , config );
5870
59- m_indexerMotor2 .setControl (
60- new Follower (m_indexerMotor1 .getDeviceID (), MotorAlignmentValue .Opposed ));
71+ // m_indexerMotor2.setControl(
72+ // new Follower(m_indexerMotor1.getDeviceID(), MotorAlignmentValue.Opposed));
6173 // m_indexerMotor3.setControl(
6274 // new Follower(m_indexerMotor1.getDeviceID(), MotorAlignmentValue.Aligned));
6375
64- m_simState = m_indexerMotor1 .getSimState ();
76+ m_simState1 = m_indexerMotor1 .getSimState ();
77+ m_simState2 = m_indexerMotor2 .getSimState ();
6578 }
6679
67- public void setSpeed (double speed ) {
68- m_indexerMotor1 .set (speed );
80+ public void setSpeeds (double speed1 , double speed2 ) {
81+ m_indexerMotor1 .set (speed1 );
82+ m_indexerMotor2 .set (speed2 );
6983 }
7084
7185 public boolean isConnected () {
72- return m_indexerMotor1 .isConnected ();
86+ return m_indexerMotor1 .isConnected () && m_indexerMotor2 . isConnected () ;
7387 }
7488
75- @ Logged (name = "Motor Output" , importance = Logged .Importance .INFO )
89+ @ Logged (name = "Motor Output 1 " , importance = Logged .Importance .INFO )
7690 public double getPercentOutput () {
7791 return m_indexerMotor1 .get ();
7892 }
7993
94+ @ Logged (name = "Motor Output 2" , importance = Logged .Importance .INFO )
95+ public double getPercentOutput2 () {
96+ return m_indexerMotor2 .get ();
97+ }
98+
8099 @ Override
81100 public void periodic () {}
82101
83102 @ Override
84103 public void simulationPeriodic () {
85- m_simState .setSupplyVoltage (RobotController .getBatteryVoltage ());
86- m_indexerMotor1Sim .setInputVoltage (m_simState .getMotorVoltage ());
104+ m_simState1 .setSupplyVoltage (RobotController .getBatteryVoltage ());
105+ m_indexerMotor1Sim .setInputVoltage (m_simState1 .getMotorVoltage ());
87106
88107 m_indexerMotor1Sim .update (0.02 );
89108
90- m_simState .setRawRotorPosition (
109+ m_simState1 .setRawRotorPosition (
91110 Rotations .of (m_indexerMotor1Sim .getAngularPositionRotations ()).times (INDEXER .gearRatio ));
92- m_simState .setRotorVelocity (
111+ m_simState1 .setRotorVelocity (
93112 RPM .of (m_indexerMotor1Sim .getAngularVelocityRPM ()).times (INDEXER .gearRatio ));
113+ m_simState2 .setSupplyVoltage (RobotController .getBatteryVoltage ());
114+ m_indexerMotor2Sim .setInputVoltage (m_simState2 .getMotorVoltage ());
115+
116+ m_indexerMotor2Sim .update (0.02 );
117+
118+ m_simState2 .setRawRotorPosition (
119+ Rotations .of (m_indexerMotor2Sim .getAngularPositionRotations ()).times (INDEXER .gearRatio ));
120+ m_simState2 .setRotorVelocity (
121+ RPM .of (m_indexerMotor2Sim .getAngularVelocityRPM ()).times (INDEXER .gearRatio ));
122+ }
123+
124+ public void testInit () {
125+ var topic =
126+ NetworkTableInstance .getDefault ()
127+ .getTable ("SmartDashboard" )
128+ .getDoubleTopic ("Indexer Roller Speed Setpoint 1" );
129+ m_speedSubscriber1 = topic .subscribe (0.0 );
130+ m_speedPublisher1 = topic .publish ();
131+ var topic2 =
132+ NetworkTableInstance .getDefault ()
133+ .getTable ("SmartDashboard" )
134+ .getDoubleTopic ("Indexer Roller Speed Setpoint 2" );
135+ m_speedSubscriber2 = topic2 .subscribe (0.0 );
136+ m_speedPublisher2 = topic2 .publish ();
137+ m_speedPublisher1 .set (0.0 );
138+ m_speedPublisher2 .set (0.0 );
139+ }
140+
141+ public void testPeriodic () {
142+ setSpeeds (m_speedSubscriber1 .get (), m_speedSubscriber2 .get ());
94143 }
95144}
0 commit comments