Skip to content

Commit 97eaf1e

Browse files
committed
add averaging buffer to handle sim weirdness around stationary
1 parent df8f0dd commit 97eaf1e

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

physics.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,22 @@
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+
3450
class 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

Comments
 (0)