mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-09-10 18:23:44 +08:00
Update carcontroller.py
This commit is contained in:
@@ -59,6 +59,7 @@ class CarController(CarControllerBase):
|
||||
self.accel_g = 0.0
|
||||
self.regen_paddle_pressed = False
|
||||
self.aego = 0.0
|
||||
self.regen_disable_until = 0 # frame index until which regen spoof is blocked after a fault
|
||||
|
||||
def calc_pedal_command(self, accel: float, long_active: bool, car_velocity) -> Tuple[float, bool]:
|
||||
if not long_active:
|
||||
@@ -122,11 +123,16 @@ class CarController(CarControllerBase):
|
||||
self.regen_paddle_pressed
|
||||
)
|
||||
|
||||
# Send regen paddle and PRNDL2 commands at ~40Hz, avoiding steer frame timing
|
||||
steer_phase = self.last_steer_frame % 5
|
||||
send_paddle_and_prndl2 = (self.frame % 5) != steer_phase # Avoid steer frame
|
||||
send_every_other = self.frame % 2 == 0 # ~50Hz -> ~40Hz
|
||||
send_prndl_frame = send_paddle_and_prndl2 and send_every_other
|
||||
# If longActive just dropped (EPS error), block regen spoof for a cooldown period
|
||||
if not CC.longActive and getattr(self, "last_regen_active", False):
|
||||
# block for 50 frames (~0.5s)
|
||||
self.regen_disable_until = self.frame + 50
|
||||
|
||||
regen_active = regen_active and (self.frame >= self.regen_disable_until)
|
||||
|
||||
# Send regen paddle and PRNDL2 commands at ~66Hz, avoiding steer frame timing
|
||||
steer_phase = self.last_steer_frame % 3
|
||||
send_prndl_frame = (self.frame % 3) != steer_phase
|
||||
|
||||
press_regen_paddle = None
|
||||
if regen_active and send_prndl_frame:
|
||||
@@ -134,6 +140,11 @@ class CarController(CarControllerBase):
|
||||
elif not regen_active and getattr(self, "last_regen_active", False):
|
||||
press_regen_paddle = False
|
||||
|
||||
# Enforce at least 3-frame gap after last steer to avoid EPS faults
|
||||
frames_since_last_steer = self.frame - self.last_steer_frame
|
||||
if frames_since_last_steer < 3:
|
||||
press_regen_paddle = None
|
||||
|
||||
if press_regen_paddle is not None:
|
||||
can_sends.append(gmcan.create_prndl2_command(self.packer_pt, CanBus.POWERTRAIN, press_regen_paddle))
|
||||
can_sends.append(gmcan.create_regen_paddle_command(self.packer_pt, CanBus.POWERTRAIN, press_regen_paddle))
|
||||
|
||||
Reference in New Issue
Block a user