mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-13 21:32:14 +08:00
@@ -2,7 +2,7 @@ from opendbc.can import CANPacker
|
||||
from opendbc.car import Bus, DT_CTRL
|
||||
from opendbc.car.lateral import apply_meas_steer_torque_limits
|
||||
from opendbc.car.chrysler import chryslercan
|
||||
from opendbc.car.chrysler.values import RAM_CARS, CarControllerParams, ChryslerFlags
|
||||
from opendbc.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags
|
||||
from opendbc.car.interfaces import CarControllerBase
|
||||
|
||||
|
||||
@@ -31,12 +31,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, CS.button_counter + 1, das_bus, CS.button_message, 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, CS.button_counter + 1, das_bus, CS.button_message, resume=True))
|
||||
|
||||
# HUD alerts
|
||||
if self.frame % 25 == 0:
|
||||
@@ -50,7 +50,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):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from opendbc.can import CANDefine, CANParser
|
||||
from opendbc.car import Bus, create_button_events, structs
|
||||
from opendbc.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS
|
||||
from opendbc.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS, ChryslerFrogPilotFlags
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.interfaces import CarStateBase
|
||||
|
||||
@@ -24,6 +24,9 @@ class CarState(CarStateBase):
|
||||
|
||||
self.distance_button = 0
|
||||
|
||||
# RealFast variables
|
||||
self.button_message = "CRUISE_BUTTONS_ALT" if FPCP.flags & ChryslerFrogPilotFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
|
||||
|
||||
def update(self, can_parsers) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
@@ -31,7 +34,7 @@ class CarState(CarStateBase):
|
||||
ret = structs.CarState()
|
||||
|
||||
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"],
|
||||
@@ -93,7 +96,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"]
|
||||
|
||||
ret.buttonEvents = create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise})
|
||||
|
||||
|
||||
@@ -64,13 +64,13 @@ def create_lkas_command(packer, CP, apply_torque, 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, frame, bus, button_message, cancel=False, resume=False):
|
||||
values = {
|
||||
"ACC_Cancel": cancel,
|
||||
"ACC_Resume": resume,
|
||||
"COUNTER": frame % 0x10,
|
||||
}
|
||||
return packer.make_can_msg("CRUISE_BUTTONS", bus, values)
|
||||
return packer.make_can_msg(button_message, bus, values)
|
||||
|
||||
|
||||
def chrysler_checksum(address: int, sig, d: bytearray) -> int:
|
||||
|
||||
@@ -441,6 +441,7 @@ FW_VERSIONS = {
|
||||
b'68453483AC',
|
||||
b'68453483AD',
|
||||
b'68453487AD',
|
||||
b'68453485AC',
|
||||
b'68453491AC',
|
||||
b'68453491AD',
|
||||
b'68453499AD',
|
||||
@@ -461,6 +462,7 @@ FW_VERSIONS = {
|
||||
b'68510282AG',
|
||||
b'68510282AH',
|
||||
b'68510283AG',
|
||||
b'68510283AH',
|
||||
b'68527346AE',
|
||||
b'68527361AD',
|
||||
b'68527375AD',
|
||||
@@ -555,6 +557,7 @@ FW_VERSIONS = {
|
||||
b'68552788AA',
|
||||
b'68552789AA',
|
||||
b'68552790AA',
|
||||
b'68552791AA',
|
||||
b'68552791AB',
|
||||
b'68552794AA',
|
||||
b'68552794AD',
|
||||
@@ -575,6 +578,7 @@ FW_VERSIONS = {
|
||||
b'05036067AE ',
|
||||
b'05036193AA ',
|
||||
b'05149368AA ',
|
||||
b'05149390AA ',
|
||||
b'05149374AA ',
|
||||
b'05149591AD ',
|
||||
b'05149591AE ',
|
||||
@@ -590,6 +594,7 @@ FW_VERSIONS = {
|
||||
b'05190346AD',
|
||||
b'68378695AI ',
|
||||
b'68378695AJ ',
|
||||
b'68378696AI ',
|
||||
b'68378695AK ',
|
||||
b'68378696AJ ',
|
||||
b'68378696AK ',
|
||||
@@ -626,6 +631,7 @@ FW_VERSIONS = {
|
||||
b'68500630AE',
|
||||
b'68500630AF',
|
||||
b'68500631AE',
|
||||
b'68500631AF',
|
||||
b'68502719AC ',
|
||||
b'68502722AC ',
|
||||
b'68502733AC ',
|
||||
@@ -667,6 +673,7 @@ FW_VERSIONS = {
|
||||
b'68360085AL',
|
||||
b'68360085AO',
|
||||
b'68360086AH',
|
||||
b'68360086AL',
|
||||
b'68360086AK',
|
||||
b'68360086AN',
|
||||
b'68384328AD',
|
||||
@@ -685,6 +692,7 @@ FW_VERSIONS = {
|
||||
b'68502994AC',
|
||||
b'68502994AD',
|
||||
b'68502996AD',
|
||||
b'68502996AC',
|
||||
b'68520867AE',
|
||||
b'68520867AF',
|
||||
b'68520870AC',
|
||||
@@ -701,14 +709,22 @@ 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'68620923AC',
|
||||
b'68628474AB',
|
||||
],
|
||||
(Ecu.srs, 0x744, None): [
|
||||
b'68346749AB',
|
||||
b'68399794AC',
|
||||
b'68428503AA',
|
||||
b'68428505AA',
|
||||
@@ -722,6 +738,7 @@ FW_VERSIONS = {
|
||||
b'68504022AC',
|
||||
b'68530686AB',
|
||||
b'68530686AC',
|
||||
b'68530686AD',
|
||||
b'68544596AC',
|
||||
b'68641704AA',
|
||||
],
|
||||
@@ -744,14 +761,19 @@ FW_VERSIONS = {
|
||||
b'52370131AF',
|
||||
b'52370231AF',
|
||||
b'52370231AG',
|
||||
b'52370231AK',
|
||||
b'52370491AA',
|
||||
b'52370931CT',
|
||||
b'52401032AE',
|
||||
b'52421132AF',
|
||||
b'52421332AF',
|
||||
b'52421332AG',
|
||||
b'68527616AD ',
|
||||
b'68528545AF',
|
||||
b'M2370131MB',
|
||||
b'M2421132MB',
|
||||
b'52421232AF',
|
||||
b'52421492AA',
|
||||
],
|
||||
},
|
||||
CAR.DODGE_DURANGO: {
|
||||
|
||||
@@ -62,9 +62,19 @@ class CarInterface(CarInterfaceBase):
|
||||
if any(fw.ecu == 'eps' and b"68" < fw.fwVersion[:4] <= b"6831" for fw in car_fw):
|
||||
ret.minSteerSpeed = 0.
|
||||
|
||||
# RealFast variables
|
||||
ret.minEnableSpeed = 14.5
|
||||
ret.minSteerSpeed = 0.5
|
||||
|
||||
elif candidate == CAR.RAM_HD_5TH_GEN:
|
||||
ret.steerActuatorDelay = 0.2
|
||||
|
||||
# RealFast variables
|
||||
ret.mass = 3405.
|
||||
ret.minSteerSpeed = 16
|
||||
ret.steerRatio = 15.61
|
||||
ret.wheelbase = 3.785
|
||||
|
||||
else:
|
||||
raise ValueError(f"Unsupported car: {candidate}")
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ class ChryslerFlags(IntFlag):
|
||||
HIGHER_MIN_STEERING_SPEED = 1
|
||||
|
||||
|
||||
# FrogPilot variables
|
||||
class ChryslerFrogPilotFlags(IntFlag):
|
||||
RAM_HD_ALT_BUTTONS = 1
|
||||
|
||||
|
||||
@dataclass
|
||||
class ChryslerCarDocs(CarDocs):
|
||||
package: str = "Adaptive Cruise Control (ACC)"
|
||||
@@ -104,7 +109,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
|
||||
|
||||
@@ -11,6 +11,9 @@ typedef struct {
|
||||
const unsigned int DAS_6;
|
||||
const unsigned int LKAS_COMMAND;
|
||||
const unsigned int CRUISE_BUTTONS;
|
||||
|
||||
// RealFast variables
|
||||
const unsigned int CRUISE_BUTTONS_ALT;
|
||||
} ChryslerAddrs;
|
||||
|
||||
typedef enum {
|
||||
@@ -145,7 +148,7 @@ static bool chrysler_tx_hook(const CANPacket_t *msg) {
|
||||
}
|
||||
|
||||
// FORCE CANCEL: only the cancel button press is allowed
|
||||
if (msg->addr == chrysler_addrs->CRUISE_BUTTONS) {
|
||||
if (msg->addr == chrysler_addrs->CRUISE_BUTTONS || msg->addr == chrysler_addrs->CRUISE_BUTTONS_ALT) {
|
||||
const bool is_cancel = msg->data[0] == 1U;
|
||||
const bool is_resume = msg->data[0] == 0x10U;
|
||||
const bool allowed = is_cancel || (is_resume && controls_allowed);
|
||||
@@ -171,6 +174,9 @@ static safety_config chrysler_init(uint16_t param) {
|
||||
.DAS_6 = 0x2A6, // LKAS HUD and auto headlight control from DASM
|
||||
.LKAS_COMMAND = 0x292, // LKAS controls from DASM
|
||||
.CRUISE_BUTTONS = 0x23B, // Cruise control buttons
|
||||
|
||||
// RealFast variables
|
||||
.CRUISE_BUTTONS_ALT = 0x23B, // Cruise control buttons
|
||||
};
|
||||
|
||||
// CAN messages for the 5th gen RAM DT platform
|
||||
@@ -183,6 +189,9 @@ static safety_config chrysler_init(uint16_t param) {
|
||||
.DAS_6 = 0xFA, // LKAS HUD and auto headlight control from DASM
|
||||
.LKAS_COMMAND = 0xA6, // LKAS controls from DASM
|
||||
.CRUISE_BUTTONS = 0xB1, // Cruise control buttons
|
||||
|
||||
// RealFast variables
|
||||
.CRUISE_BUTTONS_ALT = 0xB1, // Cruise control buttons
|
||||
};
|
||||
|
||||
static RxCheck chrysler_ram_dt_rx_checks[] = {
|
||||
@@ -206,12 +215,18 @@ static safety_config chrysler_init(uint16_t param) {
|
||||
{CHRYSLER_ADDRS.CRUISE_BUTTONS, 0, 3, .check_relay = false},
|
||||
{CHRYSLER_ADDRS.LKAS_COMMAND, 0, 6, .check_relay = true},
|
||||
{CHRYSLER_ADDRS.DAS_6, 0, 8, .check_relay = true},
|
||||
|
||||
// RealFast variables
|
||||
{CHRYSLER_ADDRS.CRUISE_BUTTONS_ALT, 2, 3, .check_relay = false},
|
||||
};
|
||||
|
||||
static const CanMsg CHRYSLER_RAM_DT_TX_MSGS[] = {
|
||||
{CHRYSLER_RAM_DT_ADDRS.CRUISE_BUTTONS, 2, 3, .check_relay = false},
|
||||
{CHRYSLER_RAM_DT_ADDRS.LKAS_COMMAND, 0, 8, .check_relay = true},
|
||||
{CHRYSLER_RAM_DT_ADDRS.DAS_6, 0, 8, .check_relay = true},
|
||||
|
||||
// RealFast variables
|
||||
{CHRYSLER_RAM_DT_ADDRS.CRUISE_BUTTONS_ALT, 2, 3, .check_relay = false},
|
||||
};
|
||||
|
||||
#ifdef ALLOW_DEBUG
|
||||
@@ -225,6 +240,9 @@ static safety_config chrysler_init(uint16_t param) {
|
||||
.DAS_6 = 0x275, // LKAS HUD and auto headlight control from DASM
|
||||
.LKAS_COMMAND = 0x276, // LKAS controls from DASM
|
||||
.CRUISE_BUTTONS = 0x23A, // Cruise control buttons
|
||||
|
||||
// RealFast variables
|
||||
.CRUISE_BUTTONS_ALT = 0x23B, // Cruise control buttons
|
||||
};
|
||||
|
||||
static RxCheck chrysler_ram_hd_rx_checks[] = {
|
||||
@@ -239,6 +257,9 @@ static safety_config chrysler_init(uint16_t param) {
|
||||
{CHRYSLER_RAM_HD_ADDRS.CRUISE_BUTTONS, 2, 3, .check_relay = false},
|
||||
{CHRYSLER_RAM_HD_ADDRS.LKAS_COMMAND, 0, 8, .check_relay = true},
|
||||
{CHRYSLER_RAM_HD_ADDRS.DAS_6, 0, 8, .check_relay = true},
|
||||
|
||||
// RealFast variables
|
||||
{CHRYSLER_RAM_HD_ADDRS.CRUISE_BUTTONS_ALT, 2, 3, .check_relay = false},
|
||||
};
|
||||
|
||||
const uint32_t CHRYSLER_PARAM_RAM_HD = 2U; // set for Ram HD platform
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from cereal import car, log
|
||||
import cereal.messaging as messaging
|
||||
from opendbc.car import DT_CTRL, structs
|
||||
from opendbc.car.chrysler.values import RAM_DT
|
||||
from opendbc.car.gm.values import GMFlags
|
||||
from opendbc.car.interfaces import MAX_CTRL_SPEED
|
||||
|
||||
@@ -58,10 +59,16 @@ class CarSpecificEvents:
|
||||
events = self.create_common_events(CS, CS_prev, extra_gears=extra_gears)
|
||||
|
||||
# Low speed steer alert hysteresis logic
|
||||
if self.CP.minSteerSpeed > 0. and CS.vEgo < (self.CP.minSteerSpeed + 0.5):
|
||||
self.low_speed_alert = True
|
||||
elif CS.vEgo > (self.CP.minSteerSpeed + 1.):
|
||||
self.low_speed_alert = False
|
||||
if self.CP.carFingerprint in RAM_DT:
|
||||
if CS.vEgo >= self.CP.minEnableSpeed:
|
||||
self.low_speed_alert = False
|
||||
if (self.CP.minEnableSpeed >= 14.5) and (CS.gearShifter != GearShifter.drive):
|
||||
self.low_speed_alert = True
|
||||
else:
|
||||
if self.CP.minSteerSpeed > 0. and CS.vEgo < (self.CP.minSteerSpeed + 0.5):
|
||||
self.low_speed_alert = True
|
||||
elif CS.vEgo > (self.CP.minSteerSpeed + 1.):
|
||||
self.low_speed_alert = False
|
||||
if self.low_speed_alert:
|
||||
events.add(EventName.belowSteerSpeed)
|
||||
|
||||
|
||||
@@ -57,6 +57,9 @@ class VehicleParamsLearner:
|
||||
|
||||
self.reset(None)
|
||||
|
||||
# FrogPilot variables
|
||||
self.CP = CP
|
||||
|
||||
def reset(self, t: float | None):
|
||||
self.kf.init_state(self.x_initial, covs=self.P_initial, filter_time=t)
|
||||
|
||||
@@ -187,6 +190,10 @@ class VehicleParamsLearner:
|
||||
liveParameters.debugFilterState.value = x.tolist()
|
||||
liveParameters.debugFilterState.std = P.tolist()
|
||||
|
||||
# FrogPilot variables
|
||||
if self.CP.carFingerprint == "RAM_HD":
|
||||
liveParameters.valid = True
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user