From c1e2a1e9be5c9620fbb29cb1418472f256c4a2c2 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Wed, 3 Jul 2019 12:25:35 -0700 Subject: [PATCH 1/4] Make build deterministic and do not rebuild on release2 (#729) * sort dbc files to make linking deterministic * touch all files on release2 checkout to prevent rebuild --- launch_chffrplus.sh | 13 ++++++++++--- selfdrive/can/Makefile | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh index 4aa9d402b..287c72a78 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/selfdrive/can/Makefile b/selfdrive/can/Makefile index e53a0730d..a9ee1e686 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) From 28419d09da52260f7d7fc5d6713d143f8b467844 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Wed, 3 Jul 2019 15:53:49 -0700 Subject: [PATCH 2/4] Fix run_docker_tests.sh (#730) --- .travis.yml | 18 +----------------- run_docker_tests.sh | 18 +++++++++--------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/.travis.yml b/.travis.yml index 52a420442..8683d8bee 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/run_docker_tests.sh b/run_docker_tests.sh index dc629e613..10d1bbc83 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' From affbdfafcd0a7ea1b4f9d39a01aa9301c23efc5d Mon Sep 17 00:00:00 2001 From: dekerr Date: Mon, 8 Jul 2019 19:59:32 -0400 Subject: [PATCH 3/4] Refactor default Civic params (#720) * move civic params out * fix variable name * simplify ford scaling * cleanup * remove import dependency * requested changes * keep hyundai --- selfdrive/car/__init__.py | 28 ++++++++++++++++++++++++ selfdrive/car/chrysler/interface.py | 23 +++---------------- selfdrive/car/ford/interface.py | 31 +++++--------------------- selfdrive/car/gm/interface.py | 25 +++++---------------- selfdrive/car/honda/interface.py | 30 ++++++------------------- selfdrive/car/hyundai/interface.py | 27 +++++------------------ selfdrive/car/subaru/interface.py | 24 +++----------------- selfdrive/car/toyota/interface.py | 34 ++++++++--------------------- 8 files changed, 65 insertions(+), 157 deletions(-) diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py index bb996e588..3b259c622 100644 --- a/selfdrive/car/__init__.py +++ b/selfdrive/car/__init__.py @@ -3,6 +3,34 @@ from common.numpy_fast import clip # 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 6621c7e20..793f73208 100755 --- a/selfdrive/car/chrysler/interface.py +++ b/selfdrive/car/chrysler/interface.py @@ -6,7 +6,7 @@ from selfdrive.controls.lib.drive_helpers import EventTypes as ET, create_event 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 @@ class CarInterface(object): # 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 @@ class CarInterface(object): 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/ford/interface.py b/selfdrive/car/ford/interface.py index 7664d9964..0f3bbc33c 100755 --- a/selfdrive/car/ford/interface.py +++ b/selfdrive/car/ford/interface.py @@ -7,7 +7,7 @@ from selfdrive.controls.lib.drive_helpers import EventTypes as ET, create_event 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 @@ class CarInterface(object): # 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 @@ class CarInterface(object): 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 4a909bc84..c066a6523 100755 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -7,7 +7,7 @@ from selfdrive.controls.lib.vehicle_model import VehicleModel 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 @@ class CarInterface(object): # 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 @@ class CarInterface(object): 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 72c85c862..93aaf0182 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -10,7 +10,7 @@ from selfdrive.controls.lib.drive_helpers import create_event, EventTypes as ET, 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 @@ class CarInterface(object): 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 @@ class CarInterface(object): 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 @@ class CarInterface(object): # 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 bd99eaa5a..67ca2261f 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -6,7 +6,7 @@ from selfdrive.controls.lib.drive_helpers import EventTypes as ET, create_event 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 @@ class CarInterface(object): 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 @@ class CarInterface(object): 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 a609ee909..e9d9c117f 100644 --- a/selfdrive/car/subaru/interface.py +++ b/selfdrive/car/subaru/interface.py @@ -6,7 +6,7 @@ from selfdrive.controls.lib.drive_helpers import create_event, EventTypes as ET 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 @@ class CarInterface(object): 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 @@ class CarInterface(object): # 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/interface.py b/selfdrive/car/toyota/interface.py index 83bf921d9..a1cffae95 100755 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -6,7 +6,7 @@ from selfdrive.controls.lib.drive_helpers import EventTypes as ET, create_event 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 @@ class CarInterface(object): # 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 @@ class CarInterface(object): 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,7 +130,7 @@ class CarInterface(object): ret.safetyParam = 73 ret.wheelbase = 2.78 ret.steerRatio = 16.0 - tire_stiffness_factor = 0.444 # not optimized yet + tire_stiffness_factor = 0.444 # not optimized yet 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 @@ -170,7 +160,7 @@ class CarInterface(object): 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 @@ class CarInterface(object): 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 @@ class CarInterface(object): # 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. From 99a96a99bcd82e890d686fc7f2a20904e865d0fd Mon Sep 17 00:00:00 2001 From: Nick Brown Date: Mon, 8 Jul 2019 20:02:59 -0400 Subject: [PATCH 4/4] 2019 Rav4 Limited AWD (#732) * Fingerprint * Merge Limited and XLE fingerprint because they're the same --- selfdrive/car/toyota/values.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py index f48788842..da8b02dcd 100644 --- a/selfdrive/car/toyota/values.py +++ b/selfdrive/car/toyota/values.py @@ -165,9 +165,9 @@ FINGERPRINTS = { { 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+