3131 from robot import MyRobot
3232
3333
34+ class RollingBuffer :
35+ def __init__ (self , max_length : int ):
36+ self .max_length = max_length
37+
38+ self .buffer_ : list [float ] = []
39+
40+ def average (self ) -> float :
41+ return sum (self .buffer_ ) / len (self .buffer_ ) if len (self .buffer_ ) > 0 else 0.0
42+
43+ def add_sample (self , sample : float ):
44+ self .buffer_ .append (sample )
45+
46+ if len (self .buffer_ ) > self .max_length :
47+ self .buffer_ .pop (0 )
48+
49+
3450class SimpleTalonFXMotorSim :
3551 def __init__ (
3652 self , motor : phoenix6 .hardware .TalonFX , units_per_rev : float , kV : float
@@ -39,9 +55,16 @@ def __init__(
3955 self .sim_state .set_supply_voltage (12.0 )
4056 self .kV = kV # volt seconds per unit
4157 self .units_per_rev = units_per_rev
58+ self .voltage_buffer = RollingBuffer (10 )
4259
4360 def update (self , dt : float ) -> None :
4461 voltage = self .sim_state .motor_voltage
62+
63+ self .voltage_buffer .add_sample (voltage )
64+
65+ if math .isclose (self .voltage_buffer .average (), 0.0 , abs_tol = 0.1 ):
66+ voltage = 0.0
67+
4568 velocity = voltage / self .kV # units per second
4669 velocity_rps = velocity * self .units_per_rev
4770 self .sim_state .set_rotor_velocity (velocity_rps )
0 commit comments