You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
2 weeks ago
|
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
|