STEER_ERROR_MAX = 80 class CAR: PACIFICA_2017_HYBRID = "CHRYSLER PACIFICA HYBRID 2017" PACIFICA_2018_HYBRID = "CHRYSLER PACIFICA HYBRID 2018" PACIFICA_2019_HYBRID = "CHRYSLER PACIFICA HYBRID 2019" PACIFICA_2018 = "CHRYSLER PACIFICA 2018" # includes 2017 Pacifica PACIFICA_2020 = "CHRYSLER PACIFICA 2020" JEEP_CHEROKEE = "JEEP GRAND CHEROKEE V6 2018" # includes 2017 Trailhawk JEEP_CHEROKEE_2019 = "JEEP GRAND CHEROKEE 2019" # includes 2020 Trailhawk CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.PACIFICA_2017_HYBRID: CarInfo("Chrysler Pacifica Hybrid 2017-18", "Adaptive Cruise"), CAR.PACIFICA_2019_HYBRID: CarInfo("Chrysler Pacifica Hybrid 2019-21", "Adaptive Cruise"), CAR.PACIFICA_2018: CarInfo("Chrysler Pacifica 2017-18", "Adaptive Cruise"), CAR.PACIFICA_2020: CarInfo("Chrysler Pacifica 2020", "Adaptive Cruise"), CAR.JEEP_CHEROKEE: CarInfo("Jeep Grand Cherokee 2016-18", "Adaptive Cruise", "https://www.youtube.com/watch?v=eLR9o2JkuRk"), CAR.JEEP_CHEROKEE_2019: CarInfo("Jeep Grand Cherokee 2019-20", "Adaptive Cruise", "https://www.youtube.com/watch?v=jBe4lWnRSu4"), } # Unique CAN messages:
class CarControllerParams: ANGLE_DELTA_BP = [0., 5., 15.] ANGLE_DELTA_V = [5., .8, .15] # windup limit ANGLE_DELTA_VU = [5., 3.5, 0.4] # unwind limit LKAS_MAX_TORQUE = 1 # A value of 1 is easy to overpower STEER_THRESHOLD = 1.0 class CAR: BODY = "COMMA BODY" CAR_INFO: Dict[str, CarInfo] = { CAR.BODY: CarInfo("comma body", package="All"), } FW_VERSIONS = { CAR.BODY: { (Ecu.engine, 0x720, None): [b'0.0.01', b'02/27/2022'], (Ecu.debug, 0x721, None): [ b'166bd860' # git hash of the firmware used ], }, } DBC = { CAR.BODY: dbc_dict('comma_body', None), }
self.STEER_DRIVER_FACTOR = 1 # from dbc class CAR: ASCENT = "SUBARU ASCENT LIMITED 2019" IMPREZA = "SUBARU IMPREZA LIMITED 2019" IMPREZA_2020 = "SUBARU IMPREZA SPORT 2020" FORESTER = "SUBARU FORESTER 2019" FORESTER_PREGLOBAL = "SUBARU FORESTER 2017 - 2018" LEGACY_PREGLOBAL = "SUBARU LEGACY 2015 - 2018" OUTBACK_PREGLOBAL = "SUBARU OUTBACK 2015 - 2017" OUTBACK_PREGLOBAL_2018 = "SUBARU OUTBACK 2018 - 2019" CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.ASCENT: CarInfo("Subaru Ascent 2019", "EyeSight"), CAR.IMPREZA: [ CarInfo("Subaru Impreza 2017-19", "EyeSight"), CarInfo("Subaru Crosstrek 2018-20", "EyeSight"), ], CAR.FORESTER: CarInfo("Subaru Forester 2019-21", "EyeSight"), CAR.FORESTER_PREGLOBAL: CarInfo("Subaru Forester 2017-18", "EyeSight"), CAR.LEGACY_PREGLOBAL: CarInfo("Subaru Legacy 2015-18", "EyeSight"), CAR.OUTBACK_PREGLOBAL: CarInfo("Subaru Outback 2015-17", "EyeSight"), CAR.OUTBACK_PREGLOBAL_2018: CarInfo("Subaru Outback 2018-19", "EyeSight"), } FINGERPRINTS = { CAR.IMPREZA_2020: [{ 2: 8, 64: 8, 65: 8, 72: 8, 73: 8, 280: 8, 281: 8, 282: 8, 290: 8, 312: 8, 313: 8, 314: 8, 315: 8, 316: 8, 326: 8, 372: 8, 544: 8, 545: 8, 546: 8, 552: 8, 554: 8, 557: 8, 576: 8, 577: 8, 722: 8, 801: 8, 802: 8, 803: 8, 805: 8, 808: 8, 816: 8, 826: 8, 837: 8, 838: 8, 839: 8, 842: 8, 912: 8, 915: 8, 940: 8, 1617: 8, 1632: 8, 1650: 8, 1677: 8, 1697: 8, 1722: 8, 1743: 8, 1759: 8, 1786: 5, 1787: 5, 1788: 8, 1809: 8, 1813: 8, 1817: 8, 1821: 8, 1840: 8, 1848: 8, 1924: 8, 1932: 8, 1952: 8, 1960: 8, 1968: 8, 1976: 8, 2015: 8, 2016: 8, 2024: 8
DELPHI_MRR = 'FORD_CADS' class CANBUS: main = 0 radar = 1 camera = 2 class CAR: ESCAPE_MK4 = "FORD ESCAPE 4TH GEN" FOCUS_MK4 = "FORD FOCUS 4TH GEN" CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.ESCAPE_MK4: CarInfo("Ford Escape", "NA"), CAR.FOCUS_MK4: CarInfo("Ford Focus", "NA"), } FW_VERSIONS = { CAR.ESCAPE_MK4: { (Ecu.eps, 0x730, None): [ b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.esp, 0x760, None): [ b'LX6C-2D053-NS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x764, None): [ b'LB5T-14D049-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ],
ESCALADE_ESV = "CADILLAC ESCALADE ESV 2016" class Footnote(Enum): OBD_II = CarFootnote( 'Requires an <a href="https://comma.ai/shop/products/comma-car-harness">OBD-II car harness</a> and ' + '<a href="https://github.com/commaai/openpilot/wiki/GM#hardware">community built ASCM harness</a>. ' + '<b><i>NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).</i></b>', Column.MODEL) CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.HOLDEN_ASTRA: CarInfo("Holden Astra 2017", "Adaptive Cruise"), CAR.VOLT: CarInfo("Chevrolet Volt 2017-18", "Adaptive Cruise", footnotes=[Footnote.OBD_II], min_enable_speed=0), CAR.CADILLAC_ATS: CarInfo("Cadillac ATS Premium Performance 2018", "Adaptive Cruise"), CAR.MALIBU: CarInfo("Chevrolet Malibu Premier 2017", "Adaptive Cruise"), CAR.ACADIA: CarInfo("GMC Acadia 2018", "Adaptive Cruise", video_link="https://www.youtube.com/watch?v=0ZN6DdsBUZo", footnotes=[Footnote.OBD_II]), CAR.BUICK_REGAL:
LKAS_MAX_TORQUE = 1 # A value of 1 is easy to overpower STEER_THRESHOLD = 1.0 class CAR: XTRAIL = "NISSAN X-TRAIL 2017" LEAF = "NISSAN LEAF 2018" # Leaf with ADAS ECU found behind instrument cluster instead of glovebox # Currently the only known difference between them is the inverted seatbelt signal. LEAF_IC = "NISSAN LEAF 2018 Instrument Cluster" ROGUE = "NISSAN ROGUE 2019" ALTIMA = "NISSAN ALTIMA 2020" CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.XTRAIL: CarInfo("Nissan X-Trail 2017", "ProPILOT"), CAR.LEAF: CarInfo("Nissan Leaf 2018-22", "ProPILOT"), CAR.ROGUE: CarInfo("Nissan Rogue 2018-20", "ProPILOT"), CAR.ALTIMA: CarInfo("Nissan Altima 2019-20", "ProPILOT"), } FINGERPRINTS = { CAR.XTRAIL: [ { 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8,
class CarControllerParams: ANGLE_DELTA_BP = [0., 5., 15.] ANGLE_DELTA_V = [5., .8, .15] # windup limit ANGLE_DELTA_VU = [5., 3.5, 0.4] # unwind limit LKAS_MAX_TORQUE = 1 # A value of 1 is easy to overpower STEER_THRESHOLD = 1.0 class CAR: BODY = "COMMA BODY" CAR_INFO: Dict[str, CarInfo] = { CAR.BODY: CarInfo("comma body", package="All", harness=Harness.none), } FW_VERSIONS = { CAR.BODY: { (Ecu.engine, 0x720, None): [b'0.0.01', b'02/27/2022'], (Ecu.debug, 0x721, None): [ b'166bd860' # git hash of the firmware used ], }, } DBC = { CAR.BODY: dbc_dict('comma_body', None), }
from selfdrive.car import dbc_dict from selfdrive.car.docs_definitions import CarInfo from cereal import car Button = namedtuple('Button', ['event_type', 'can_addr', 'can_msg', 'values']) AngleRateLimit = namedtuple('AngleRateLimit', ['speed_points', 'max_angle_diff_points']) class CAR: AP1_MODELS = 'TESLA AP1 MODEL S' AP2_MODELS = 'TESLA AP2 MODEL S' CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.AP1_MODELS: CarInfo("Tesla AP1 Model S", "All"), CAR.AP2_MODELS: CarInfo("Tesla AP2 Model S", "All"), } FINGERPRINTS = { CAR.AP2_MODELS: [ { 1: 8, 3: 8, 14: 8, 21: 4, 69: 8, 109: 4, 257: 3, 264: 8, 277: 6,
STEER_DRIVER_MULTIPLIER = 1 # weight driver torque STEER_DRIVER_FACTOR = 1 # from dbc STEER_ERROR_MAX = 350 # max delta between torque cmd and torque motor class CAR: CX5 = "MAZDA CX-5" CX9 = "MAZDA CX-9" MAZDA3 = "MAZDA 3" MAZDA6 = "MAZDA 6" CX9_2021 = "MAZDA CX-9 2021" CX5_2022 = "MAZDA CX-5 2022" CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.CX5: CarInfo("Mazda CX-5 2017, 2019", "All"), # TODO: verify years and torque for first 4 CAR.CX9: CarInfo("Mazda CX-9 2016-17", "All"), CAR.MAZDA3: CarInfo("Mazda 3 2017", "All"), CAR.MAZDA6: CarInfo("Mazda 6 2017", "All"), CAR.CX9_2021: CarInfo("Mazda CX-9 2021", "All", good_torque=True), CAR.CX5_2022: CarInfo("Mazda CX-5 2022", "All", good_torque=True), } class LKAS_LIMITS: STEER_THRESHOLD = 15 DISABLE_SPEED = 45 # kph ENABLE_SPEED = 52 # kph class Buttons: NONE = 0
class CarControllerParams: ANGLE_DELTA_BP = [0., 5., 15.] ANGLE_DELTA_V = [5., .8, .15] # windup limit ANGLE_DELTA_VU = [5., 3.5, 0.4] # unwind limit LKAS_MAX_TORQUE = 1 # A value of 1 is easy to overpower STEER_THRESHOLD = 1.0 class CAR: BODY = "COMMA BODY" CAR_INFO: Dict[str, CarInfo] = { CAR.BODY: CarInfo("comma body", package="All", good_torque=True), } FW_VERSIONS = { CAR.BODY: { (Ecu.engine, 0x720, None): [b'0.0.01', b'02/27/2022'], (Ecu.debug, 0x721, None): [ b'166bd860' # git hash of the firmware used ], }, } DBC = { CAR.BODY: dbc_dict('comma_body', None), }
class CarControllerParams: ANGLE_DELTA_BP = [0., 5., 15.] ANGLE_DELTA_V = [5., .8, .15] # windup limit ANGLE_DELTA_VU = [5., 3.5, 0.4] # unwind limit LKAS_MAX_TORQUE = 1 # A value of 1 is easy to overpower STEER_THRESHOLD = 1.0 class CAR: BODY = "COMMA BODY" CAR_INFO: Dict[str, CarInfo] = { CAR.BODY: CarInfo("comma body", package="All", good_torque=True, harness=Harness.none), } FW_VERSIONS = { CAR.BODY: { (Ecu.engine, 0x720, None): [b'0.0.01', b'02/27/2022'], (Ecu.debug, 0x721, None): [ b'166bd860' # git hash of the firmware used ], }, } DBC = { CAR.BODY: dbc_dict('comma_body', None), }