diff --git a/.gitignore b/.gitignore
index 27196b552825c6..9bdfbc71632719 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,6 +32,9 @@ selfdrive/proclogd/proclogd
selfdrive/ui/ui
selfdrive/test/tests/plant/out
selfdrive/visiond/visiond
+selfdrive/loggerd/loggerd
+selfdrive/sensord/gpsd
+selfdrive/sensord/sensord
/src/
one
diff --git a/.travis.yml b/.travis.yml
index 52a42044278159..8683d8bee015be 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,21 +3,5 @@ sudo: required
services:
- docker
-install:
- - docker build -t tmppilot -f Dockerfile.openpilot .
-
script:
- - docker run
- tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/ && ./test_fingerprints.py'
- - docker run
- tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pyflakes $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda" | grep -vi "^\./tools")'
- - docker run
- tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pylint $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda" | grep -vi "^\./tools"); exit $(($? & 3))'
- - docker run tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover common'
- - docker run tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/can'
- - docker run tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/boardd'
- - docker run tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/controls'
- - docker run tmppilot /bin/sh -c 'cd /tmp/openpilot/ && python -m unittest discover selfdrive/loggerd'
- - docker run
- -v "$(pwd)"/selfdrive/test/tests/plant/out:/tmp/openpilot/selfdrive/test/tests/plant/out
- tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/tests/plant && OPTEST=1 ./test_longitudinal.py'
+ - ./run_docker_tests.sh
diff --git a/README.md b/README.md
index 7a4825846f7daa..dfbb76803083a2 100644
--- a/README.md
+++ b/README.md
@@ -101,7 +101,7 @@ Supported Cars
| Toyota | Corolla 2017-19 | All | Yes | Yes2| 20mph1| 0mph | Toyota |
| Toyota | Corolla 2020 | All | Yes | Yes | 0mph | 0mph | Toyota |
| Toyota | Corolla Hatchback 2019 | All | Yes | Yes | 0mph | 0mph | Toyota |
-| Toyota | Highlander 2017-18 | All | Yes | Yes2| 0mph | 0mph | Toyota |
+| Toyota | Highlander 2017-19 | All | Yes | Yes2| 0mph | 0mph | Toyota |
| Toyota | Highlander Hybrid 2018 | All | Yes | Yes2| 0mph | 0mph | Toyota |
| Toyota | Prius 2016 | TSS-P | Yes | Yes2| 0mph | 0mph | Toyota |
| Toyota | Prius 2017-19 | All | Yes | Yes2| 0mph | 0mph | Toyota |
diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh
index 4aa9d402b760cf..287c72a78e7f14 100755
--- a/launch_chffrplus.sh
+++ b/launch_chffrplus.sh
@@ -13,9 +13,16 @@ fi
function launch {
# apply update
if [ "$(git rev-parse HEAD)" != "$(git rev-parse @{u})" ]; then
- git reset --hard @{u} &&
- git clean -xdf &&
- exec "${BASH_SOURCE[0]}"
+ git reset --hard @{u} &&
+ git clean -xdf &&
+
+ # Touch all files on release2 after checkout to prevent rebuild
+ BRANCH=$(git rev-parse --abbrev-ref HEAD)
+ if [[ "$BRANCH" == "release2" ]]; then
+ touch **
+ fi
+
+ exec "${BASH_SOURCE[0]}"
fi
# no cpu rationing for now
diff --git a/run_docker_tests.sh b/run_docker_tests.sh
index dc629e61370f1d..10d1bbc835c3d7 100755
--- a/run_docker_tests.sh
+++ b/run_docker_tests.sh
@@ -3,12 +3,12 @@ set -e
docker build -t tmppilot -f Dockerfile.openpilot .
-docker run --rm \
- tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/ && ./test_fingerprints.py'
-docker run --rm \
- tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pyflakes $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda")'
-docker run --rm \
- tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pylint $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda"); exit $(($? & 3))'
-docker run --rm \
- -v "$(pwd)"/selfdrive/test/tests/plant/out:/tmp/openpilot/selfdrive/test/tests/plant/out \
- tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/tests/plant && OPTEST=1 ./test_longitudinal.py'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/ && ./test_fingerprints.py'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pyflakes $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda" | grep -vi "^\./tools")'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && pylint $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda" | grep -vi "^\./tools"); exit $(($? & 3))'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover common'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/can'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/boardd'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && make -C cereal && python -m unittest discover selfdrive/controls'
+docker run --rm tmppilot /bin/sh -c 'cd /tmp/openpilot/ && python -m unittest discover selfdrive/loggerd'
+docker run --rm -v "$(pwd)"/selfdrive/test/tests/plant/out:/tmp/openpilot/selfdrive/test/tests/plant/out tmppilot /bin/sh -c 'cd /tmp/openpilot/selfdrive/test/tests/plant && OPTEST=1 ./test_longitudinal.py'
diff --git a/selfdrive/can/Makefile b/selfdrive/can/Makefile
index e53a0730ded7e2..a9ee1e6861ef5d 100644
--- a/selfdrive/can/Makefile
+++ b/selfdrive/can/Makefile
@@ -38,7 +38,7 @@ OBJDIR = obj
OPENDBC_PATH := $(shell python2 -c 'import opendbc; print opendbc.DBC_PATH')
-DBC_SOURCES := $(wildcard $(OPENDBC_PATH)/*.dbc)
+DBC_SOURCES := $(sort $(wildcard $(OPENDBC_PATH)/*.dbc))
DBC_OBJS := $(patsubst $(OPENDBC_PATH)/%.dbc,$(OBJDIR)/%.o,$(DBC_SOURCES))
DBC_CCS := $(patsubst $(OPENDBC_PATH)/%.dbc,dbc_out/%.cc,$(DBC_SOURCES))
.SECONDARY: $(DBC_CCS)
diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py
index bb996e5885e37a..3b259c622289fd 100644
--- a/selfdrive/car/__init__.py
+++ b/selfdrive/car/__init__.py
@@ -3,6 +3,34 @@
# kg of standard extra cargo to count for drive, gas, etc...
STD_CARGO_KG = 136.
+
+# FIXME: hardcoding honda civic 2016 touring params so they can be used to
+# scale unknown params for other cars
+class CivicParams:
+ MASS = 1326. + STD_CARGO_KG
+ WHEELBASE = 2.70
+ CENTER_TO_FRONT = WHEELBASE * 0.4
+ CENTER_TO_REAR = WHEELBASE - CENTER_TO_FRONT
+ ROTATIONAL_INERTIA = 2500
+ TIRE_STIFFNESS_FRONT = 192150
+ TIRE_STIFFNESS_REAR = 202500
+
+# TODO: get actual value, for now starting with reasonable value for
+# civic and scaling by mass and wheelbase
+def scale_rot_inertia(mass, wheelbase):
+ return CivicParams.ROTATIONAL_INERTIA * mass * wheelbase ** 2 / (CivicParams.MASS * CivicParams.WHEELBASE ** 2)
+
+# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
+# mass and CG position, so all cars will have approximately similar dyn behaviors
+def scale_tire_stiffness(mass, wheelbase, center_to_front, tire_stiffness_factor=1.0):
+ center_to_rear = wheelbase - center_to_front
+ tire_stiffness_front = (CivicParams.TIRE_STIFFNESS_FRONT * tire_stiffness_factor) * mass / CivicParams.MASS * \
+ (center_to_rear / wheelbase) / (CivicParams.CENTER_TO_REAR / CivicParams.WHEELBASE)
+
+ tire_stiffness_rear = (CivicParams.TIRE_STIFFNESS_REAR * tire_stiffness_factor) * mass / CivicParams.MASS * \
+ (center_to_front / wheelbase) / (CivicParams.CENTER_TO_FRONT / CivicParams.WHEELBASE)
+
+ return tire_stiffness_front, tire_stiffness_rear
def dbc_dict(pt_dbc, radar_dbc, chassis_dbc=None):
return {'pt': pt_dbc, 'radar': radar_dbc, 'chassis': chassis_dbc}
diff --git a/selfdrive/car/chrysler/interface.py b/selfdrive/car/chrysler/interface.py
index 6621c7e20ffcdf..793f7320844148 100755
--- a/selfdrive/car/chrysler/interface.py
+++ b/selfdrive/car/chrysler/interface.py
@@ -6,7 +6,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.chrysler.carstate import CarState, get_can_parser, get_camera_parser
from selfdrive.car.chrysler.values import ECU, check_ecu_msgs, CAR
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
class CarInterface(object):
@@ -51,16 +51,6 @@ def get_params(candidate, fingerprint, vin=""):
# pedal
ret.enableCruise = True
- # FIXME: hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 85400 * 2.0
- tireStiffnessRear_civic = 90000 * 2.0
-
# Speed conversion: 20, 45 mph
ret.wheelbase = 3.089 # in meters for Pacifica Hybrid 2017
ret.steerRatio = 16.2 # Pacifica Hybrid 2017
@@ -85,20 +75,13 @@ def get_params(candidate, fingerprint, vin=""):
ret.minSteerSpeed = 17.5 # m/s 17 on the way up, 13 on the way down once engaged.
# TODO allow 2019 cars to steer down to 13 m/s if already engaged.
- centerToRear = ret.wheelbase - ret.centerToFront
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = tireStiffnessFront_civic * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = tireStiffnessRear_civic * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront)
# no rear steering, at least on the listed cars above
ret.steerRatioRear = 0.
diff --git a/selfdrive/car/chrysler/values.py b/selfdrive/car/chrysler/values.py
index c3e1c358057029..188931a060e979 100644
--- a/selfdrive/car/chrysler/values.py
+++ b/selfdrive/car/chrysler/values.py
@@ -28,6 +28,8 @@ class CAR:
],
CAR.PACIFICA_2018_HYBRID: [
{68: 8, 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 528: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 660: 8, 669: 3, 671: 8, 672: 8, 680: 8, 701: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 736: 8, 737: 8, 746: 5, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8},
+ # based on 9ae7821dc4e92455|2019-07-01--16-42-55
+ {168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 701: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1225: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1251: 8, 1252: 8, 1258: 8, 1259: 8, 1260: 8, 1262: 8, 1284: 8, 1537: 8, 1538: 8, 1562: 8, 1568: 8, 1856: 8, 1858: 8, 1860: 8, 1865: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1891: 8, 1892: 8, 1898: 8, 1899: 8, 1900: 8, 1902: 8, 2016: 8, 2018: 8, 2019: 8, 2020: 8, 2023: 8, 2024: 8, 2026: 8, 2027: 8, 2028: 8, 2031: 8},
],
CAR.PACIFICA_2019_HYBRID: [
{168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 660: 8, 669: 3, 671: 8, 672: 8, 680: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 736: 8, 737: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770:8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1538: 8},
diff --git a/selfdrive/car/ford/interface.py b/selfdrive/car/ford/interface.py
index 7664d99640eaab..0f3bbc33cc2b84 100755
--- a/selfdrive/car/ford/interface.py
+++ b/selfdrive/car/ford/interface.py
@@ -7,7 +7,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.ford.carstate import CarState, get_can_parser
from selfdrive.car.ford.values import MAX_ANGLE
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
class CarInterface(object):
@@ -51,16 +51,6 @@ def get_params(candidate, fingerprint, vin=""):
# pedal
ret.enableCruise = True
- # FIXME: hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 85400
- tireStiffnessRear_civic = 90000
-
ret.wheelbase = 2.85
ret.steerRatio = 14.8
ret.mass = 3045. * CV.LB_TO_KG + STD_CARGO_KG
@@ -69,32 +59,21 @@ def get_params(candidate, fingerprint, vin=""):
ret.lateralTuning.pid.kf = 1. / MAX_ANGLE # MAX Steer angle to normalize FF
ret.steerActuatorDelay = 0.1 # Default delay, not measured yet
ret.steerRateCost = 1.0
-
- f = 1.2
- tireStiffnessFront_civic *= f
- tireStiffnessRear_civic *= f
-
ret.centerToFront = ret.wheelbase * 0.44
-
+ tire_stiffness_factor = 0.5328
# min speed to enable ACC. if car can do stop and go, then set enabling speed
# to a negative value, so it won't matter.
ret.minEnableSpeed = -1.
- centerToRear = ret.wheelbase - ret.centerToFront
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = tireStiffnessFront_civic * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = tireStiffnessRear_civic * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
+ tire_stiffness_factor=tire_stiffness_factor)
# no rear steering, at least on the listed cars above
ret.steerRatioRear = 0.
diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py
index 4a909bc84403ff..c066a6523f2213 100755
--- a/selfdrive/car/gm/interface.py
+++ b/selfdrive/car/gm/interface.py
@@ -7,7 +7,7 @@
from selfdrive.car.gm.values import DBC, CAR, STOCK_CONTROL_MSGS, AUDIO_HUD, \
SUPERCRUISE_CARS, AccState
from selfdrive.car.gm.carstate import CarState, CruiseButtons, get_powertrain_can_parser
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
class CanBus(object):
@@ -60,6 +60,7 @@ def get_params(candidate, fingerprint, vin=""):
# or camera is on powertrain bus (LKA cars without ACC).
ret.enableCamera = not any(x for x in STOCK_CONTROL_MSGS[candidate] if x in fingerprint)
ret.openpilotLongitudinalControl = ret.enableCamera
+ tire_stiffness_factor = 0.444 # not optimized yet
if candidate == CAR.VOLT:
# supports stop and go, but initial engage must be above 18mph (which include conservatism)
@@ -129,30 +130,14 @@ def get_params(candidate, fingerprint, vin=""):
ret.centerToFront = ret.wheelbase * 0.465
- # hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 85400
- tireStiffnessRear_civic = 90000
-
- centerToRear = ret.wheelbase - ret.centerToFront
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = tireStiffnessFront_civic * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = tireStiffnessRear_civic * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
+ tire_stiffness_factor=tire_stiffness_factor)
# same tuning for Volt and CT6 for now
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py
index 72c85c862cea57..93aaf0182b7db6 100755
--- a/selfdrive/car/honda/interface.py
+++ b/selfdrive/car/honda/interface.py
@@ -10,7 +10,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.honda.carstate import CarState, get_can_parser, get_cam_can_parser
from selfdrive.car.honda.values import CruiseButtons, CAR, HONDA_BOSCH, AUDIO_HUD, VISUAL_HUD, CAMERA_MSGS
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, CivicParams, scale_rot_inertia, scale_tire_stiffness
from selfdrive.controls.lib.planner import _A_CRUISE_MAX_V_FOLLOWING
A_ACC_MAX = max(_A_CRUISE_MAX_V_FOLLOWING)
@@ -152,16 +152,6 @@ def get_params(candidate, fingerprint, vin=""):
ret.enableCruise = not ret.enableGasInterceptor
- # FIXME: hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 192150
- tireStiffnessRear_civic = 202500
-
# Optimized car params: tire_stiffness_factor and steerRatio are a result of a vehicle
# model optimization process. Certain Hondas have an extra steering sensor at the bottom
# of the steering rack, which improves controls quality as it removes the steering column
@@ -174,9 +164,9 @@ def get_params(candidate, fingerprint, vin=""):
if candidate in [CAR.CIVIC, CAR.CIVIC_BOSCH]:
stop_and_go = True
- ret.mass = mass_civic
- ret.wheelbase = wheelbase_civic
- ret.centerToFront = centerToFront_civic
+ ret.mass = CivicParams.MASS
+ ret.wheelbase = CivicParams.WHEELBASE
+ ret.centerToFront = CivicParams.CENTER_TO_FRONT
ret.steerRatio = 14.63 # 10.93 is end-to-end spec
tire_stiffness_factor = 1.
# Civic at comma has modified steering FW, so different tuning for the Neo in that car
@@ -334,20 +324,14 @@ def get_params(candidate, fingerprint, vin=""):
# conflict with PCM acc
ret.minEnableSpeed = -1. if (stop_and_go or ret.enableGasInterceptor) else 25.5 * CV.MPH_TO_MS
- centerToRear = ret.wheelbase - ret.centerToFront
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = (tireStiffnessFront_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = (tireStiffnessRear_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
+ tire_stiffness_factor=tire_stiffness_factor)
# no rear steering, at least on the listed cars above
ret.steerRatioRear = 0.
diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py
index bd99eaa5ac7b91..67ca2261ff7f17 100644
--- a/selfdrive/car/hyundai/interface.py
+++ b/selfdrive/car/hyundai/interface.py
@@ -6,7 +6,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.hyundai.carstate import CarState, get_can_parser, get_camera_parser
from selfdrive.car.hyundai.values import CAMERA_MSGS, CAR, get_hud_alerts, FEATURES
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
class CarInterface(object):
@@ -51,19 +51,9 @@ def get_params(candidate, fingerprint, vin=""):
ret.safetyModel = car.CarParams.SafetyModel.hyundai
ret.enableCruise = True # stock acc
- # FIXME: hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 192150
- tireStiffnessRear_civic = 202500
- tire_stiffness_factor = 1.
-
ret.steerActuatorDelay = 0.1 # Default delay
ret.steerRateCost = 0.5
+ tire_stiffness_factor = 1.
if candidate == CAR.SANTA_FE:
ret.lateralTuning.pid.kf = 0.00005
@@ -129,21 +119,14 @@ def get_params(candidate, fingerprint, vin=""):
ret.centerToFront = ret.wheelbase * 0.4
- centerToRear = ret.wheelbase - ret.centerToFront
-
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = (tireStiffnessFront_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = (tireStiffnessRear_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
+ tire_stiffness_factor=tire_stiffness_factor)
# no rear steering, at least on the listed cars above
diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py
index a609ee9092c115..e9d9c117fc714c 100644
--- a/selfdrive/car/subaru/interface.py
+++ b/selfdrive/car/subaru/interface.py
@@ -6,7 +6,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.subaru.values import CAR
from selfdrive.car.subaru.carstate import CarState, get_powertrain_can_parser, get_camera_can_parser
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
class CarInterface(object):
@@ -58,7 +58,6 @@ def get_params(candidate, fingerprint, vin=""):
ret.wheelbase = 2.67
ret.centerToFront = ret.wheelbase * 0.5
ret.steerRatio = 15
- tire_stiffness_factor = 1.0
ret.steerActuatorDelay = 0.4 # end-to-end angle controller
ret.lateralTuning.pid.kf = 0.00005
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0., 20.], [0., 20.]]
@@ -84,30 +83,13 @@ def get_params(candidate, fingerprint, vin=""):
# end from gm
- # hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 192150
- tireStiffnessRear_civic = 202500
- centerToRear = ret.wheelbase - ret.centerToFront
-
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = (tireStiffnessFront_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = (tireStiffnessRear_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront)
return ret
diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py
index 9994e793dd6665..d964f8c4328b92 100644
--- a/selfdrive/car/toyota/carstate.py
+++ b/selfdrive/car/toyota/carstate.py
@@ -69,8 +69,8 @@ def get_can_parser(CP):
# add gas interceptor reading if we are using it
if CP.enableGasInterceptor:
- signals.append(("INTERCEPTOR_GAS", "GAS_SENSOR", 0))
- checks.append(("GAS_SENSOR", 50))
+ signals.append(("INTERCEPTOR_GAS", "GAS_SENSOR", 0))
+ checks.append(("GAS_SENSOR", 50))
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 0, timeout=100)
diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py
index 83bf921d95d6dd..29abfeb8464db6 100755
--- a/selfdrive/car/toyota/interface.py
+++ b/selfdrive/car/toyota/interface.py
@@ -6,7 +6,7 @@
from selfdrive.controls.lib.vehicle_model import VehicleModel
from selfdrive.car.toyota.carstate import CarState, get_can_parser, get_cam_can_parser
from selfdrive.car.toyota.values import ECU, check_ecu_msgs, CAR, NO_STOP_TIMER_CAR
-from selfdrive.car import STD_CARGO_KG
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness
from selfdrive.swaglog import cloudlog
@@ -54,16 +54,6 @@ def get_params(candidate, fingerprint, vin=""):
# pedal
ret.enableCruise = not ret.enableGasInterceptor
- # FIXME: hardcoding honda civic 2016 touring params so they can be used to
- # scale unknown params for other cars
- mass_civic = 2923. * CV.LB_TO_KG + STD_CARGO_KG
- wheelbase_civic = 2.70
- centerToFront_civic = wheelbase_civic * 0.4
- centerToRear_civic = wheelbase_civic - centerToFront_civic
- rotationalInertia_civic = 2500
- tireStiffnessFront_civic = 192150
- tireStiffnessRear_civic = 202500
-
ret.steerActuatorDelay = 0.12 # Default delay, Prius has larger delay
if candidate != CAR.PRIUS:
ret.lateralTuning.init('pid')
@@ -100,7 +90,7 @@ def get_params(candidate, fingerprint, vin=""):
ret.safetyParam = 100
ret.wheelbase = 2.70
ret.steerRatio = 17.8
- tire_stiffness_factor = 0.444
+ tire_stiffness_factor = 0.444 # not optimized yet
ret.mass = 2860. * CV.LB_TO_KG + STD_CARGO_KG # mean between normal and hybrid
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.05]]
ret.lateralTuning.pid.kf = 0.00003 # full torque for 20 deg at 80mph means 0.00007818594
@@ -140,10 +130,10 @@ def get_params(candidate, fingerprint, vin=""):
ret.safetyParam = 73
ret.wheelbase = 2.78
ret.steerRatio = 16.0
- tire_stiffness_factor = 0.444 # not optimized yet
+ tire_stiffness_factor = 0.8
ret.mass = 4607. * CV.LB_TO_KG + STD_CARGO_KG #mean between normal and hybrid limited
- ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.05]]
- ret.lateralTuning.pid.kf = 0.00006
+ ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.18], [0.015]] # community tuning
+ ret.lateralTuning.pid.kf = 0.00012 # community tuning
elif candidate == CAR.AVALON:
stop_and_go = False
@@ -170,7 +160,7 @@ def get_params(candidate, fingerprint, vin=""):
ret.safetyParam = 73
ret.wheelbase = 2.63906
ret.steerRatio = 13.9
- tire_stiffness_factor = 0.444
+ tire_stiffness_factor = 0.444 # not optimized yet
ret.mass = 3060. * CV.LB_TO_KG + STD_CARGO_KG
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.1]]
ret.lateralTuning.pid.kf = 0.00007818594
@@ -179,8 +169,8 @@ def get_params(candidate, fingerprint, vin=""):
stop_and_go = True
ret.safetyParam = 73
ret.wheelbase = 2.8702
- ret.steerRatio = 16.0 #not optimized
- tire_stiffness_factor = 0.444
+ ret.steerRatio = 16.0 # not optimized
+ tire_stiffness_factor = 0.444 # not optimized yet
ret.mass = 3704. * CV.LB_TO_KG + STD_CARGO_KG
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.1]]
ret.lateralTuning.pid.kf = 0.00007818594
@@ -195,20 +185,14 @@ def get_params(candidate, fingerprint, vin=""):
# to a negative value, so it won't matter.
ret.minEnableSpeed = -1. if (stop_and_go or ret.enableGasInterceptor) else 19. * CV.MPH_TO_MS
- centerToRear = ret.wheelbase - ret.centerToFront
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
- ret.rotationalInertia = rotationalInertia_civic * \
- ret.mass * ret.wheelbase**2 / (mass_civic * wheelbase_civic**2)
+ ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
# TODO: start from empirically derived lateral slip stiffness for the civic and scale by
# mass and CG position, so all cars will have approximately similar dyn behaviors
- ret.tireStiffnessFront = (tireStiffnessFront_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (centerToRear / ret.wheelbase) / (centerToRear_civic / wheelbase_civic)
- ret.tireStiffnessRear = (tireStiffnessRear_civic * tire_stiffness_factor) * \
- ret.mass / mass_civic * \
- (ret.centerToFront / ret.wheelbase) / (centerToFront_civic / wheelbase_civic)
+ ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
+ tire_stiffness_factor=tire_stiffness_factor)
# no rear steering, at least on the listed cars above
ret.steerRatioRear = 0.
diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py
index f487888424942d..da8b02dcd7212c 100644
--- a/selfdrive/car/toyota/values.py
+++ b/selfdrive/car/toyota/values.py
@@ -165,9 +165,9 @@ def check_ecu_msgs(fingerprint, ecu):
{
36: 8, 37: 8, 170: 8, 180: 8, 186: 4, 355: 5, 401: 8, 426: 6, 452: 8, 464: 8, 466: 8, 467: 8, 544: 4, 550: 8, 552: 4, 562: 6, 565: 8, 608: 8, 610: 8, 643: 7, 705: 8, 728: 8, 740: 5, 742: 8, 743: 8, 761: 8, 764: 8, 765: 8, 800: 8, 810: 2, 812: 8, 824: 8, 829: 2, 830: 7, 835: 8, 836: 8, 865: 8, 869: 7, 870: 7, 871: 2, 877: 8, 881: 8, 882: 8, 885: 8, 896: 8, 898: 8, 900: 6, 902: 6, 905: 8, 921: 8, 933: 8, 934: 8, 935: 8, 944: 8, 945: 8, 951: 8, 955: 8, 956: 8, 976: 1, 998: 5, 999: 7, 1000: 8, 1001: 8, 1002: 8, 1017: 8, 1020: 8, 1041: 8, 1042: 8, 1044: 8, 1056: 8, 1059: 1, 1063: 8, 1076: 8, 1077: 8,1114: 8, 1161: 8, 1162: 8, 1163: 8, 1164: 8, 1165: 8, 1166: 8, 1167: 8, 1172: 8, 1235: 8, 1279: 8, 1541: 8, 1552: 8, 1553:8, 1556: 8, 1557: 8, 1568: 8, 1570: 8, 1571: 8, 1572: 8, 1592: 8, 1594: 8, 1595: 8, 1649: 8, 1745: 8, 1775: 8, 1779: 8, 1786: 8, 1787: 8, 1788: 8, 1789: 8, 1904: 8, 1912: 8, 1990: 8, 1998: 8
},
- # XLE and AWD
+ # XLE, Limited, and AWD
{
- 36: 8, 37: 8, 170: 8, 180: 8, 186: 4, 401: 8, 426: 6, 452: 8, 464: 8, 466: 8, 467: 8, 544: 4, 550: 8, 552: 4, 562: 6, 565: 8, 608: 8, 610: 8, 643: 7, 658: 8, 705: 8, 728: 8, 740: 5, 742: 8, 743: 8, 761: 8, 764: 8, 765: 8, 800: 8, 810: 2, 812: 8, 814: 8, 818: 8, 822: 8, 824: 8, 829: 2, 830: 7, 835: 8, 836: 8, 865: 8, 869: 7, 870: 7, 871: 2, 877: 8, 881: 8, 882: 8, 885: 8, 889: 8, 891: 8, 896: 8, 898: 8, 900: 6, 902: 6, 905: 8, 918: 8, 921: 8, 933: 8, 934: 8, 935: 8, 944: 8, 945: 8, 951: 8, 955: 8, 956: 8, 976: 1, 987: 8, 998: 5, 999: 7, 1000: 8, 1001: 8, 1002: 8, 1014: 8, 1017: 8, 1020: 8, 1041: 8, 1042: 8, 1044: 8, 1056: 8, 1059: 1, 1063: 8, 1076: 8, 1077: 8, 1082: 8, 1084: 8, 1085: 8, 1086: 8, 1114: 8, 1132: 8, 1161: 8, 1162: 8, 1163: 8, 1164: 8, 1165: 8, 1166: 8, 1167: 8, 1172: 8, 1228: 8, 1235: 8, 1237: 8, 1263: 8, 1264: 8, 1279: 8, 1541: 8, 1552: 8, 1553: 8, 1556: 8, 1557: 8, 1568: 8, 1570: 8, 1571: 8, 1572: 8, 1592: 8, 1594: 8, 1595: 8, 1649: 8, 1696: 8, 1745: 8, 1775: 8, 1779: 8, 1786: 8, 1787: 8, 1788: 8, 1789: 8, 1904: 8, 1912: 8, 1990: 8, 1998: 8
+ 36: 8, 37: 8, 170: 8, 180: 8, 186: 4, 401: 8, 426: 6, 452: 8, 464: 8, 466: 8, 467: 8, 544: 4, 550: 8, 552: 4, 562: 6, 565: 8, 608: 8, 610: 8, 643: 7, 658: 8, 705: 8, 728: 8, 740: 5, 742: 8, 743: 8, 761: 8, 764: 8, 765: 8, 800: 8, 810: 2, 812: 8, 814: 8, 818: 8, 822: 8, 824: 8, 829: 2, 830: 7, 835: 8, 836: 8, 865: 8, 869: 7, 870: 7, 871: 2, 877: 8, 881: 8, 882: 8, 885: 8, 889: 8, 891: 8, 896: 8, 898: 8, 900: 6, 902: 6, 905: 8, 918: 8, 921: 8, 933: 8, 934: 8, 935: 8, 944: 8, 945: 8, 951: 8, 955: 8, 956: 8, 976: 1, 987: 8, 998: 5, 999: 7, 1000: 8, 1001: 8, 1002: 8, 1014: 8, 1017: 8, 1020: 8, 1041: 8, 1042: 8, 1044: 8, 1056: 8, 1059: 1, 1063: 8, 1076: 8, 1077: 8, 1082: 8, 1084: 8, 1085: 8, 1086: 8, 1114: 8, 1132: 8, 1161: 8, 1162: 8, 1163: 8, 1164: 8, 1165: 8, 1166: 8, 1167: 8, 1172: 8, 1228: 8, 1235: 8, 1237: 8, 1263: 8, 1264: 8, 1279: 8, 1541: 8, 1552: 8, 1553: 8, 1556: 8, 1557: 8, 1568: 8, 1570: 8, 1571: 8, 1572: 8, 1592: 8, 1594: 8, 1595: 8, 1649: 8, 1696: 8, 1745: 8, 1775: 8, 1779: 8, 1786: 8, 1787: 8, 1788: 8, 1789: 8, 1904: 8, 1912: 8, 1990: 8, 1998: 8, 2015: 8, 2016: 8, 2024: 8
}],
CAR.COROLLA_TSS2: [
# hatch 2019+ and sedan 2020+
diff --git a/selfdrive/controls/lib/model_parser.py b/selfdrive/controls/lib/model_parser.py
index 0b4bb241dbf342..9b28c66bb9da48 100644
--- a/selfdrive/controls/lib/model_parser.py
+++ b/selfdrive/controls/lib/model_parser.py
@@ -44,7 +44,7 @@ def update(self, v_ego, md):
self.lane_width_certainty += 0.05 * (lr_prob - self.lane_width_certainty)
current_lane_width = abs(l_poly[3] - r_poly[3])
self.lane_width_estimate += 0.005 * (current_lane_width - self.lane_width_estimate)
- speed_lane_width = interp(v_ego, [0., 31.], [3., 3.8])
+ speed_lane_width = interp(v_ego, [0., 31.], [2.8, 3.5])
self.lane_width = self.lane_width_certainty * self.lane_width_estimate + \
(1 - self.lane_width_certainty) * speed_lane_width