From 1a8a224e6a49056129e6e34e235e4112c6d4f670 Mon Sep 17 00:00:00 2001 From: MVL Date: Sat, 1 Nov 2025 23:17:06 -0400 Subject: [PATCH 1/6] Honda: DBC for Accord 9th Generation (#322) * Add dbc files for Accord 9G * Adding CVT for 4cyl Accord --------- Co-authored-by: Jason Wen --- .../honda/_steering_control_d_ext.dbc | 19 +++++++++++ .../honda/honda_accord_2017_can_ext.dbc | 34 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 opendbc/dbc/generator/honda/_steering_control_d_ext.dbc create mode 100644 opendbc/dbc/generator/honda/honda_accord_2017_can_ext.dbc diff --git a/opendbc/dbc/generator/honda/_steering_control_d_ext.dbc b/opendbc/dbc/generator/honda/_steering_control_d_ext.dbc new file mode 100644 index 00000000..855a00e0 --- /dev/null +++ b/opendbc/dbc/generator/honda/_steering_control_d_ext.dbc @@ -0,0 +1,19 @@ +BO_ 228 STEERING_CONTROL: 5 ADAS + SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS + SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS + SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS + SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS + SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS + SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS + +BO_ 400 STEER_STATUS: 5 EPS + SG_ STEER_TORQUE_SENSOR : 0|9@1- (1,0) [-256|256] "" XXX + SG_ LIN_INTERFACE_FATAL_ERROR : 10|1@0+ (1,0) [0|1] "" XXX + SG_ LATE_MESSAGE : 11|1@0+ (1,0) [0|1] "" XXX + SG_ STEER_STATUS : 12|4@1+ (1,0) [0|15] "" XXX + SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EON + SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX + SG_ LKAS_ALLOWED : 9|1@0+ (1,0) [0|1] "" XXX + SG_ STEER_APPLIED : 23|16@0- (1,0) [0|511] "" XXX + +VAL_ 400 STEER_STATUS 7 "permanent_fault" 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 1 "driver_steering" 0 "normal" ; diff --git a/opendbc/dbc/generator/honda/honda_accord_2017_can_ext.dbc b/opendbc/dbc/generator/honda/honda_accord_2017_can_ext.dbc new file mode 100644 index 00000000..ee349087 --- /dev/null +++ b/opendbc/dbc/generator/honda/honda_accord_2017_can_ext.dbc @@ -0,0 +1,34 @@ +CM_ "IMPORT _honda_common.dbc"; +CM_ "IMPORT _nidec_common.dbc"; +CM_ "IMPORT _lkas_hud_5byte.dbc"; +CM_ "IMPORT _nidec_scm_group_a.dbc"; +CM_ "IMPORT _steering_sensors_b.dbc"; +CM_ "IMPORT _steering_control_d_ext.dbc"; + +BO_ 392 GEARBOX_AUTO: 6 XXX + SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" XXX + SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" XXX + SG_ GEAR_SHIFTER : 27|4@0+ (1,0) [0|15] "" EON + SG_ GEAR : 36|5@0+ (1,0) [0|31] "" EON + +BO_ 401 GEARBOX_CVT: 8 PCM + SG_ SELECTED_P : 0|1@0+ (1,0) [0|1] "" XXX + SG_ SELECTED_R : 1|1@0+ (1,0) [0|1] "" XXX + SG_ SELECTED_N : 2|1@0+ (1,0) [0|1] "" XXX + SG_ SELECTED_D : 3|1@0+ (1,0) [0|1] "" XXX + SG_ FORWARD_DRIVING_MODE : 23|1@0+ (1,0) [0|1] "" XXX + SG_ CVT_UNKNOWN_1 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ CVT_UNKNOWN_2 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ GEAR_SHIFTER : 44|5@0+ (1,0) [0|31] "" XXX + SG_ SHIFTER_POSITION_VALID : 45|1@0+ (1,0) [0|1] "" XXX + SG_ NOT_FORWARD_GEAR : 48|1@0+ (1,0) [0|1] "" XXX + SG_ CVT_UNKNOWN_3 : 53|2@0+ (1,0) [0|3] "" XXX + SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON + SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON + +VAL_ 392 GEAR_SHIFTER 0 "S" 1 "P" 2 "R" 4 "N" 8 "D" ; +VAL_ 392 GEAR 26 "S" 4 "D" 3 "N" 2 "R" 1 "P" ; +VAL_ 401 GEAR_SHIFTER 1 "P" 2 "R" 3 "N" 4 "D" 7 "L" 10 "S"; + +CM_ SG_ 401 CVT_UNKNOWN_1 "Probably measured/actual CVT ratio"; +CM_ SG_ 401 CVT_UNKNOWN_2 "Probably target/commanded CVT ratio"; From acfcff86a3aadddcdaa5b0da685e5823257c0d3f Mon Sep 17 00:00:00 2001 From: dparring <114614741+dparring@users.noreply.github.com> Date: Sat, 1 Nov 2025 22:57:46 -0500 Subject: [PATCH 2/6] FCA: update tire stiffness values for `RAM_HD` (#247) * docs: Scheduled auto-update CARS.md * Decouple and rebase tireStiffnessFactor usage in the learner to 1.0. Necessary for fixing 25389 in OP and eventual dashcam flag removal for Ram HD trucks * changing pr to set front and rear individually * ram HD tune * removing dashcam only flag for Ram HD * fixing ref * reverting tirestiffness in carspecs and moving HD values into SP methods * reverting to stock settings * refactor the HD steering angle fix into SP ext framework * duplicate * Apply suggestion from @sunnyhaibin * Apply suggestion from @sunnyhaibin --------- Co-authored-by: dparring Co-authored-by: Jason Wen --- opendbc/car/chrysler/interface.py | 6 ++++++ opendbc/sunnypilot/car/chrysler/carstate_ext.py | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/opendbc/car/chrysler/interface.py b/opendbc/car/chrysler/interface.py index 7fc1dc50..b88f275d 100755 --- a/opendbc/car/chrysler/interface.py +++ b/opendbc/car/chrysler/interface.py @@ -91,6 +91,12 @@ class CarInterface(CarInterfaceBase): if candidate == CAR.RAM_HD_5TH_GEN: stock_cp.dashcamOnly = False + # https://github.com/commaai/openpilot/issues/25389 + stock_cp.tireStiffnessFactor = 1.0 + stock_cp.tireStiffnessFront = 65155. + stock_cp.tireStiffnessRear = 80926. + stock_cp.wheelbase = 3.79 + stock_cp.steerRatio = 19. if 0x4FF in fingerprint[0]: ret.flags |= ChryslerFlagsSP.NO_MIN_STEERING_SPEED.value diff --git a/opendbc/sunnypilot/car/chrysler/carstate_ext.py b/opendbc/sunnypilot/car/chrysler/carstate_ext.py index bbe673f2..2949c10e 100644 --- a/opendbc/sunnypilot/car/chrysler/carstate_ext.py +++ b/opendbc/sunnypilot/car/chrysler/carstate_ext.py @@ -10,6 +10,7 @@ from enum import StrEnum from opendbc.car import Bus, structs from opendbc.can.parser import CANParser +from opendbc.car.chrysler.values import RAM_HD from opendbc.sunnypilot.car.chrysler.values import BUTTONS @@ -34,3 +35,6 @@ class CarStateExt: button_events.append(event) self.button_states[button.event_type] = state self.button_events = button_events + + if self.CP.carFingerprint in RAM_HD: + ret.steeringAngleDeg = cp.vl["STEERING"]["STEERING_ANGLE"] From 107f41b04268e8f825c07ba61abc2ffea6dcd8b1 Mon Sep 17 00:00:00 2001 From: MVL Date: Sun, 2 Nov 2025 11:57:47 -0500 Subject: [PATCH 3/6] Honda: Nidec hybrid baseline brake support (#323) * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * add hybrid alt-brakehold * adding alt brakehold * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * generalize Clarity to Nidec Hybrid * remove unused car import * whitespace fixes * remove unneded HondaFlagsSP * typo fixes * remove .value from HondaSafetyFlagsSP * autodetect hybrid * merge fix * Apply suggestion * Apply suggestion --------- Co-authored-by: Jason Wen --- opendbc/car/honda/carcontroller.py | 2 +- opendbc/car/honda/hondacan.py | 7 ++++--- opendbc/car/honda/interface.py | 8 +++++++- opendbc/car/honda/values.py | 3 --- opendbc/safety/modes/honda.h | 10 +++++----- opendbc/safety/tests/test_honda.py | 7 +++++-- opendbc/sunnypilot/car/honda/carstate_ext.py | 4 +++- opendbc/sunnypilot/car/honda/values_ext.py | 5 +++-- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/opendbc/car/honda/carcontroller.py b/opendbc/car/honda/carcontroller.py index 0cff95d2..901ee4e8 100644 --- a/opendbc/car/honda/carcontroller.py +++ b/opendbc/car/honda/carcontroller.py @@ -220,7 +220,7 @@ class CarController(CarControllerBase, MadsCarController, GasInterceptorCarContr pcm_override = True can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, alert_fcw, - self.CP.carFingerprint, CS.stock_brake)) + self.CP.carFingerprint, CS.stock_brake, self.CP_SP)) self.apply_brake_last = apply_brake self.brake = apply_brake / self.params.NIDEC_BRAKE_MAX diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index a3df301b..45c3458e 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -1,7 +1,8 @@ from opendbc.car import CanBusBase from opendbc.car.common.conversions import Conversions as CV -from opendbc.car.honda.values import (CAR, HondaFlags, HONDA_BOSCH, HONDA_BOSCH_ALT_RADAR, HONDA_BOSCH_RADARLESS, +from opendbc.car.honda.values import (HondaFlags, HONDA_BOSCH, HONDA_BOSCH_ALT_RADAR, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CarControllerParams) +from opendbc.sunnypilot.car.honda.values_ext import HondaFlagsSP # CAN bus layout with relay # 0 = ACC-CAN - radar side @@ -46,7 +47,7 @@ class CanBus(CanBusBase): return self.offset -def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw, car_fingerprint, stock_brake): +def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw, car_fingerprint, stock_brake, CP_SP): # TODO: do we loose pressure if we keep pump off for long? brakelights = apply_brake > 0 brake_rq = apply_brake > 0 @@ -66,7 +67,7 @@ def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_ca "AEB_STATUS": 0, } - if car_fingerprint == CAR.HONDA_CLARITY: + if CP_SP.flags & HondaFlagsSP.NIDEC_HYBRID: values["COMPUTER_BRAKE_HYBRID"] = apply_brake values["BRAKE_PUMP_REQUEST_HYBRID"] = apply_brake > 0 else: diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index fc228fa0..c15a3f1a 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -238,6 +238,13 @@ class CarInterface(CarInterfaceBase): ret.flags |= HondaFlagsSP.EPS_MODIFIED.value stock_cp.dashcamOnly = False + if bool(stock_cp.flags & HondaFlags.NIDEC) and bool(stock_cp.flags & HondaFlags.HYBRID): + ret.flags |= HondaFlagsSP.NIDEC_HYBRID.value + ret.safetyParam |= HondaSafetyFlagsSP.NIDEC_HYBRID + # some hybrids use a different brake hold + if 0x223 in fingerprint[CAN.pt]: + ret.flags |= HondaFlagsSP.HYBRID_ALT_BRAKEHOLD.value + if candidate == CAR.HONDA_CIVIC: if ret.flags & HondaFlagsSP.EPS_MODIFIED: # stock request input values: 0x0000, 0x00DE, 0x014D, 0x01EF, 0x0290, 0x0377, 0x0454, 0x0610, 0x06EE @@ -272,7 +279,6 @@ class CarInterface(CarInterfaceBase): stock_cp.lateralTuning.pid.kpV, stock_cp.lateralTuning.pid.kiV = [[0.21], [0.07]] elif candidate == CAR.HONDA_CLARITY: - ret.safetyParam |= HondaSafetyFlagsSP.CLARITY stock_cp.autoResumeSng = True stock_cp.minEnableSpeed = -1 if ret.flags & HondaFlagsSP.EPS_MODIFIED: diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 0e39ee6c..207fc955 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -6,8 +6,6 @@ from opendbc.car.common.conversions import Conversions as CV from opendbc.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column, Device from opendbc.car.fw_query_definitions import FwQueryConfig, Request, StdQueries, p16 -from opendbc.sunnypilot.car.honda.values_ext import HondaFlagsSP - Ecu = structs.CarParams.Ecu VisualAlert = structs.CarControl.HUDControl.VisualAlert GearShifter = structs.CarState.GearShifter @@ -355,7 +353,6 @@ class CAR(Platforms): CarSpecs(mass=1834, wheelbase=2.75, centerToFrontRatio=0.4, steerRatio=16.5), radar_dbc_dict('honda_clarity_hybrid_2018_can_generated'), flags=HondaFlags.HAS_ALL_DOOR_STATES, - sp_flags=HondaFlagsSP.CLARITY, ) diff --git a/opendbc/safety/modes/honda.h b/opendbc/safety/modes/honda.h index 87a2e869..0db40551 100644 --- a/opendbc/safety/modes/honda.h +++ b/opendbc/safety/modes/honda.h @@ -42,7 +42,7 @@ static bool honda_fwd_brake = false; static bool honda_bosch_long = false; static bool honda_bosch_radarless = false; static bool honda_bosch_canfd = false; -static bool honda_clarity = false; +static bool honda_nidec_hybrid = false; typedef enum {HONDA_NIDEC, HONDA_BOSCH} HondaHw; static HondaHw honda_hw = HONDA_NIDEC; @@ -198,7 +198,7 @@ static void honda_rx_hook(const CANPacket_t *msg) { bool honda_stock_aeb = GET_BIT(msg, 29U); int honda_stock_brake = (msg->data[0] << 2) | (msg->data[1] >> 6); - if (honda_clarity) { + if (honda_nidec_hybrid) { honda_stock_brake = (msg->data[6] << 2) | (msg->data[7] >> 6); } @@ -254,7 +254,7 @@ static bool honda_tx_hook(const CANPacket_t *msg) { if ((msg->addr == 0x1FAU) && (msg->bus == bus_pt)) { honda_brake = (msg->data[0] << 2) + ((msg->data[1] >> 6) & 0x3U); - if (honda_clarity) { + if (honda_nidec_hybrid) { honda_brake = (msg->data[6] << 2) + ((msg->data[7] >> 6) & 0x3U); } @@ -350,7 +350,7 @@ static safety_config honda_nidec_init(uint16_t param) { const uint16_t HONDA_PARAM_NIDEC_ALT = 4; - const uint16_t HONDA_PARAM_SP_CLARITY = 1; + const uint16_t HONDA_PARAM_SP_NIDEC_HYBRID = 1; const uint16_t HONDA_PARAM_GAS_INTERCEPTOR = 2; honda_hw = HONDA_NIDEC; @@ -366,7 +366,7 @@ static safety_config honda_nidec_init(uint16_t param) { bool enable_nidec_alt = GET_FLAG(param, HONDA_PARAM_NIDEC_ALT); - honda_clarity = GET_FLAG(current_safety_param_sp, HONDA_PARAM_SP_CLARITY); + honda_nidec_hybrid = GET_FLAG(current_safety_param_sp, HONDA_PARAM_SP_NIDEC_HYBRID); enable_gas_interceptor = GET_FLAG(current_safety_param_sp, HONDA_PARAM_GAS_INTERCEPTOR); if (enable_nidec_alt) { diff --git a/opendbc/safety/tests/test_honda.py b/opendbc/safety/tests/test_honda.py index a30af983..cc413b5d 100755 --- a/opendbc/safety/tests/test_honda.py +++ b/opendbc/safety/tests/test_honda.py @@ -686,14 +686,17 @@ class TestHondaBoschCANFDAltBrakeSafety(HondaPcmEnableBase, TestHondaBoschCANFDS self.safety.init_tests() -class TestHondaNidecClaritySafety(TestHondaNidecPcmSafety): +class TestHondaNidecHybridSafety(TestHondaNidecPcmSafety): + """ + Covers the Honda Nidec safety mode with hybrid brake + """ BRAKE_SIG = "COMPUTER_BRAKE_HYBRID" def setUp(self): self.packer = CANPackerPanda("honda_clarity_hybrid_2018_can_generated") self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_sp(HondaSafetyFlagsSP.CLARITY) + self.safety.set_current_safety_param_sp(HondaSafetyFlagsSP.NIDEC_HYBRID) self.safety.set_safety_hooks(CarParams.SafetyModel.hondaNidec, 0) self.safety.init_tests() diff --git a/opendbc/sunnypilot/car/honda/carstate_ext.py b/opendbc/sunnypilot/car/honda/carstate_ext.py index 3e0f4b77..73ab95cb 100644 --- a/opendbc/sunnypilot/car/honda/carstate_ext.py +++ b/opendbc/sunnypilot/car/honda/carstate_ext.py @@ -20,9 +20,11 @@ class CarStateExt: cp = can_parsers[Bus.pt] cp_cam = can_parsers[Bus.cam] - if self.CP_SP.flags & HondaFlagsSP.CLARITY: + if self.CP_SP.flags & HondaFlagsSP.NIDEC_HYBRID: ret.accFaulted = bool(cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_1"] or cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_2"]) ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE_HYBRID"] > 1e-5) + + if self.CP_SP.flags & HondaFlagsSP.HYBRID_ALT_BRAKEHOLD: ret.brakeHoldActive = cp.vl["BRAKE_HOLD_HYBRID_ALT"]["BRAKE_HOLD_ACTIVE"] == 1 if self.CP_SP.enableGasInterceptor: diff --git a/opendbc/sunnypilot/car/honda/values_ext.py b/opendbc/sunnypilot/car/honda/values_ext.py index d6e13431..2c646b71 100644 --- a/opendbc/sunnypilot/car/honda/values_ext.py +++ b/opendbc/sunnypilot/car/honda/values_ext.py @@ -9,10 +9,11 @@ from enum import IntFlag class HondaFlagsSP(IntFlag): - CLARITY = 1 + NIDEC_HYBRID = 1 EPS_MODIFIED = 2 + HYBRID_ALT_BRAKEHOLD = 4 class HondaSafetyFlagsSP: - CLARITY = 1 + NIDEC_HYBRID = 1 GAS_INTERCEPTOR = 2 From 5f60a41820b619dd92530179a21be9c5ba87f6ac Mon Sep 17 00:00:00 2001 From: Lukas <61192133+lukasloetkolben@users.noreply.github.com> Date: Mon, 3 Nov 2025 00:08:14 +0100 Subject: [PATCH 4/6] Rivian: update mando radar interface (#300) Co-authored-by: Jason Wen --- opendbc/car/rivian/interface.py | 2 +- opendbc/car/rivian/radar_interface.py | 21 ++++++++++++------- .../rivian/rivian_mando_front_radar.py | 13 ++++++++---- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/opendbc/car/rivian/interface.py b/opendbc/car/rivian/interface.py index fb2ee5ad..890758aa 100644 --- a/opendbc/car/rivian/interface.py +++ b/opendbc/car/rivian/interface.py @@ -25,7 +25,7 @@ class CarInterface(CarInterfaceBase): ret.steerControlType = structs.CarParams.SteerControlType.torque ret.radarUnavailable = True - # TODO: pending finding/handling missing set speed and fixing up radar parser + # TODO: pending finding/handling missing set speed ret.alphaLongitudinalAvailable = False if alpha_long: ret.openpilotLongitudinalControl = True diff --git a/opendbc/car/rivian/radar_interface.py b/opendbc/car/rivian/radar_interface.py index fd299ac0..85a0a632 100644 --- a/opendbc/car/rivian/radar_interface.py +++ b/opendbc/car/rivian/radar_interface.py @@ -50,22 +50,27 @@ class RadarInterface(RadarInterfaceBase): for addr in range(RADAR_START_ADDR, RADAR_START_ADDR + RADAR_MSG_COUNT): msg = self.rcp.vl[f"RADAR_TRACK_{addr:x}"] - if addr not in self.pts: - self.pts[addr] = structs.RadarData.RadarPoint() - self.pts[addr].trackId = self.track_id - self.track_id += 1 + # STATE: 1=New, 2=New_updated, 3=Updated, 4=Coasting, 7=New_coasting + valid = msg['STATE'] in (1, 2, 3, 4, 7) + + # Rivian's Short Range Radar (SSR) detects close stationary objects like guardrails, which cause phantom braking. + # MODE: 1=SRR, 2=LRR, 3=SRR_and_LRR + valid = valid and msg['MODE'] in (2, 3) - valid = msg['STATE'] in (3, 4) and msg['STATE_2'] == 1 if valid: + if addr not in self.pts or msg['STATE'] in (1, 2, 7): + self.pts[addr] = structs.RadarData.RadarPoint() + self.pts[addr].trackId = self.track_id + self.track_id += 1 + + self.pts[addr].measured = msg['STATE'] in (2, 3) azimuth = math.radians(msg['AZIMUTH']) - self.pts[addr].measured = True self.pts[addr].dRel = math.cos(azimuth) * msg['LONG_DIST'] self.pts[addr].yRel = 0.5 * -math.sin(azimuth) * msg['LONG_DIST'] self.pts[addr].vRel = msg['REL_SPEED'] self.pts[addr].aRel = float('nan') self.pts[addr].yvRel = float('nan') - - else: + elif addr in self.pts: del self.pts[addr] ret.points = list(self.pts.values()) diff --git a/opendbc/dbc/generator/rivian/rivian_mando_front_radar.py b/opendbc/dbc/generator/rivian/rivian_mando_front_radar.py index cdddfd8f..d9a89752 100755 --- a/opendbc/dbc/generator/rivian/rivian_mando_front_radar.py +++ b/opendbc/dbc/generator/rivian/rivian_mando_front_radar.py @@ -44,16 +44,21 @@ BS_: BU_: XXX """) - # note: 0x501/0x502 seem to be special in 0x5XX range for a in range(0x500, 0x500 + 32): f.write(f""" BO_ {a} RADAR_TRACK_{a:x}: 8 RADAR SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX SG_ COUNTER : 11|4@0+ (1,0) [0|15] "" XXX SG_ UNKNOWN_1 : 23|8@0- (1,0) [-128|127] "" XXX - SG_ AZIMUTH : 28|10@0- (0.1,0) [-61.2|62.1] "" XXX + SG_ AZIMUTH : 28|10@0- (0.1,0) [-51.2|51.1] "" XXX SG_ STATE : 31|3@0+ (1,0) [0|7] "" XXX SG_ LONG_DIST : 34|11@0+ (0.1,0) [0|204.7] "" XXX - SG_ STATE_2 : 55|1@0+ (1,0) [0|1] "" XXX - SG_ REL_SPEED : 53|14@0- (0.01,0) [-81.92|81.92] "" XXX + SG_ MODE : 55|2@0+ (1,0) [0|3] "" XXX + SG_ REL_SPEED : 53|14@0- (0.01,0) [-81.92|81.92] "m/s" XXX + """) + + for a in range(0x500, 0x500 + 32): + f.write(f""" +VAL_ {a} STATE 0 "Empty" 1 "New" 2 "New_updated" 3 "Updated" 4 "Coasting" 7 "New_coasting" ; +VAL_ {a} MODE 0 "None" 1 "SRR" 2 "LRR" 3 "SRR_and_LRR" ; """) From aa4d9d964dabca70b8ecc4c015dcc5a309252064 Mon Sep 17 00:00:00 2001 From: roenthomas <43324106+roenthomas@users.noreply.github.com> Date: Sun, 2 Nov 2025 18:18:14 -0500 Subject: [PATCH 5/6] =?UTF-8?q?Chrysler:=20values=20=E2=86=92=20values=5Fe?= =?UTF-8?q?xt=20for=20port=20extension=20consistency=20(#360)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jason Wen --- opendbc/car/chrysler/carcontroller.py | 2 +- opendbc/car/chrysler/interface.py | 2 +- opendbc/sunnypilot/car/chrysler/carcontroller_ext.py | 2 +- opendbc/sunnypilot/car/chrysler/carstate_ext.py | 2 +- opendbc/sunnypilot/car/chrysler/{values.py => values_ext.py} | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename opendbc/sunnypilot/car/chrysler/{values.py => values_ext.py} (100%) diff --git a/opendbc/car/chrysler/carcontroller.py b/opendbc/car/chrysler/carcontroller.py index ed50d2d4..4405e3df 100644 --- a/opendbc/car/chrysler/carcontroller.py +++ b/opendbc/car/chrysler/carcontroller.py @@ -8,7 +8,7 @@ from opendbc.car.interfaces import CarControllerBase from opendbc.sunnypilot.car.chrysler.carcontroller_ext import CarControllerExt from opendbc.sunnypilot.car.chrysler.icbm import IntelligentCruiseButtonManagementInterface from opendbc.sunnypilot.car.chrysler.mads import MadsCarController -from opendbc.sunnypilot.car.chrysler.values import ChryslerFlagsSP +from opendbc.sunnypilot.car.chrysler.values_ext import ChryslerFlagsSP class CarController(CarControllerBase, MadsCarController, CarControllerExt, IntelligentCruiseButtonManagementInterface): diff --git a/opendbc/car/chrysler/interface.py b/opendbc/car/chrysler/interface.py index b88f275d..86d95ff0 100755 --- a/opendbc/car/chrysler/interface.py +++ b/opendbc/car/chrysler/interface.py @@ -5,7 +5,7 @@ from opendbc.car.chrysler.carstate import CarState from opendbc.car.chrysler.radar_interface import RadarInterface from opendbc.car.chrysler.values import CAR, RAM_HD, RAM_DT, RAM_CARS, ChryslerFlags, ChryslerSafetyFlags from opendbc.car.interfaces import CarInterfaceBase -from opendbc.sunnypilot.car.chrysler.values import ChryslerFlagsSP +from opendbc.sunnypilot.car.chrysler.values_ext import ChryslerFlagsSP class CarInterface(CarInterfaceBase): diff --git a/opendbc/sunnypilot/car/chrysler/carcontroller_ext.py b/opendbc/sunnypilot/car/chrysler/carcontroller_ext.py index f5e83674..a361582b 100644 --- a/opendbc/sunnypilot/car/chrysler/carcontroller_ext.py +++ b/opendbc/sunnypilot/car/chrysler/carcontroller_ext.py @@ -1,7 +1,7 @@ from opendbc.car import structs from opendbc.car.interfaces import CarStateBase from opendbc.car.chrysler.values import RAM_DT -from opendbc.sunnypilot.car.chrysler.values import ChryslerFlagsSP +from opendbc.sunnypilot.car.chrysler.values_ext import ChryslerFlagsSP GearShifter = structs.CarState.GearShifter diff --git a/opendbc/sunnypilot/car/chrysler/carstate_ext.py b/opendbc/sunnypilot/car/chrysler/carstate_ext.py index 2949c10e..b50f525a 100644 --- a/opendbc/sunnypilot/car/chrysler/carstate_ext.py +++ b/opendbc/sunnypilot/car/chrysler/carstate_ext.py @@ -11,7 +11,7 @@ from enum import StrEnum from opendbc.car import Bus, structs from opendbc.can.parser import CANParser from opendbc.car.chrysler.values import RAM_HD -from opendbc.sunnypilot.car.chrysler.values import BUTTONS +from opendbc.sunnypilot.car.chrysler.values_ext import BUTTONS class CarStateExt: diff --git a/opendbc/sunnypilot/car/chrysler/values.py b/opendbc/sunnypilot/car/chrysler/values_ext.py similarity index 100% rename from opendbc/sunnypilot/car/chrysler/values.py rename to opendbc/sunnypilot/car/chrysler/values_ext.py From c32e79f3c6a6170bec9f879a0ffdf901caeb4ab0 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Mon, 3 Nov 2025 03:19:01 -0500 Subject: [PATCH 6/6] Subaru Global Gen2: bump steering limits and update tuning (#299) * Subaru Global Gen2: bump steering limits * no longer applies * must be lowered * Revert "must be lowered" This reverts commit 12d86e4272d52c92d4806f9c0f24ee18507dc985. * lower rate down * lower * ui: ensure Cruise panel widget is reset when `hideEvent` --- opendbc/car/subaru/values.py | 7 +++---- opendbc/safety/modes/subaru.h | 2 +- opendbc/safety/tests/test_subaru.py | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/opendbc/car/subaru/values.py b/opendbc/car/subaru/values.py index a702d394..0d1ac878 100644 --- a/opendbc/car/subaru/values.py +++ b/opendbc/car/subaru/values.py @@ -19,10 +19,9 @@ class CarControllerParams: self.STEER_DRIVER_FACTOR = 1 # from dbc if CP.flags & SubaruFlags.GLOBAL_GEN2: - # TODO: lower rate limits, this reaches min/max in 0.5s which negatively affects tuning - self.STEER_MAX = 1000 - self.STEER_DELTA_UP = 40 - self.STEER_DELTA_DOWN = 40 + self.STEER_MAX = 1500 + self.STEER_DELTA_UP = 35 + self.STEER_DELTA_DOWN = 50 elif CP.carFingerprint == CAR.SUBARU_IMPREZA_2020: self.STEER_DELTA_UP = 35 self.STEER_MAX = 1439 diff --git a/opendbc/safety/modes/subaru.h b/opendbc/safety/modes/subaru.h index 1bbeaaba..46f302a0 100644 --- a/opendbc/safety/modes/subaru.h +++ b/opendbc/safety/modes/subaru.h @@ -149,7 +149,7 @@ static void subaru_rx_hook(const CANPacket_t *msg) { static bool subaru_tx_hook(const CANPacket_t *msg) { const TorqueSteeringLimits SUBARU_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERATOR(2047, 50, 70); - const TorqueSteeringLimits SUBARU_GEN2_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERATOR(1000, 40, 40); + const TorqueSteeringLimits SUBARU_GEN2_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERATOR(1500, 35, 50); const LongitudinalLimits SUBARU_LONG_LIMITS = { .min_gas = 808, // appears to be engine braking diff --git a/opendbc/safety/tests/test_subaru.py b/opendbc/safety/tests/test_subaru.py index 9eae7c86..6143a041 100755 --- a/opendbc/safety/tests/test_subaru.py +++ b/opendbc/safety/tests/test_subaru.py @@ -196,9 +196,9 @@ class TestSubaruGen2TorqueSafetyBase(TestSubaruTorqueSafetyBase): ALT_MAIN_BUS = SUBARU_ALT_BUS ALT_CAM_BUS = SUBARU_ALT_BUS - MAX_RATE_UP = 40 - MAX_RATE_DOWN = 40 - MAX_TORQUE_LOOKUP = [0], [1000] + MAX_RATE_UP = 35 + MAX_RATE_DOWN = 50 + MAX_TORQUE_LOOKUP = [0], [1500] class TestSubaruGen2TorqueStockLongitudinalSafety(TestSubaruStockLongitudinalSafetyBase, TestSubaruGen2TorqueSafetyBase):