From 97ad017081ad7891b2a2fc0d6df97f9b371d8564 Mon Sep 17 00:00:00 2001 From: openpilot <5604101+axi82@user.noreply.gitee.com> Date: Wed, 15 Apr 2026 20:16:18 +0800 Subject: [PATCH] =?UTF-8?q?carstate.py:=E7=A1=AC=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E7=A6=8F=E7=89=B9carstate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 4745c79357b8a63b5173871559b114ca71994719) --- opendbc_repo/opendbc/car/ford/carstate.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/opendbc_repo/opendbc/car/ford/carstate.py b/opendbc_repo/opendbc/car/ford/carstate.py index 66f5d3bbf..317d61e49 100644 --- a/opendbc_repo/opendbc/car/ford/carstate.py +++ b/opendbc_repo/opendbc/car/ford/carstate.py @@ -11,6 +11,7 @@ ButtonType = structs.CarState.ButtonEvent.Type GearShifter = structs.CarState.GearShifter TransmissionType = structs.CarParams.TransmissionType +FordFlagsALT_STEER_ANGLE = True class CarState(CarStateBase, MadsCarState): def __init__(self, CP, CP_SP): @@ -30,9 +31,16 @@ class CarState(CarStateBase, MadsCarState): ret = structs.CarState() ret_sp = structs.CarStateSP() - # Occasionally on startup, the ABS module recalibrates the steering pinion offset, so we need to block engagement - # The vehicle usually recovers out of this state within a minute of normal driving - ret.vehicleSensorsInvalid = cp.vl["SteeringPinion_Data"]["StePinCompAnEst_D_Qf"] != 3 + if FordFlagsALT_STEER_ANGLE: + self.vehicle_sensors_valid = ( + int((cp.vl["ParkAid_Data"]["ExtSteeringAngleReq2"] + 1000) * 10) not in (32766, 32767) + and cp.vl["ParkAid_Data"]["EPASExtAngleStatReq"] == 0 + and cp.vl["ParkAid_Data"]["ApaSys_D_Stat"] in (0, 1) + ) + else: + # Occasionally on startup, the ABS module recalibrates the steering pinion offset, so we need to block engagement + # The vehicle usually recovers out of this state within a minute of normal driving + ret.vehicleSensorsInvalid = cp.vl["SteeringPinion_Data"]["StePinCompAnEst_D_Qf"] != 3 # car speed ret.vEgoRaw = cp.vl["BrakeSysFeatures"]["Veh_V_ActlBrk"] * CV.KPH_TO_MS @@ -48,7 +56,14 @@ class CarState(CarStateBase, MadsCarState): ret.parkingBrake = cp.vl["DesiredTorqBrk"]["PrkBrkStatus"] in (1, 2) # steering wheel - ret.steeringAngleDeg = cp.vl["SteeringPinion_Data"]["StePinComp_An_Est"] + if FordFlagsALT_STEER_ANGLE: + steering_angle_init = cp.vl["SteeringPinion_Data_Alt"]["StePinRelInit_An_Sns"] + if self.vehicle_sensors_valid: + steering_angle_est = cp.vl["ParkAid_Data"]["ExtSteeringAngleReq2"] + self.steering_angle_offset_deg = steering_angle_est - steering_angle_init + ret.steeringAngleDeg = steering_angle_init + self.steering_angle_offset_deg + else: + ret.steeringAngleDeg = cp.vl["SteeringPinion_Data"]["StePinComp_An_Est"] ret.steeringTorque = cp.vl["EPAS_INFO"]["SteeringColumnTorque"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > CarControllerParams.STEER_DRIVER_ALLOWANCE, 5) ret.steerFaultTemporary = cp.vl["EPAS_INFO"]["EPAS_Failure"] == 1