2020 Ioniq PHEV Support (#21147)
* use DriverOverride * keep using EMS16 msg which is available on manuals, TCS13 is not * Need to differentiate between hybrid ev and ev * bump opendbc * add to release files * try this * try this * fixup * shouldn't need multiple dbc's * update comments * combine phev into ev_hybrid * clean up * accel_pedal_pos is a percent * bump * bump * update list name * do this in another PR * not 2020+ * explicitly set safety param * full hyundai gas press test coverage * bump * bump * bump * bump * like this convention better * bump * revert some null gas_signal changes for now * revert style change * Add Ioniq PHEV 2020 * Use appropriate signals * can't verify this to be true * defaults * order should really be opposite... * original style * bump panda * bump * update releases * bump panda * Update test route Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>pull/21227/head
parent
594877e4a8
commit
e7df9adfe3
|
@ -155,6 +155,7 @@ Community Maintained Cars and Features
|
|||
| Hyundai | Genesis 2015-16 | SCC + LKAS | Stock | 19mph | 37mph |
|
||||
| Hyundai | Ioniq Electric 2019 | SCC + LKAS | Stock | 0mph | 32mph |
|
||||
| Hyundai | Ioniq Electric 2020 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Ioniq PHEV 2020 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Kona 2020 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Kona EV 2019 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Santa Fe 2019-20 | All | Stock | 0mph | 0mph |
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
Version 0.8.6 (2021-XX-XX)
|
||||
========================
|
||||
* Hyundai Ioniq PHEV 2020 support thanks to YawWashout!
|
||||
|
||||
Version 0.8.5 (2021-06-11)
|
||||
========================
|
||||
|
|
2
panda
2
panda
|
@ -1 +1 @@
|
|||
Subproject commit e99d41e6cf43ecb6bdc69f190532493d270f19aa
|
||||
Subproject commit ad12330d506ca31fe16f99a5b5aca76aab8a1ec9
|
|
@ -82,7 +82,7 @@ class CarController():
|
|||
|
||||
# 20 Hz LFA MFA message
|
||||
if frame % 5 == 0 and self.car_fingerprint in [CAR.SONATA, CAR.PALISADE, CAR.IONIQ, CAR.KIA_NIRO_EV, CAR.KONA_EV,
|
||||
CAR.IONIQ_EV_2020, CAR.KIA_CEED, CAR.KIA_SELTOS, CAR.ELANTRA_2021]:
|
||||
CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.KIA_CEED, CAR.KIA_SELTOS, CAR.ELANTRA_2021]:
|
||||
can_sends.append(create_lfahda_mfc(self.packer, enabled))
|
||||
|
||||
return can_sends
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import copy
|
||||
from cereal import car
|
||||
from selfdrive.car.hyundai.values import DBC, STEER_THRESHOLD, FEATURES, EV_HYBRID
|
||||
from selfdrive.car.hyundai.values import DBC, STEER_THRESHOLD, FEATURES, EV_CAR, HYBRID_CAR
|
||||
from selfdrive.car.interfaces import CarStateBase
|
||||
from opendbc.can.parser import CANParser
|
||||
from selfdrive.config import Conversions as CV
|
||||
|
@ -56,11 +56,14 @@ class CarState(CarStateBase):
|
|||
ret.brake = 0
|
||||
ret.brakePressed = cp.vl["TCS13"]["DriverBraking"] != 0
|
||||
|
||||
if self.CP.carFingerprint in EV_HYBRID:
|
||||
ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 256.
|
||||
if self.CP.carFingerprint in (HYBRID_CAR | EV_CAR):
|
||||
if self.CP.carFingerprint in HYBRID_CAR:
|
||||
ret.gas = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] / 254.
|
||||
else:
|
||||
ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 254.
|
||||
ret.gasPressed = ret.gas > 0
|
||||
else:
|
||||
ret.gas = cp.vl["EMS12"]["PV_AV_CAN"] / 100
|
||||
ret.gas = cp.vl["EMS12"]["PV_AV_CAN"] / 100.
|
||||
ret.gasPressed = bool(cp.vl["EMS16"]["CF_Ems_AclAct"])
|
||||
|
||||
# TODO: refactor gear parsing in function
|
||||
|
@ -228,10 +231,15 @@ class CarState(CarStateBase):
|
|||
]
|
||||
checks += [("LCA11", 50)]
|
||||
|
||||
if CP.carFingerprint in EV_HYBRID:
|
||||
signals += [
|
||||
("Accel_Pedal_Pos", "E_EMS11", 0),
|
||||
]
|
||||
if CP.carFingerprint in (HYBRID_CAR | EV_CAR):
|
||||
if CP.carFingerprint in HYBRID_CAR:
|
||||
signals += [
|
||||
("CR_Vcu_AccPedDep_Pos", "E_EMS11", 0)
|
||||
]
|
||||
else:
|
||||
signals += [
|
||||
("Accel_Pedal_Pos", "E_EMS11", 0)
|
||||
]
|
||||
checks += [
|
||||
("E_EMS11", 50),
|
||||
]
|
||||
|
|
|
@ -17,7 +17,7 @@ def create_lkas11(packer, frame, car_fingerprint, apply_steer, steer_req,
|
|||
values["CF_Lkas_ActToi"] = steer_req
|
||||
values["CF_Lkas_MsgCount"] = frame % 0x10
|
||||
|
||||
if car_fingerprint in [CAR.SONATA, CAR.PALISADE, CAR.KIA_NIRO_EV, CAR.SANTA_FE, CAR.IONIQ_EV_2020, CAR.KIA_SELTOS, CAR.ELANTRA_2021]:
|
||||
if car_fingerprint in [CAR.SONATA, CAR.PALISADE, CAR.KIA_NIRO_EV, CAR.SANTA_FE, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.KIA_SELTOS, CAR.ELANTRA_2021]:
|
||||
values["CF_Lkas_LdwsActivemode"] = int(left_lane) + (int(right_lane) << 1)
|
||||
values["CF_Lkas_LdwsOpt_USM"] = 2
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
from cereal import car
|
||||
from selfdrive.config import Conversions as CV
|
||||
from selfdrive.car.hyundai.values import CAR
|
||||
from selfdrive.car.hyundai.values import CAR, EV_CAR, HYBRID_CAR
|
||||
from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint
|
||||
from selfdrive.car.interfaces import CarInterfaceBase
|
||||
|
||||
|
@ -108,7 +108,7 @@ class CarInterface(CarInterfaceBase):
|
|||
tire_stiffness_factor = 0.385
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
elif candidate in [CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.IONIQ_EV_2020]:
|
||||
elif candidate in [CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV]:
|
||||
ret.lateralTuning.pid.kf = 0.00006
|
||||
ret.mass = 1490. + STD_CARGO_KG # weight per hyundai site https://www.hyundaiusa.com/ioniq-electric/specifications.aspx
|
||||
ret.wheelbase = 2.7
|
||||
|
@ -116,7 +116,7 @@ class CarInterface(CarInterfaceBase):
|
|||
tire_stiffness_factor = 0.385
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
if candidate != CAR.IONIQ_EV_2020:
|
||||
if candidate not in [CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV]:
|
||||
ret.minSteerSpeed = 32 * CV.MPH_TO_MS
|
||||
elif candidate == CAR.VELOSTER:
|
||||
ret.lateralTuning.pid.kf = 0.00005
|
||||
|
@ -220,11 +220,17 @@ class CarInterface(CarInterfaceBase):
|
|||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.16], [0.01]]
|
||||
|
||||
# these cars require a special panda safety mode due to missing counters and checksums in the messages
|
||||
if candidate in [CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO,
|
||||
if candidate in [CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO,
|
||||
CAR.SONATA_LF, CAR.KIA_NIRO_EV, CAR.KIA_OPTIMA, CAR.VELOSTER, CAR.KIA_STINGER, CAR.KIA_SELTOS,
|
||||
CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.KIA_CEED, CAR.ELANTRA]:
|
||||
ret.safetyModel = car.CarParams.SafetyModel.hyundaiLegacy
|
||||
|
||||
# set appropriate safety param for gas signal
|
||||
if candidate in HYBRID_CAR:
|
||||
ret.safetyParam = 2
|
||||
elif candidate in EV_CAR:
|
||||
ret.safetyParam = 1
|
||||
|
||||
ret.centerToFront = ret.wheelbase * 0.4
|
||||
|
||||
# TODO: get actual value, for now starting with reasonable value for
|
||||
|
|
|
@ -27,6 +27,7 @@ class CAR:
|
|||
IONIQ = "HYUNDAI IONIQ HYBRID 2017-2019"
|
||||
IONIQ_EV_LTD = "HYUNDAI IONIQ ELECTRIC LIMITED 2019"
|
||||
IONIQ_EV_2020 = "HYUNDAI IONIQ ELECTRIC 2020"
|
||||
IONIQ_PHEV = "HYUNDAI IONIQ PHEV 2020"
|
||||
KONA = "HYUNDAI KONA 2020"
|
||||
KONA_EV = "HYUNDAI KONA ELECTRIC 2019"
|
||||
SANTA_FE = "HYUNDAI SANTA FE 2019"
|
||||
|
@ -153,6 +154,23 @@ FINGERPRINTS = {
|
|||
|
||||
|
||||
FW_VERSIONS = {
|
||||
CAR.IONIQ_PHEV: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\000AEhe SCC FHCUP 1.00 1.02 99110-G2100 ',
|
||||
],
|
||||
(Ecu.eps, 0x7d4, None): [
|
||||
b'\xf1\000AE MDPS C 1.00 1.01 56310/G2510 4APHC101',
|
||||
],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\000AEP MFC AT USA LHD 1.00 1.01 95740-G2600 190819',
|
||||
],
|
||||
(Ecu.engine, 0x7e0, None): [
|
||||
b'\xf1\x816H6F6051\000\000\000\000\000\000\000\000',
|
||||
],
|
||||
(Ecu.transmission, 0x7e1, None): [
|
||||
b'\xf1\x816U3J9051\000\000\xf1\0006U3H1_C2\000\0006U3J9051\000\000PAE0G16NL0\x82zT\xd2',
|
||||
],
|
||||
},
|
||||
CAR.IONIQ_EV_2020: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00AEev SCC F-CUP 1.00 1.01 99110-G7000 ',
|
||||
|
@ -616,13 +634,14 @@ FEATURES = {
|
|||
# which message has the gear
|
||||
"use_cluster_gears": set([CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KONA]),
|
||||
"use_tcu_gears": set([CAR.KIA_OPTIMA, CAR.SONATA_LF, CAR.VELOSTER]),
|
||||
"use_elect_gears": set([CAR.KIA_NIRO_EV, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020]),
|
||||
"use_elect_gears": set([CAR.KIA_NIRO_EV, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV]),
|
||||
|
||||
# these cars use the FCA11 message for the AEB and FCW signals, all others use SCC12
|
||||
"use_fca": set([CAR.SONATA, CAR.ELANTRA, CAR.ELANTRA_2021, CAR.ELANTRA_GT_I30, CAR.KIA_STINGER, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.KONA_EV, CAR.KIA_FORTE, CAR.KIA_NIRO_EV, CAR.PALISADE, CAR.GENESIS_G70, CAR.KONA, CAR.SANTA_FE, CAR.KIA_SELTOS]),
|
||||
"use_fca": set([CAR.SONATA, CAR.ELANTRA, CAR.ELANTRA_2021, CAR.ELANTRA_GT_I30, CAR.KIA_STINGER, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.KONA_EV, CAR.KIA_FORTE, CAR.KIA_NIRO_EV, CAR.PALISADE, CAR.GENESIS_G70, CAR.KONA, CAR.SANTA_FE, CAR.KIA_SELTOS]),
|
||||
}
|
||||
|
||||
EV_HYBRID = set([CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_NIRO_EV])
|
||||
HYBRID_CAR = set([CAR.IONIQ_PHEV]) # these cars use a different gas signal
|
||||
EV_CAR = set([CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_NIRO_EV])
|
||||
|
||||
DBC = {
|
||||
CAR.ELANTRA: dbc_dict('hyundai_kia_generic', None),
|
||||
|
@ -632,6 +651,7 @@ DBC = {
|
|||
CAR.GENESIS_G80: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.GENESIS_G90: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.HYUNDAI_GENESIS: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.IONIQ_PHEV: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.IONIQ_EV_2020: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.IONIQ_EV_LTD: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.IONIQ: dbc_dict('hyundai_kia_generic', None),
|
||||
|
|
|
@ -73,6 +73,7 @@ routes = [
|
|||
TestRoute("b2a38c712dcf90bd|2020-05-18--18-12-48", HYUNDAI.SONATA_LF),
|
||||
TestRoute("5875672fc1d4bf57|2020-07-23--21-33-28", HYUNDAI.KIA_SORENTO),
|
||||
TestRoute("9c917ba0d42ffe78|2020-04-17--12-43-19", HYUNDAI.PALISADE),
|
||||
TestRoute("fa8db5869167f821|2021-06-10--22-50-10", HYUNDAI.IONIQ_PHEV),
|
||||
TestRoute("2c5cf2dd6102e5da|2020-12-17--16-06-44", HYUNDAI.IONIQ_EV_2020),
|
||||
TestRoute("610ebb9faaad6b43|2020-06-13--15-28-36", HYUNDAI.IONIQ_EV_LTD),
|
||||
TestRoute("2c5cf2dd6102e5da|2020-06-26--16-00-08", HYUNDAI.IONIQ),
|
||||
|
|
Loading…
Reference in New Issue