Honda e Port (#22108)

* Honda e Port

* Test route for Honda e

* remove

* Update README.md

* update values based on logs

* no need for Honda e specific DBC

* fix tests

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
pull/22168/head
vanillagorillaa 4 years ago committed by GitHub
parent a077b8a566
commit bcb8a11d7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      README.md
  2. 8
      selfdrive/car/honda/carstate.py
  3. 10
      selfdrive/car/honda/interface.py
  4. 30
      selfdrive/car/honda/values.py
  5. 2
      selfdrive/test/test_models.py
  6. 1
      selfdrive/test/test_routes.py

@ -77,6 +77,7 @@ Supported Cars
| Honda | CR-V 2015-16 | Touring | openpilot | 25mph<sup>1</sup> | 12mph | | Honda | CR-V 2015-16 | Touring | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | CR-V 2017-21 | Honda Sensing | Stock | 0mph | 12mph | | Honda | CR-V 2017-21 | Honda Sensing | Stock | 0mph | 12mph |
| Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph | | Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph |
| Honda | e 2020 | All | Stock | 0mph | 3mph |
| Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph | | Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | HR-V 2019-20 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph | | Honda | HR-V 2019-20 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
| Honda | Insight 2019-21 | All | Stock | 0mph | 3mph | | Honda | Insight 2019-21 | All | Stock | 0mph | 3mph |

@ -75,7 +75,7 @@ def get_can_signals(CP, gearbox_msg="GEARBOX"):
("SCM_BUTTONS", 25), ("SCM_BUTTONS", 25),
] ]
if CP.carFingerprint in (CAR.CRV_HYBRID, CAR.CIVIC_BOSCH_DIESEL, CAR.ACURA_RDX_3G): if CP.carFingerprint in (CAR.CRV_HYBRID, CAR.CIVIC_BOSCH_DIESEL, CAR.ACURA_RDX_3G, CAR.HONDA_E):
checks += [ checks += [
(gearbox_msg, 50), (gearbox_msg, 50),
] ]
@ -119,7 +119,7 @@ def get_can_signals(CP, gearbox_msg="GEARBOX"):
else: else:
checks += [("CRUISE_PARAMS", 50)] checks += [("CRUISE_PARAMS", 50)]
if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G): if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E):
signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)] signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)]
elif CP.carFingerprint == CAR.ODYSSEY_CHN: elif CP.carFingerprint == CAR.ODYSSEY_CHN:
signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1)] signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1)]
@ -225,7 +225,7 @@ class CarState(CarStateBase):
# ******************* parse out can ******************* # ******************* parse out can *******************
# TODO: find wheels moving bit in dbc # TODO: find wheels moving bit in dbc
if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G): if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E):
ret.standstill = cp.vl["ENGINE_DATA"]["XMISSION_SPEED"] < 0.1 ret.standstill = cp.vl["ENGINE_DATA"]["XMISSION_SPEED"] < 0.1
ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]["DRIVERS_DOOR_OPEN"]) ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]["DRIVERS_DOOR_OPEN"])
elif self.CP.carFingerprint == CAR.ODYSSEY_CHN: elif self.CP.carFingerprint == CAR.ODYSSEY_CHN:
@ -276,7 +276,7 @@ class CarState(CarStateBase):
self.brake_hold = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"] self.brake_hold = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"]
if self.CP.carFingerprint in (CAR.CIVIC, CAR.ODYSSEY, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, if self.CP.carFingerprint in (CAR.CIVIC, CAR.ODYSSEY, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH,
CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G): CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E):
self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0 self.park_brake = cp.vl["EPB_STATUS"]["EPB_STATE"] != 0
main_on = cp.vl["SCM_FEEDBACK"]["MAIN_ON"] main_on = cp.vl["SCM_FEEDBACK"]["MAIN_ON"]
elif self.CP.carFingerprint == CAR.ODYSSEY_CHN: elif self.CP.carFingerprint == CAR.ODYSSEY_CHN:

@ -289,6 +289,16 @@ class CarInterface(CarInterfaceBase):
tire_stiffness_factor = 0.82 tire_stiffness_factor = 0.82
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]]
elif candidate == CAR.HONDA_E:
stop_and_go = True
ret.mass = 3338.8 * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.5
ret.centerToFront = ret.wheelbase * 0.5
ret.steerRatio = 16.71
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end
tire_stiffness_factor = 0.82
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] # TODO: can probably use some tuning
else: else:
raise ValueError("unsupported car %s" % candidate) raise ValueError("unsupported car %s" % candidate)

@ -75,6 +75,7 @@ class CAR:
PILOT_2019 = "HONDA PILOT 2019" PILOT_2019 = "HONDA PILOT 2019"
RIDGELINE = "HONDA RIDGELINE 2017" RIDGELINE = "HONDA RIDGELINE 2017"
INSIGHT = "HONDA INSIGHT 2019" INSIGHT = "HONDA INSIGHT 2019"
HONDA_E = "HONDA E 2020"
# diag message that in some Nidec cars only appear with 1s freq if VIN query is performed # diag message that in some Nidec cars only appear with 1s freq if VIN query is performed
DIAG_MSGS = {1600: 5, 1601: 8} DIAG_MSGS = {1600: 5, 1601: 8}
@ -1231,6 +1232,32 @@ FW_VERSIONS = {
b'78109-TV9-A510\x00\x00', b'78109-TV9-A510\x00\x00',
], ],
}, },
CAR.HONDA_E:{
(Ecu.eps, 0x18DA30F1, None):[
b'39990-TYF-N030\x00\x00'
],
(Ecu.gateway, 0x18DAEFF1, None):[
b'38897-TYF-E140\x00\x00'
],
(Ecu.shiftByWire, 0x18DA0BF1, None):[
b'54008-TYF-E010\x00\x00'
],
(Ecu.srs, 0x18DA53F1, None):[
b'77959-TYF-G430\x00\x00'
],
(Ecu.combinationMeter, 0x18DA60F1, None):[
b'78108-TYF-G610\x00\x00'
],
(Ecu.fwdRadar, 0x18DAB0F1, None):[
b'36802-TYF-E030\x00\x00'
],
(Ecu.fwdCamera, 0x18DAB5F1, None):[
b'36161-TYF-E020\x00\x00'
],
(Ecu.vsa, 0x18DA28F1, None):[
b'57114-TYF-E030\x00\x00'
],
},
} }
DBC = { DBC = {
@ -1254,6 +1281,7 @@ DBC = {
CAR.PILOT_2019: dbc_dict('honda_pilot_touring_2017_can_generated', 'acura_ilx_2016_nidec'), CAR.PILOT_2019: dbc_dict('honda_pilot_touring_2017_can_generated', 'acura_ilx_2016_nidec'),
CAR.RIDGELINE: dbc_dict('honda_ridgeline_black_edition_2017_can_generated', 'acura_ilx_2016_nidec'), CAR.RIDGELINE: dbc_dict('honda_ridgeline_black_edition_2017_can_generated', 'acura_ilx_2016_nidec'),
CAR.INSIGHT: dbc_dict('honda_insight_ex_2019_can_generated', None), CAR.INSIGHT: dbc_dict('honda_insight_ex_2019_can_generated', None),
CAR.HONDA_E: dbc_dict('acura_rdx_2020_can_generated', None),
} }
STEER_THRESHOLD = { STEER_THRESHOLD = {
@ -1273,5 +1301,5 @@ SPEED_FACTOR = {
} }
HONDA_NIDEC_ALT_PCM_ACCEL = set([CAR.ODYSSEY]) HONDA_NIDEC_ALT_PCM_ACCEL = set([CAR.ODYSSEY])
HONDA_BOSCH = set([CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_5G, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G]) HONDA_BOSCH = set([CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_5G, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E])
HONDA_BOSCH_ALT_BRAKE_SIGNAL = set([CAR.ACCORD, CAR.CRV_5G, CAR.ACURA_RDX_3G]) HONDA_BOSCH_ALT_BRAKE_SIGNAL = set([CAR.ACCORD, CAR.CRV_5G, CAR.ACURA_RDX_3G])

@ -180,7 +180,7 @@ class TestCarModel(unittest.TestCase):
# TODO: honda nidec: do same checks in carState and panda # TODO: honda nidec: do same checks in carState and panda
if "brakePressed" in failed_checks and self.CP.carName == 'honda' and \ if "brakePressed" in failed_checks and self.CP.carName == 'honda' and \
(self.car_model not in HONDA_BOSCH or self.car_model == HONDA.CRV_HYBRID): (self.car_model not in HONDA_BOSCH or self.car_model in [HONDA.CRV_HYBRID, HONDA.HONDA_E]):
if failed_checks['brakePressed'] < 150: if failed_checks['brakePressed'] < 150:
del failed_checks['brakePressed'] del failed_checks['brakePressed']

@ -62,6 +62,7 @@ routes = [
TestRoute("0a78dfbacc8504ef|2020-03-04--13-29-55", HONDA.CIVIC_BOSCH), TestRoute("0a78dfbacc8504ef|2020-03-04--13-29-55", HONDA.CIVIC_BOSCH),
TestRoute("f34a60d68d83b1e5|2020-10-06--14-35-55", HONDA.ACURA_RDX), TestRoute("f34a60d68d83b1e5|2020-10-06--14-35-55", HONDA.ACURA_RDX),
TestRoute("54fd8451b3974762|2021-04-01--14-50-10", HONDA.RIDGELINE), TestRoute("54fd8451b3974762|2021-04-01--14-50-10", HONDA.RIDGELINE),
TestRoute("2d5808fae0b38ac6|2021-09-01--17-14-11", HONDA.HONDA_E),
TestRoute("6fe86b4e410e4c37|2020-07-22--16-27-13", HYUNDAI.HYUNDAI_GENESIS), TestRoute("6fe86b4e410e4c37|2020-07-22--16-27-13", HYUNDAI.HYUNDAI_GENESIS),
TestRoute("70c5bec28ec8e345|2020-08-08--12-22-23", HYUNDAI.GENESIS_G70), TestRoute("70c5bec28ec8e345|2020-08-08--12-22-23", HYUNDAI.GENESIS_G70),

Loading…
Cancel
Save