FrogPilot community - Added Realfast Tweaks and New Ram HDs

Co-Authored-By: Vincent Wright <1850511+vincentw56@users.noreply.github.com>
This commit is contained in:
FrogAi
2024-07-05 17:20:42 -07:00
parent 146d4ee3e5
commit d00a3a0ff8
8 changed files with 75 additions and 19 deletions
+9 -4
View File
@@ -2,7 +2,7 @@ from opendbc.can.packer import CANPacker
from openpilot.common.realtime import DT_CTRL
from openpilot.selfdrive.car import apply_meas_steer_torque_limits
from openpilot.selfdrive.car.chrysler import chryslercan
from openpilot.selfdrive.car.chrysler.values import RAM_CARS, CarControllerParams, ChryslerFlags
from openpilot.selfdrive.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags
from openpilot.selfdrive.car.interfaces import CarControllerBase
@@ -32,12 +32,12 @@ class CarController(CarControllerBase):
# ACC cancellation
if CC.cruiseControl.cancel:
self.last_button_frame = self.frame
can_sends.append(chryslercan.create_cruise_buttons(self.packer, CS.button_counter + 1, das_bus, cancel=True))
can_sends.append(chryslercan.create_cruise_buttons(self.packer, self.CP, CS.button_counter + 1, das_bus, cancel=True))
# ACC resume from standstill
elif CC.cruiseControl.resume:
self.last_button_frame = self.frame
can_sends.append(chryslercan.create_cruise_buttons(self.packer, CS.button_counter + 1, das_bus, resume=True))
can_sends.append(chryslercan.create_cruise_buttons(self.packer, self.CP, CS.button_counter + 1, das_bus, resume=True))
# HUD alerts
if self.frame % 25 == 0:
@@ -51,7 +51,12 @@ class CarController(CarControllerBase):
# TODO: can we make this more sane? why is it different for all the cars?
lkas_control_bit = self.lkas_control_bit_prev
if CS.out.vEgo > self.CP.minSteerSpeed:
if self.CP.carFingerprint in RAM_DT:
if self.CP.minEnableSpeed <= CS.out.vEgo <= self.CP.minEnableSpeed + 0.5:
lkas_control_bit = True
if (self.CP.minEnableSpeed >= 14.5) and (CS.out.gearShifter != 2):
lkas_control_bit = False
elif CS.out.vEgo > self.CP.minSteerSpeed:
lkas_control_bit = True
elif self.CP.flags & ChryslerFlags.HIGHER_MIN_STEERING_SPEED:
if CS.out.vEgo < (self.CP.minSteerSpeed - 3.0):
+6 -4
View File
@@ -3,7 +3,7 @@ from openpilot.common.conversions import Conversions as CV
from opendbc.can.parser import CANParser
from opendbc.can.can_define import CANDefine
from openpilot.selfdrive.car.interfaces import CarStateBase
from openpilot.selfdrive.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS
from openpilot.selfdrive.car.chrysler.values import ChryslerFlags, DBC, STEER_THRESHOLD, RAM_CARS
class CarState(CarStateBase):
@@ -15,6 +15,7 @@ class CarState(CarStateBase):
self.auto_high_beam = 0
self.button_counter = 0
self.lkas_car_model = -1
self.button_message = "CRUISE_BUTTONS_ALT" if CP.flags & ChryslerFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
if CP.carFingerprint in RAM_CARS:
self.shifter_values = can_define.dv["Transmission_Status"]["Gear_State"]
@@ -30,7 +31,7 @@ class CarState(CarStateBase):
fp_ret = custom.FrogPilotCarState.new_message()
self.prev_distance_button = self.distance_button
self.distance_button = cp.vl["CRUISE_BUTTONS"]["ACC_Distance_Dec"]
self.distance_button = cp.vl[self.button_message]["ACC_Distance_Dec"]
# lock info
ret.doorOpen = any([cp.vl["BCM_1"]["DOOR_OPEN_FL"],
@@ -100,7 +101,7 @@ class CarState(CarStateBase):
ret.rightBlindspot = cp.vl["BSM_1"]["RIGHT_STATUS"] == 1
self.lkas_car_model = cp_cam.vl["DAS_6"]["CAR_MODEL"]
self.button_counter = cp.vl["CRUISE_BUTTONS"]["COUNTER"]
self.button_counter = cp.vl[self.button_message]["COUNTER"]
return ret, fp_ret
@@ -114,6 +115,7 @@ class CarState(CarStateBase):
@staticmethod
def get_can_parser(CP):
button_message = "CRUISE_BUTTONS_ALT" if CP.flags & ChryslerFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
messages = [
# sig_address, frequency
("ESP_1", 50),
@@ -121,7 +123,7 @@ class CarState(CarStateBase):
("ESP_6", 50),
("STEERING", 100),
("ECM_5", 50),
("CRUISE_BUTTONS", 50),
(button_message, 50),
("STEERING_LEVERS", 10),
("ORC_1", 2),
("BCM_1", 1),
+4 -3
View File
@@ -1,5 +1,5 @@
from cereal import car
from openpilot.selfdrive.car.chrysler.values import RAM_CARS
from openpilot.selfdrive.car.chrysler.values import ChryslerFlags, RAM_CARS
GearShifter = car.CarState.GearShifter
VisualAlert = car.CarControl.HUDControl.VisualAlert
@@ -62,10 +62,11 @@ def create_lkas_command(packer, CP, apply_steer, lkas_control_bit):
return packer.make_can_msg("LKAS_COMMAND", 0, values)
def create_cruise_buttons(packer, frame, bus, cancel=False, resume=False):
def create_cruise_buttons(packer, CP, frame, bus, cancel=False, resume=False):
values = {
"ACC_Cancel": cancel,
"ACC_Resume": resume,
"COUNTER": frame % 0x10,
}
return packer.make_can_msg("CRUISE_BUTTONS", bus, values)
button_message = "CRUISE_BUTTONS_ALT" if CP.flags & ChryslerFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
return packer.make_can_msg(button_message, bus, values)
+12
View File
@@ -535,6 +535,7 @@ FW_VERSIONS = {
b'05149848AC ',
b'05190341AD',
b'68378695AJ ',
b'68378696AI ',
b'68378696AJ ',
b'68378701AI ',
b'68378702AI ',
@@ -591,6 +592,7 @@ FW_VERSIONS = {
b'68360081AM',
b'68360085AJ',
b'68360085AL',
b'68360085AF',
b'68360086AH',
b'68360086AK',
b'68384328AD',
@@ -620,14 +622,21 @@ FW_VERSIONS = {
(Ecu.combinationMeter, 0x742, None): [
b'68361606AH',
b'68437735AC',
b'68437746AD',
b'68492682AD',
b'68525438AB',
b'68492693AD',
b'68525485AB',
b'68525487AB',
b'68525498AB',
b'68528791AF',
b'68620919AB',
b'68620921AC',
b'68620923AB',
b'68628474AB',
],
(Ecu.srs, 0x744, None): [
b'68346749AB',
b'68399794AC',
b'68428503AA',
b'68428505AA',
@@ -668,9 +677,12 @@ FW_VERSIONS = {
b'52401032AE',
b'52421132AF',
b'52421332AF',
b'52421332AG',
b'68527616AD ',
b'M2370131MB',
b'M2421132MB',
b'52421232AF',
b'52421492AA',
],
},
CAR.DODGE_DURANGO: {
+20 -5
View File
@@ -12,7 +12,6 @@ class CarInterface(CarInterfaceBase):
@staticmethod
def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs, params):
ret.carName = "chrysler"
ret.dashcamOnly = candidate in RAM_HD
# radar parsing needs some work, see https://github.com/commaai/openpilot/issues/26842
ret.radarUnavailable = True # DBC[candidate]['radar'] is None
@@ -55,14 +54,24 @@ class CarInterface(CarInterfaceBase):
elif candidate == CAR.RAM_1500_5TH_GEN:
ret.steerActuatorDelay = 0.2
ret.wheelbase = 3.88
ret.minSteerSpeed = 0.5
ret.minEnableSpeed = 14.5
# Older EPS FW allow steer to zero
if any(fw.ecu == 'eps' and b"68" < fw.fwVersion[:4] <= b"6831" for fw in car_fw):
ret.minSteerSpeed = 0.
elif candidate == CAR.RAM_HD_5TH_GEN:
ret.steerActuatorDelay = 0.2
ret.wheelbase = 3.785
ret.steerRatio = 15.61
ret.mass = 3405.
ret.minSteerSpeed = 16
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning, 1.0, False)
# Some RAM HD use Chrysler button address
if 570 not in fingerprint[0]:
ret.flags |= ChryslerFlags.RAM_HD_ALT_BUTTONS.value
else:
raise ValueError(f"Unsupported car: {candidate}")
@@ -85,10 +94,16 @@ class CarInterface(CarInterfaceBase):
events = self.create_common_events(ret, extra_gears=[car.CarState.GearShifter.low])
# Low speed steer alert hysteresis logic
if self.CP.minSteerSpeed > 0. and ret.vEgo < (self.CP.minSteerSpeed + 0.5):
self.low_speed_alert = True
elif ret.vEgo > (self.CP.minSteerSpeed + 1.):
self.low_speed_alert = False
if self.CP.carFingerprint in RAM_DT:
if self.CS.out.vEgo >= self.CP.minEnableSpeed:
self.low_speed_alert = False
if (self.CP.minEnableSpeed >= 14.5) and (self.CS.out.gearShifter != car.CarState.GearShifter.drive):
self.low_speed_alert = True
else:
if self.CP.minSteerSpeed > 0. and ret.vEgo < (self.CP.minSteerSpeed + 0.5):
self.low_speed_alert = True
elif ret.vEgo > (self.CP.minSteerSpeed + 1.):
self.low_speed_alert = False
if self.low_speed_alert:
events.add(car.CarEvent.EventName.belowSteerSpeed)
+2 -1
View File
@@ -13,6 +13,7 @@ Ecu = car.CarParams.Ecu
class ChryslerFlags(IntFlag):
# Detected flags
HIGHER_MIN_STEERING_SPEED = 1
RAM_HD_ALT_BUTTONS = 2
@dataclass
class ChryslerCarDocs(CarDocs):
@@ -100,7 +101,7 @@ class CarControllerParams:
elif CP.carFingerprint in RAM_DT:
self.STEER_DELTA_UP = 6
self.STEER_DELTA_DOWN = 6
self.STEER_MAX = 261 # EPS allows more, up to 350?
self.STEER_MAX = 350 # EPS allows more, up to 350?
else:
self.STEER_DELTA_UP = 3
self.STEER_DELTA_DOWN = 3