openpilot/opendbc_repo/opendbc/car/psa/carcontroller.py
Vehicle Researcher c5d5c5d1f3 openpilot v0.10.1 release
date: 2025-10-24T00:30:59
master commit: 405631baf9685e171a0dd19547cb763f1b163d18
2025-10-24 00:31:03 -07:00

42 lines
1.5 KiB
Python

from opendbc.can.packer import CANPacker
from opendbc.car import Bus
from opendbc.car.lateral import apply_std_steer_angle_limits
from opendbc.car.interfaces import CarControllerBase
from opendbc.car.psa.psacan import create_lka_steering
from opendbc.car.psa.values import CarControllerParams
class CarController(CarControllerBase):
def __init__(self, dbc_names, CP):
super().__init__(dbc_names, CP)
self.packer = CANPacker(dbc_names[Bus.main])
self.apply_angle_last = 0
self.status = 2
def update(self, CC, CS, now_nanos):
can_sends = []
actuators = CC.actuators
# lateral control
if self.frame % 5 == 0:
apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw,
CS.out.steeringAngleDeg, CC.latActive, CarControllerParams.ANGLE_LIMITS)
# EPS disengages on steering override, activation sequence 2->3->4 to re-engage
# STATUS - 0: UNAVAILABLE, 1: UNSELECTED, 2: READY, 3: AUTHORIZED, 4: ACTIVE
if not CC.latActive:
self.status = 2
elif not CS.eps_active and not CS.out.steeringPressed:
self.status = 2 if self.status == 4 else self.status + 1
else:
self.status = 4
can_sends.append(create_lka_steering(self.packer, CC.latActive, apply_angle, self.status))
self.apply_angle_last = apply_angle
new_actuators = actuators.as_builder()
new_actuators.steeringAngleDeg = self.apply_angle_last
self.frame += 1
return new_actuators, can_sends