Skip to content

Commit 5d14e39

Browse files
vntarasovklaus385
authored andcommitted
GM: Cadillac ATS Coupe 2018 support (commaai#445)
* GM: Cadillac ATS Coupe 2018 support * Missed adding Cadillac ATS
1 parent a775d77 commit 5d14e39

File tree

6 files changed

+28
-10
lines changed

6 files changed

+28
-10
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Supported Cars
6262
| ---------------------| ------------------------| ---------------------| --------| ---------------| -----------------| ---------------|-------------------|
6363
| Acura | ILX 2016-17 | AcuraWatch Plus | Yes | Yes | 25mph<sup>1</sup>| 25mph | Nidec |
6464
| Acura | RDX 2018 | AcuraWatch Plus | Yes | Yes | 25mph<sup>1</sup>| 12mph | Nidec |
65+
| Cadillac<sup>3</sup> | ATS 2018 | Adaptive Cruise | yes | yes | 0mph | 7mph | Custom<sup>7</sup>|
6566
| Chevrolet<sup>3</sup>| Malibu 2017 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom<sup>7</sup>|
6667
| Chevrolet<sup>3</sup>| Volt 2017-18 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom<sup>7</sup>|
6768
| GMC<sup>3</sup>| Acadia Denali 2018 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom<sup>7</sup>|

selfdrive/car/gm/carcontroller.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
class CarControllerParams():
1212
def __init__(self, car_fingerprint):
13-
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
13+
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
1414
self.STEER_MAX = 300
1515
self.STEER_STEP = 2 # how often we update the steer cmd
1616
self.STEER_DELTA_UP = 7 # ~0.75s time to peak torque (255/50hz/0.75s)
@@ -104,7 +104,7 @@ def update(self, sendcan, enabled, CS, frame, actuators, \
104104
self.apply_steer_last = apply_steer
105105
idx = (frame / P.STEER_STEP) % 4
106106

107-
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
107+
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
108108
can_sends.append(gmcan.create_steering_control(self.packer_pt,
109109
canbus.powertrain, apply_steer, idx, lkas_enabled))
110110
if self.car_fingerprint == CAR.CADILLAC_CT6:
@@ -113,7 +113,7 @@ def update(self, sendcan, enabled, CS, frame, actuators, \
113113

114114
### GAS/BRAKE ###
115115

116-
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
116+
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
117117
# no output if not enabled, but keep sending keepalive messages
118118
# treat pedals as one
119119
final_pedal = actuators.gas - actuators.brake

selfdrive/car/gm/carstate.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ def get_powertrain_can_parser(CP, canbus):
3131
("LKATorqueDeliveredStatus", "PSCMStatus", 0),
3232
]
3333

34-
if CP.carFingerprint in (CAR.VOLT, CAR.MALIBU):
34+
if CP.carFingerprint == CAR.VOLT:
3535
signals += [
3636
("RegenPaddle", "EBCMRegenPaddle", 0),
3737
]
38-
if CP.carFingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
38+
if CP.carFingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
3939
signals += [
4040
("TractionControlOn", "ESPStatus", 0),
4141
("EPBClosed", "EPBStatus", 0),
@@ -120,13 +120,13 @@ def update(self, pt_cp):
120120
self.left_blinker_on = pt_cp.vl["BCMTurnSignals"]['TurnSignals'] == 1
121121
self.right_blinker_on = pt_cp.vl["BCMTurnSignals"]['TurnSignals'] == 2
122122

123-
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
123+
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
124124
self.park_brake = pt_cp.vl["EPBStatus"]['EPBClosed']
125125
self.main_on = pt_cp.vl["ECMEngineStatus"]['CruiseMainOn']
126126
self.acc_active = False
127127
self.esp_disabled = pt_cp.vl["ESPStatus"]['TractionControlOn'] != 1
128128
self.pcm_acc_status = pt_cp.vl["AcceleratorPedal2"]['CruiseState']
129-
if self.car_fingerprint in (CAR.VOLT, CAR.MALIBU):
129+
if self.car_fingerprint == CAR.VOLT:
130130
self.regen_pressed = bool(pt_cp.vl["EBCMRegenPaddle"]['RegenPaddle'])
131131
else:
132132
self.regen_pressed = False

selfdrive/car/gm/interface.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,15 @@ def get_params(candidate, fingerprint):
106106
ret.steerRatioRear = 0.
107107
ret.centerToFront = ret.wheelbase * 0.4
108108

109+
elif candidate == CAR.CADILLAC_ATS:
110+
ret.minEnableSpeed = 18 * CV.MPH_TO_MS
111+
ret.mass = 1601 + std_cargo
112+
ret.safetyModel = car.CarParams.SafetyModels.gm
113+
ret.wheelbase = 2.78
114+
ret.steerRatio = 15.3
115+
ret.steerRatioRear = 0.
116+
ret.centerToFront = ret.wheelbase * 0.49
117+
109118
elif candidate == CAR.CADILLAC_CT6:
110119
# engage speed is decided by pcm
111120
ret.minEnableSpeed = -1
@@ -275,7 +284,7 @@ def update(self, c):
275284
if ret.seatbeltUnlatched:
276285
events.append(create_event('seatbeltNotLatched', [ET.NO_ENTRY, ET.SOFT_DISABLE]))
277286

278-
if self.CS.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
287+
if self.CS.car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
279288
if self.CS.brake_error:
280289
events.append(create_event('brakeUnavailable', [ET.NO_ENTRY, ET.IMMEDIATE_DISABLE, ET.PERMANENT]))
281290
if not self.CS.gear_shifter_valid:

selfdrive/car/gm/radar_interface.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
def create_radard_can_parser(canbus, car_fingerprint):
2323

2424
dbc_f = DBC[car_fingerprint]['radar']
25-
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
25+
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
2626
# C1A-ARS3-A by Continental
2727
radar_targets = range(SLOT_1_MSG, SLOT_1_MSG + NUM_SLOTS)
2828
signals = zip(['FLRRNumValidTargets',

selfdrive/car/gm/values.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
class CAR:
77
HOLDEN_ASTRA = "HOLDEN ASTRA RS-V BK 2017"
88
VOLT = "CHEVROLET VOLT PREMIER 2017"
9+
CADILLAC_ATS = "CADILLAC ATS Premium Performance 2018"
910
CADILLAC_CT6 = "CADILLAC CT6 SUPERCRUISE 2018"
1011
MALIBU = "CHEVROLET MALIBU PREMIER 2017"
1112
ACADIA = "GMC ACADIA DENALI 2018"
@@ -38,7 +39,7 @@ class CM:
3839

3940
def is_eps_status_ok(eps_status, car_fingerprint):
4041
valid_eps_status = []
41-
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA):
42+
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
4243
valid_eps_status += [0, 1]
4344
elif car_fingerprint == CAR.CADILLAC_CT6:
4445
valid_eps_status += [0, 1, 4, 5, 6]
@@ -70,6 +71,11 @@ def parse_gear_shifter(can_gear):
7071
{
7172
170: 8, 171: 8, 189: 7, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 288: 5, 298: 8, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 479: 3, 481: 7, 485: 8, 489: 8, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 4, 532: 6, 546: 7, 550: 8, 554: 3, 558: 8, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 711: 6, 715: 8, 717: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 967: 4, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7, 1930: 7, 2016: 8, 2020: 8, 2024: 8, 2028: 8
7273
}],
74+
CAR.CADILLAC_ATS: [
75+
# Cadillac ATS Coupe Premium Performance 3.6L RWD w/ ACC 2018
76+
{
77+
190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 368: 3, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 401: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 462: 4, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 491: 2, 493: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 723: 2, 753: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 882: 8, 890: 1, 892: 2, 893: 2, 894: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1233: 8, 1241: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1916: 7, 1917: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7, 2016: 8, 2024: 8
78+
}],
7379
CAR.CADILLAC_CT6: [{
7480
190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 313: 8, 320: 3, 322: 7, 328: 1, 336: 1, 338: 6, 340: 6, 352: 5, 354: 5, 356: 8, 368: 3, 372: 5, 381: 8, 386: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 458: 5, 460: 5, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 569: 3, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 723: 2, 753: 5, 761: 7, 800: 6, 801: 8, 804: 3, 810: 8, 832: 8, 833: 8, 834: 8, 835: 6, 836: 5, 837: 8, 838: 8, 839: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 884: 8, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 1, 1017: 8, 1019: 2, 1020: 8, 1105: 6, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1417: 8, 1601: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1918: 7, 1919: 7, 1934: 7, 2016: 8, 2024: 8
7581
}],
@@ -92,6 +98,7 @@ def parse_gear_shifter(can_gear):
9298
CAR.VOLT: [384, 715], # 384 = "ASCMLKASteeringCmd", 715 = "ASCMGasRegenCmd"
9399
CAR.MALIBU: [384, 715], # 384 = "ASCMLKASteeringCmd", 715 = "ASCMGasRegenCmd"
94100
CAR.ACADIA: [384, 715], # 384 = "ASCMLKASteeringCmd", 715 = "ASCMGasRegenCmd"
101+
CAR.CADILLAC_ATS: [384, 715], # 384 = "ASCMLKASteeringCmd", 715 = "ASCMGasRegenCmd"
95102
CAR.CADILLAC_CT6: [], # Cadillac does not require ASCMs to be disconnected
96103
}
97104

@@ -100,5 +107,6 @@ def parse_gear_shifter(can_gear):
100107
CAR.VOLT: dbc_dict('gm_global_a_powertrain', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis'),
101108
CAR.MALIBU: dbc_dict('gm_global_a_powertrain', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis'),
102109
CAR.ACADIA: dbc_dict('gm_global_a_powertrain', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis'),
110+
CAR.CADILLAC_ATS: dbc_dict('gm_global_a_powertrain', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis'),
103111
CAR.CADILLAC_CT6: dbc_dict('cadillac_ct6_powertrain', 'cadillac_ct6_object', chassis_dbc='cadillac_ct6_chassis'),
104112
}

0 commit comments

Comments
 (0)