mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-01 03:43:46 +08:00
ioniq tests
This commit is contained in:
Binary file not shown.
@@ -19,6 +19,7 @@ MAX_ANGLE = 85
|
||||
MAX_ANGLE_FRAMES = 89
|
||||
MAX_ANGLE_CONSECUTIVE_FRAMES = 2
|
||||
CANFD_BLINDSPOT_STATUS_STALE_NS = 200_000_000
|
||||
IONIQ_6_LANE_CHANGE_UI_MIN_SPEED = 20 * CV.MPH_TO_MS
|
||||
|
||||
|
||||
def process_hud_alert(enabled, fingerprint, hud_control):
|
||||
@@ -223,6 +224,9 @@ class CarController(CarControllerBase):
|
||||
if self.frame % 5 == 0 and (not lka_steering or lka_steering_long):
|
||||
can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled))
|
||||
|
||||
if self.CP.carFingerprint == CAR.HYUNDAI_IONIQ_6 and self.long_active_ecu and CC.enabled and CS.out.vEgo >= IONIQ_6_LANE_CHANGE_UI_MIN_SPEED:
|
||||
can_sends.append(hyundaicanfd.create_ioniq_6_lane_change_status(self.CAN, self.frame, CC.leftBlinker, CC.rightBlinker))
|
||||
|
||||
# blinkers
|
||||
if lka_steering and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS:
|
||||
can_sends.extend(hyundaicanfd.create_spas_messages(self.packer, self.CAN, CC.leftBlinker, CC.rightBlinker))
|
||||
|
||||
@@ -307,8 +307,12 @@ class CarState(CarStateBase):
|
||||
cp.vl["BLINDSPOTS_FRONT_CORNER_2"]["SIDE_DETECT_STATE"])
|
||||
if self.CP.enableBsm:
|
||||
if self.CP.carFingerprint == CAR.HYUNDAI_IONIQ_6:
|
||||
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["LEFT_MB"] != 0 or self.left_blindspot_from_radar
|
||||
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["MORE_LEFT_PROB"] != 0 or self.right_blindspot_from_radar
|
||||
ret.leftBlindspot = (cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0 or
|
||||
cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR_ALT"] != 0 or
|
||||
self.left_blindspot_from_radar)
|
||||
ret.rightBlindspot = (cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0 or
|
||||
cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR_ALT"] != 0 or
|
||||
self.right_blindspot_from_radar)
|
||||
else:
|
||||
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0
|
||||
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import copy
|
||||
import numpy as np
|
||||
from opendbc.car import CanBusBase
|
||||
from opendbc.car import CanBusBase, CanData
|
||||
from opendbc.car.crc import CRC16_XMODEM
|
||||
from opendbc.car.hyundai.values import HyundaiFlags
|
||||
|
||||
@@ -196,12 +196,38 @@ def create_lfahda_cluster(packer, CAN, enabled):
|
||||
return packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)
|
||||
|
||||
|
||||
IONIQ_6_LANE_CHANGE_UI_ADDR = 0x120
|
||||
IONIQ_6_LANE_CHANGE_UI_TEMPLATE = bytearray.fromhex("0000000000000005ffd9671f46454645d90200000000000000000a0000002040")
|
||||
IONIQ_6_LANE_CHANGE_UI_BASE = (0x45, 0xD9)
|
||||
IONIQ_6_LANE_CHANGE_UI_RIGHT = (0x45, 0xDA)
|
||||
IONIQ_6_LANE_CHANGE_UI_LEFT = (0x46, 0xDD)
|
||||
|
||||
|
||||
def create_ioniq_6_lane_change_status(CAN, counter: int, left_blinker: bool, right_blinker: bool):
|
||||
dat = bytearray(IONIQ_6_LANE_CHANGE_UI_TEMPLATE)
|
||||
dat[2] = counter & 0xFF
|
||||
|
||||
state = IONIQ_6_LANE_CHANGE_UI_BASE
|
||||
if left_blinker:
|
||||
state = IONIQ_6_LANE_CHANGE_UI_LEFT
|
||||
elif right_blinker:
|
||||
state = IONIQ_6_LANE_CHANGE_UI_RIGHT
|
||||
|
||||
dat[15], dat[16] = state
|
||||
dat[0:2] = hkg_can_fd_checksum(IONIQ_6_LANE_CHANGE_UI_ADDR, None, dat).to_bytes(2, "little")
|
||||
return CanData(IONIQ_6_LANE_CHANGE_UI_ADDR, bytes(dat), CAN.ECAN)
|
||||
|
||||
|
||||
def create_blindspot_status_messages(packer, CAN, rear_values, front_corner_values, left_blindspot=False, right_blindspot=False):
|
||||
# Reuse the last known-good payload but regenerate the rolling counter/checksum.
|
||||
rear = {k: v for k, v in rear_values.items() if k not in ("CHECKSUM", "COUNTER")}
|
||||
front = {k: v for k, v in front_corner_values.items() if k not in ("CHECKSUM", "COUNTER")}
|
||||
rear["LEFT_MB"] = int(left_blindspot)
|
||||
rear["MORE_LEFT_PROB"] = int(right_blindspot)
|
||||
rear["FL_INDICATOR"] = int(left_blindspot)
|
||||
rear["FR_INDICATOR"] = int(right_blindspot)
|
||||
rear["FL_INDICATOR_ALT"] = int(left_blindspot)
|
||||
rear["FR_INDICATOR_ALT"] = int(right_blindspot)
|
||||
if "NEW_SIGNAL_3" not in front:
|
||||
front["NEW_SIGNAL_3"] = 1
|
||||
|
||||
|
||||
@@ -277,8 +277,37 @@ class TestHyundaiFingerprint:
|
||||
assert parser.vl["BLINDSPOTS_FRONT_CORNER_1"]["COUNTER"] == 0
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["LEFT_MB"] == 1
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["MORE_LEFT_PROB"] == 0
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] == 1
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] == 0
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR_ALT"] == 1
|
||||
assert parser.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR_ALT"] == 0
|
||||
assert parser.vl["BLINDSPOTS_FRONT_CORNER_1"]["NEW_SIGNAL_3"] == 1
|
||||
|
||||
def test_ioniq_6_lane_change_ui_helper_regenerates_checksum_and_state(self):
|
||||
CP = CarParams.new_message()
|
||||
CP.carFingerprint = CAR.HYUNDAI_IONIQ_6
|
||||
CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.CANFD_LKA_STEERING)
|
||||
|
||||
can_bus = CanBus(CP)
|
||||
|
||||
base_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x12, left_blinker=False, right_blinker=False)
|
||||
right_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x34, left_blinker=False, right_blinker=True)
|
||||
left_msg = hyundaicanfd.create_ioniq_6_lane_change_status(can_bus, 0x56, left_blinker=True, right_blinker=False)
|
||||
|
||||
assert base_msg[0] == 0x120
|
||||
assert base_msg[2] == can_bus.ECAN
|
||||
assert base_msg[1][2] == 0x12
|
||||
assert right_msg[1][2] == 0x34
|
||||
assert left_msg[1][2] == 0x56
|
||||
|
||||
assert hyundaicanfd.hkg_can_fd_checksum(base_msg[0], None, bytearray(base_msg[1])) == int.from_bytes(base_msg[1][:2], "little")
|
||||
assert hyundaicanfd.hkg_can_fd_checksum(right_msg[0], None, bytearray(right_msg[1])) == int.from_bytes(right_msg[1][:2], "little")
|
||||
assert hyundaicanfd.hkg_can_fd_checksum(left_msg[0], None, bytearray(left_msg[1])) == int.from_bytes(left_msg[1][:2], "little")
|
||||
|
||||
assert (base_msg[1][15], base_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_BASE
|
||||
assert (right_msg[1][15], right_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_RIGHT
|
||||
assert (left_msg[1][15], left_msg[1][16]) == hyundaicanfd.IONIQ_6_LANE_CHANGE_UI_LEFT
|
||||
|
||||
def test_ioniq_6_blindspot_radar_state_decode(self):
|
||||
assert decode_ioniq_6_blindspot_radar_state(0x02) == (False, False)
|
||||
assert decode_ioniq_6_blindspot_radar_state(0x0A) == (False, True)
|
||||
|
||||
@@ -289,6 +289,7 @@ static safety_config hyundai_canfd_init(uint16_t param) {
|
||||
HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(1)
|
||||
HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(1, true)
|
||||
HYUNDAI_CANFD_BLINDSPOT_DASH_TX_MSGS(1)
|
||||
{0x120, 1, 32, .check_relay = false}, // IONIQ_6 lane change UI
|
||||
{0x51, 0, 32, .check_relay = false}, // ADRV_0x51
|
||||
{0x730, 1, 8, .check_relay = false}, // tester present for ADAS ECU disable
|
||||
{0x160, 1, 16, .check_relay = false}, // ADRV_0x160
|
||||
|
||||
@@ -450,7 +450,7 @@ class TestHyundaiCanfdLKASteeringAltEV(TestHyundaiCanfdBase):
|
||||
|
||||
class TestHyundaiCanfdLKASteeringLongEV(HyundaiLongitudinalBase, TestHyundaiCanfdLKASteeringEV):
|
||||
|
||||
TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0], [0x51, 0], [0x730, 1], [0x12a, 1], [0x160, 1],
|
||||
TX_MSGS = [[0x50, 0], [0x120, 1], [0x1CF, 1], [0x2A4, 0], [0x51, 0], [0x730, 1], [0x12a, 1], [0x160, 1],
|
||||
[0x1ba, 1], [0x1e0, 1], [0x1e5, 1], [0x1a0, 1], [0x1ea, 1], [0x200, 1], [0x345, 1], [0x1da, 1]]
|
||||
|
||||
RELAY_MALFUNCTION_ADDRS = {0: (0x50, 0x2a4), 1: (0x1a0,)} # LKAS, CAM_0x2A4, SCC_CONTROL
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
extern const uint8_t gitversion[19];
|
||||
const uint8_t gitversion[19] = "DEV-9f1a9298-DEBUG";
|
||||
const uint8_t gitversion[19] = "DEV-962e0d74-DEBUG";
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
DEV-9f1a9298-DEBUG
|
||||
DEV-962e0d74-DEBUG
|
||||
@@ -204,7 +204,7 @@ GENESIS_G90_UNWIND_FRICTION_REDUCTION_RIGHT = 0.16
|
||||
IONIQ_6_LATERAL_TESTING_GROUND_ID = testing_ground.id_5
|
||||
IONIQ_6_LATERAL_TESTING_GROUND_VARIANT = "C"
|
||||
IONIQ_6_FF_GAIN_LEFT = 0.050
|
||||
IONIQ_6_FF_GAIN_RIGHT = 0.004
|
||||
IONIQ_6_FF_GAIN_RIGHT = 0.000
|
||||
IONIQ_6_FF_ONSET = 0.10
|
||||
IONIQ_6_FF_ONSET_WIDTH = 0.04
|
||||
IONIQ_6_FF_CUTOFF = 0.52
|
||||
@@ -212,22 +212,22 @@ IONIQ_6_FF_CUTOFF_WIDTH = 0.12
|
||||
IONIQ_6_TRANSITION_SPEED = 10.0
|
||||
IONIQ_6_PHASE_SCALE = 0.10
|
||||
IONIQ_6_TURN_IN_BOOST_LEFT = 0.52
|
||||
IONIQ_6_TURN_IN_BOOST_RIGHT = 0.40
|
||||
IONIQ_6_TURN_IN_BOOST_RIGHT = 0.36
|
||||
IONIQ_6_UNWIND_TAPER_LEFT = 0.60
|
||||
IONIQ_6_UNWIND_TAPER_RIGHT = 1.18
|
||||
IONIQ_6_UNWIND_TAPER_RIGHT = 1.24
|
||||
IONIQ_6_FRICTION_MULT = 0.995
|
||||
IONIQ_6_FRICTION_LAT_RISE = 0.20
|
||||
IONIQ_6_FRICTION_JERK_RISE = 0.24
|
||||
IONIQ_6_TURN_IN_THRESHOLD_REDUCTION_LEFT = 0.12
|
||||
IONIQ_6_TURN_IN_THRESHOLD_REDUCTION_RIGHT = 0.10
|
||||
IONIQ_6_UNWIND_THRESHOLD_INCREASE_LEFT = 0.42
|
||||
IONIQ_6_UNWIND_THRESHOLD_INCREASE_RIGHT = 1.02
|
||||
IONIQ_6_UNWIND_THRESHOLD_INCREASE_RIGHT = 1.08
|
||||
IONIQ_6_TURN_IN_FRICTION_BOOST_LEFT = 0.05
|
||||
IONIQ_6_TURN_IN_FRICTION_BOOST_RIGHT = 0.04
|
||||
IONIQ_6_UNWIND_FRICTION_REDUCTION_LEFT = 0.36
|
||||
IONIQ_6_UNWIND_FRICTION_REDUCTION_RIGHT = 0.82
|
||||
IONIQ_6_CENTER_TAPER_MAX = 0.015
|
||||
IONIQ_6_CENTER_TAPER_LAT = 0.06
|
||||
IONIQ_6_UNWIND_FRICTION_REDUCTION_RIGHT = 0.88
|
||||
IONIQ_6_CENTER_TAPER_MAX = 0.018
|
||||
IONIQ_6_CENTER_TAPER_LAT = 0.07
|
||||
IONIQ_6_CENTER_TAPER_LAT_WIDTH = 0.02
|
||||
IONIQ_6_CENTER_TAPER_SPEED = 18.0
|
||||
IONIQ_6_CENTER_TAPER_SPEED_WIDTH = 2.5
|
||||
|
||||
Reference in New Issue
Block a user