diff --git a/README.md b/README.md
index 45fdfc5106..1aef3664a0 100644
--- a/README.md
+++ b/README.md
@@ -158,6 +158,7 @@ Community Maintained Cars and Features
| Nissan | Leaf 2018-192 | Propilot | Stock | 0mph | 0mph |
| Nissan | Rogue 20192 | Propilot | Stock | 0mph | 0mph |
| Nissan | X-Trail 20172 | Propilot | Stock | 0mph | 0mph |
+| Subaru | Ascent 2019 | EyeSight | Stock | 0mph | 0mph |
| Subaru | Crosstrek 2018-19 | EyeSight | Stock | 0mph | 0mph |
| Subaru | Forester 2019 | EyeSight | Stock | 0mph | 0mph |
| Subaru | Impreza 2017-19 | EyeSight | Stock | 0mph | 0mph |
diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py
index 3bc13c76e1..4a0438f620 100644
--- a/selfdrive/car/subaru/interface.py
+++ b/selfdrive/car/subaru/interface.py
@@ -28,6 +28,16 @@ class CarInterface(CarInterfaceBase):
ret.steerRateCost = 0.7
ret.steerLimitTimer = 0.4
+ if candidate == CAR.ASCENT:
+ ret.mass = 2031. + STD_CARGO_KG
+ ret.wheelbase = 2.89
+ ret.centerToFront = ret.wheelbase * 0.5
+ ret.steerRatio = 13.5
+ ret.steerActuatorDelay = 0.3 # end-to-end angle controller
+ ret.lateralTuning.pid.kf = 0.00003
+ ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0., 20.], [0., 20.]]
+ ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.0025, 0.1], [0.00025, 0.01]]
+
if candidate == CAR.IMPREZA:
ret.mass = 1568. + STD_CARGO_KG
ret.wheelbase = 2.67
diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py
index 791edcf6db..d31c5cfb08 100644
--- a/selfdrive/car/subaru/values.py
+++ b/selfdrive/car/subaru/values.py
@@ -5,10 +5,16 @@ from cereal import car
Ecu = car.CarParams.Ecu
class CAR:
+ ASCENT = "SUBARU ASCENT LIMITED 2019"
IMPREZA = "SUBARU IMPREZA LIMITED 2019"
FORESTER = "SUBARU FORESTER 2019"
FINGERPRINTS = {
+ CAR.ASCENT: [
+ # SUBARU ASCENT LIMITED 2019
+ {
+ 2: 8, 64: 8, 65: 8, 72: 8, 73: 8, 280: 8, 281: 8, 290: 8, 312: 8, 313: 8, 314: 8, 315: 8, 316: 8, 326: 8, 544: 8, 545: 8, 546: 8, 552: 8, 554: 8, 557: 8, 576: 8, 577: 8, 722: 8, 801: 8, 802: 8, 805: 8, 808: 8, 811: 8, 816: 8, 826: 8, 837: 8, 838: 8, 839: 8, 842: 8, 912: 8, 915: 8, 940: 8, 1614: 8, 1617: 8, 1632: 8, 1650: 8, 1657: 8, 1658: 8, 1677: 8, 1722: 8, 1743: 8, 1759: 8, 1785: 5, 1786: 5, 1787: 5, 1788: 8
+ }],
CAR.IMPREZA: [{
2: 8, 64: 8, 65: 8, 72: 8, 73: 8, 280: 8, 281: 8, 290: 8, 312: 8, 313: 8, 314: 8, 315: 8, 316: 8, 326: 8, 544: 8, 545: 8, 546: 8, 552: 8, 554: 8, 557: 8, 576: 8, 577: 8, 722: 8, 801: 8, 802: 8, 805: 8, 808: 8, 816: 8, 826: 8, 837: 8, 838: 8, 839: 8, 842: 8, 912: 8, 915: 8, 940: 8, 1614: 8, 1617: 8, 1632: 8, 1650: 8, 1657: 8, 1658: 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
},
@@ -27,6 +33,7 @@ FINGERPRINTS = {
}
STEER_THRESHOLD = {
+ CAR.ASCENT: 80,
CAR.IMPREZA: 80,
CAR.FORESTER: 80,
}
@@ -36,6 +43,7 @@ ECU_FINGERPRINT = {
}
DBC = {
+ CAR.ASCENT: dbc_dict('subaru_global_2017', None),
CAR.IMPREZA: dbc_dict('subaru_global_2017', None),
CAR.FORESTER: dbc_dict('subaru_global_2017', None),
}
diff --git a/selfdrive/test/test_car_models.py b/selfdrive/test/test_car_models.py
index 40ff5d0352..f8e4e37454 100755
--- a/selfdrive/test/test_car_models.py
+++ b/selfdrive/test/test_car_models.py
@@ -360,6 +360,10 @@ routes = {
'carFingerprint': VOLKSWAGEN.GOLF,
'enableCamera': True,
},
+ "3c8f0c502e119c1c|2020-06-30--12-58-02": {
+ 'carFingerprint': SUBARU.ASCENT,
+ 'enableCamera': True,
+ },
"c321c6b697c5a5ff|2020-06-23--11-04-33": {
'carFingerprint': SUBARU.FORESTER,
'enableCamera': True,