11from ntcore import NetworkTableInstance
22from phoenix6 import SignalLogger , swerve , units
3- from wpilib import Color , Color8Bit , Mechanism2d , MechanismLigament2d , SmartDashboard
3+ from wpilib import Color , Color8Bit , Mechanism2d , MechanismLigament2d , SmartDashboard , Field2d
44from wpimath .geometry import Pose2d
55from wpimath .kinematics import ChassisSpeeds , SwerveModulePosition , SwerveModuleState
6+ import time
67
78class Telemetry :
89 def __init__ (self , max_speed : units .meters_per_second ):
@@ -17,6 +18,11 @@ def __init__(self, max_speed: units.meters_per_second):
1718
1819 # What to publish over networktables for telemetry
1920 self ._inst = NetworkTableInstance .getDefault ()
21+ self ._inst .startServer () # Start NetworkTables server for simulation
22+
23+ # Initialize Field2D object
24+ self ._field = Field2d ()
25+ SmartDashboard .putData ("Field" , self ._field )
2026
2127 # Robot swerve drive state
2228 self ._drive_state_table = self ._inst .getTable ("DriveState" )
@@ -107,10 +113,13 @@ def telemeterize(self, state: swerve.SwerveDrivetrain.SwerveDriveState):
107113 self ._field_type_pub .set ("Field2d" )
108114 self ._field_pub .set (pose_array )
109115
116+ # Update the Field2d object with the robot's pose
117+ self ._field .setRobotPose (state .pose )
118+
110119 # Telemeterize the module states to a Mechanism2d
111120 for i , module_state in enumerate (state .module_states ):
112121 self ._module_speeds [i ].setAngle (module_state .angle .degrees ())
113122 self ._module_directions [i ].setAngle (module_state .angle .degrees ())
114123 self ._module_speeds [i ].setLength (module_state .speed / (2 * self ._max_speed ))
115124
116- SmartDashboard .putData (f"Module { i } " , self ._module_mechanisms [i ])
125+ SmartDashboard .putData (f"Module { i } " , self ._module_mechanisms [i ])
0 commit comments