Fix some car typing (#33256)

* ??

* fix these

* more typing and some fixes

* fix

* rm this for now

* fix
old-commit-hash: 2dab8b31f2
pull/33302/head
Shane Smiskol 10 months ago committed by GitHub
parent ac9370addc
commit b014b1cc90
  1. 3
      selfdrive/car/hyundai/carcontroller.py
  2. 24
      selfdrive/car/interfaces.py
  3. 5
      selfdrive/car/mock/carstate.py
  4. 6
      selfdrive/car/subaru/tests/test_subaru.py

@ -4,6 +4,7 @@ from openpilot.selfdrive.car import DT_CTRL, apply_driver_steer_torque_limits, c
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.helpers import clip from openpilot.selfdrive.car.helpers import clip
from openpilot.selfdrive.car.hyundai import hyundaicanfd, hyundaican from openpilot.selfdrive.car.hyundai import hyundaicanfd, hyundaican
from openpilot.selfdrive.car.hyundai.carstate import CarState
from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus
from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CANFD_CAR, CAR from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CANFD_CAR, CAR
from openpilot.selfdrive.car.interfaces import CarControllerBase from openpilot.selfdrive.car.interfaces import CarControllerBase
@ -169,7 +170,7 @@ class CarController(CarControllerBase):
self.frame += 1 self.frame += 1
return new_actuators, can_sends return new_actuators, can_sends
def create_button_messages(self, CC: car.CarControl, CS: car.CarState, use_clu11: bool): def create_button_messages(self, CC: car.CarControl, CS: CarState, use_clu11: bool):
can_sends = [] can_sends = []
if use_clu11: if use_clu11:
if CC.cruiseControl.cancel: if CC.cruiseControl.cancel:

@ -87,7 +87,7 @@ def get_torque_params():
# generic car and radar interfaces # generic car and radar interfaces
class CarInterfaceBase(ABC): class CarInterfaceBase(ABC):
def __init__(self, CP, CarController, CarState): def __init__(self, CP: car.CarParams, CarController, CarState):
self.CP = CP self.CP = CP
self.frame = 0 self.frame = 0
@ -97,7 +97,7 @@ class CarInterfaceBase(ABC):
self.silent_steer_warning = True self.silent_steer_warning = True
self.v_ego_cluster_seen = False self.v_ego_cluster_seen = False
self.CS = CarState(CP) self.CS: CarStateBase = CarState(CP)
self.cp = self.CS.get_can_parser(CP) self.cp = self.CS.get_can_parser(CP)
self.cp_cam = self.CS.get_cam_can_parser(CP) self.cp_cam = self.CS.get_cam_can_parser(CP)
self.cp_adas = self.CS.get_adas_can_parser(CP) self.cp_adas = self.CS.get_adas_can_parser(CP)
@ -116,7 +116,7 @@ class CarInterfaceBase(ABC):
return ACCEL_MIN, ACCEL_MAX return ACCEL_MIN, ACCEL_MAX
@classmethod @classmethod
def get_non_essential_params(cls, candidate: str): def get_non_essential_params(cls, candidate: str) -> car.CarParams:
""" """
Parameters essential to controlling the car may be incomplete or wrong without FW versions or fingerprints. Parameters essential to controlling the car may be incomplete or wrong without FW versions or fingerprints.
""" """
@ -151,7 +151,7 @@ class CarInterfaceBase(ABC):
@staticmethod @staticmethod
@abstractmethod @abstractmethod
def _get_params(ret: car.CarParams, candidate, fingerprint: dict[int, dict[int, int]], def _get_params(ret: car.CarParams, candidate, fingerprint: dict[int, dict[int, int]],
car_fw: list[car.CarParams.CarFw], experimental_long: bool, docs: bool): car_fw: list[car.CarParams.CarFw], experimental_long: bool, docs: bool) -> car.CarParams:
raise NotImplementedError raise NotImplementedError
@staticmethod @staticmethod
@ -211,7 +211,7 @@ class CarInterfaceBase(ABC):
return ret return ret
@staticmethod @staticmethod
def configure_torque_tune(candidate, tune, steering_angle_deadzone_deg=0.0, use_steering_angle=True): def configure_torque_tune(candidate: str, tune: car.CarParams.LateralTuning, steering_angle_deadzone_deg: float = 0.0, use_steering_angle: bool = True):
params = get_torque_params()[candidate] params = get_torque_params()[candidate]
tune.init('torque') tune.init('torque')
@ -342,10 +342,10 @@ class CarInterfaceBase(ABC):
class RadarInterfaceBase(ABC): class RadarInterfaceBase(ABC):
def __init__(self, CP): def __init__(self, CP: car.CarParams):
self.CP = CP self.CP = CP
self.rcp = None self.rcp = None
self.pts = {} self.pts: dict[int, car.RadarData.RadarPoint] = {}
self.delay = 0 self.delay = 0
self.radar_ts = CP.radarTimeStep self.radar_ts = CP.radarTimeStep
self.frame = 0 self.frame = 0
@ -358,7 +358,7 @@ class RadarInterfaceBase(ABC):
class CarStateBase(ABC): class CarStateBase(ABC):
def __init__(self, CP): def __init__(self, CP: car.CarParams):
self.CP = CP self.CP = CP
self.car_fingerprint = CP.carFingerprint self.car_fingerprint = CP.carFingerprint
self.out = car.CarState.new_message() self.out = car.CarState.new_message()
@ -380,6 +380,10 @@ class CarStateBase(ABC):
K = get_kalman_gain(DT_CTRL, np.array(A), np.array(C), np.array(Q), R) K = get_kalman_gain(DT_CTRL, np.array(A), np.array(C), np.array(Q), R)
self.v_ego_kf = KF1D(x0=x0, A=A, C=C[0], K=K) self.v_ego_kf = KF1D(x0=x0, A=A, C=C[0], K=K)
@abstractmethod
def update(self, *args) -> car.CarState:
pass
def update_speed_kf(self, v_ego_raw): def update_speed_kf(self, v_ego_raw):
if abs(v_ego_raw - self.v_ego_kf.x[0][0]) > 2.0: # Prevent large accelerations when car starts at non zero speed if abs(v_ego_raw - self.v_ego_kf.x[0][0]) > 2.0: # Prevent large accelerations when car starts at non zero speed
self.v_ego_kf.set_x([[v_ego_raw], [0.0]]) self.v_ego_kf.set_x([[v_ego_raw], [0.0]])
@ -462,12 +466,12 @@ class CarStateBase(ABC):
class CarControllerBase(ABC): class CarControllerBase(ABC):
def __init__(self, dbc_name: str, CP): def __init__(self, dbc_name: str, CP: car.CarParams):
self.CP = CP self.CP = CP
self.frame = 0 self.frame = 0
@abstractmethod @abstractmethod
def update(self, CC: car.CarControl.Actuators, CS: car.CarState, now_nanos: int) -> tuple[car.CarControl.Actuators, list[CanData]]: def update(self, CC: car.CarControl, CS: CarStateBase, now_nanos: int) -> tuple[car.CarControl.Actuators, list[CanData]]:
pass pass

@ -1,4 +1,7 @@
from cereal import car
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
class CarState(CarStateBase): class CarState(CarStateBase):
pass def update(self, *args) -> car.CarState:
pass

@ -1,10 +1,5 @@
from cereal import car
from openpilot.selfdrive.car.subaru.fingerprints import FW_VERSIONS from openpilot.selfdrive.car.subaru.fingerprints import FW_VERSIONS
Ecu = car.CarParams.Ecu
ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()}
class TestSubaruFingerprint: class TestSubaruFingerprint:
def test_fw_version_format(self): def test_fw_version_format(self):
@ -13,4 +8,3 @@ class TestSubaruFingerprint:
fw_size = len(fws[0]) fw_size = len(fws[0])
for fw in fws: for fw in fws:
assert len(fw) == fw_size, f"{platform} {ecu}: {len(fw)} {fw_size}" assert len(fw) == fw_size, f"{platform} {ecu}: {len(fw)} {fw_size}"

Loading…
Cancel
Save