From 965f47efe3de92f37bb491506bf7c060e1bcefce Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Sun, 31 May 2026 01:21:35 -0700 Subject: [PATCH] test models: check angle matches safety (#38110) * check angle matches safety * add to fuzzy * explicit * fix tesla * just real data for now, fix toyota * clean up --- selfdrive/car/tests/test_models.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py index ea6382d0d1..6171d02b5e 100644 --- a/selfdrive/car/tests/test_models.py +++ b/selfdrive/car/tests/test_models.py @@ -27,6 +27,14 @@ from openpilot.tools.lib.route import SegmentName SafetyModel = car.CarParams.SafetyModel SteerControlType = structs.CarParams.SteerControlType +# panda safety stores angle_meas in brand-specific CAN units (angle_deg_to_can in opendbc/safety/modes/*.h). +ANGLE_DEG_TO_CAN = { + "tesla": -10, + "toyota": 17.452007, + "nissan": 100, + "psa": 10, +} + NUM_JOBS = int(os.environ.get("NUM_JOBS", "1")) JOB_ID = int(os.environ.get("JOB_ID", "0")) INTERNAL_SEG_LIST = os.environ.get("INTERNAL_SEG_LIST", "") @@ -418,6 +426,13 @@ class TestCarModelBase(unittest.TestCase): checks['vEgoRaw'] += (v_ego_raw > (self.safety.get_vehicle_speed_max() + 1e-3) or v_ego_raw < (self.safety.get_vehicle_speed_min() - 1e-3)) + # check steering angle for angle control cars (panda stores angle_meas in CAN units) + # ford excluded since it tracks curvature, not steering angle + if self.CP.steerControlType == SteerControlType.angle and not self.CP.notCar and self.CP.brand != "ford": + angle_can = (CS.steeringAngleDeg + CS.steeringAngleOffsetDeg) * ANGLE_DEG_TO_CAN[self.CP.brand] + checks['steeringAngleDeg'] += (angle_can > (self.safety.get_angle_meas_max() + 1) or + angle_can < (self.safety.get_angle_meas_min() - 1)) + checks['brakePressed'] += CS.brakePressed != self.safety.get_brake_pressed_prev() checks['regenBraking'] += CS.regenBraking != self.safety.get_regen_braking_prev() checks['steeringDisengage'] += CS.steeringDisengage != self.safety.get_steering_disengage_prev()