Files
sunnypilot-byd/tools/car_porting/examples/hkg_canfd_gear_message.ipynb
T
github-actions[bot] de77c89cf6 sunnypilot v2026.002.000
version: sunnypilot v2026.002.000 (staging)
date: 2026-07-21T07:44:02
master commit: 2c334ede443d7391d27575af8c854a095ba702a8
2026-07-21 07:44:02 +00:00

11 KiB

In [62]:
from opendbc.car import structs
from opendbc.car.hyundai.values import CAR, HyundaiFlags
from opendbc.car.hyundai.fingerprints import FW_VERSIONS

TEST_PLATFORMS = set(CAR.with_flags(HyundaiFlags.CANFD)) & set(CAR.with_flags(HyundaiFlags.EV))  # CAN-FD electric vehicles only
#TEST_PLATFORMS = set(CAR.with_flags(HyundaiFlags.CANFD)) - set(CAR.with_flags(HyundaiFlags.EV))  # CAN-FD hybrid and ICE vehicles only

print(f"Found {len(TEST_PLATFORMS)} qualifying vehicles:")
for platform in TEST_PLATFORMS:
  print(f"  {platform}")
Found 6 qualifying vehicles:
  KIA_EV6
  HYUNDAI_KONA_EV_2ND_GEN
  HYUNDAI_IONIQ_5
  KIA_NIRO_EV_2ND_GEN
  HYUNDAI_IONIQ_6
  GENESIS_GV60_EV_1ST_GEN
In [63]:
import random

from openpilot.tools.lib.logreader import LogReader
from openpilot.tools.lib.comma_car_segments import get_comma_car_segments_database
from opendbc.car.hyundai.values import CAR

database = get_comma_car_segments_database()
TEST_SEGMENTS = []

MAX_SEGS_PER_PLATFORM = 5  # TODO: Increase this to search more segments

print("Collecting segments from commaCarSegments dataset:")
for platform in TEST_PLATFORMS:
  assert(platform in database)
  #if platform not in database:
  #  print(f"Skipping platform: {platform}, no data available")
  #  continue

  all_segments = database[platform]

  NUM_SEGMENTS = min(len(all_segments), MAX_SEGS_PER_PLATFORM)

  print(f"Got {len(all_segments)} segments for platform {platform}, sampling {NUM_SEGMENTS} segments")

  TEST_SEGMENTS.extend(random.sample(all_segments, NUM_SEGMENTS))

print(f"Collected {len(TEST_SEGMENTS)} segments for analysis")
Collecting segments from commaCarSegments dataset:
Got 1300 segments for platform KIA_EV6, sampling 5 segments
Got 9 segments for platform HYUNDAI_KONA_EV_2ND_GEN, sampling 5 segments
Got 1570 segments for platform HYUNDAI_IONIQ_5, sampling 5 segments
Got 34 segments for platform KIA_NIRO_EV_2ND_GEN, sampling 5 segments
Got 974 segments for platform HYUNDAI_IONIQ_6, sampling 5 segments
Got 157 segments for platform GENESIS_GV60_EV_1ST_GEN, sampling 5 segments
Collected 30 segments for analysis
In [64]:
import copy
import matplotlib.pyplot as plt
import numpy as np

from opendbc.can.parser import CANParser
from opendbc.car.hyundai.values import DBC
from opendbc.car.hyundai.hyundaicanfd import CanBus

from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.tools.lib.logreader import LogReader, comma_car_segments_source

message_names = ["GEAR_SHIFTER", "ACCELERATOR", "GEAR", "GEAR_ALT", "GEAR_ALT_2"]

for segment in TEST_SEGMENTS:
  lr = LogReader(segment, sources=[comma_car_segments_source])
  CP = lr.first("carParams")
  if CP is None:
    continue

  can_msgs = [msg for msg in lr if msg.which() == "can"]
  parser_messages = []
  for name in message_names:
    parser_messages.append((name, 0))
  cp = CANParser(DBC[platform]["pt"], parser_messages, CanBus(CP).ECAN)

  parsed_message_history = []
  examples = []

  for msg in can_msgs:
    cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))
    parsed_message_history.append(copy.copy(cp.vl))

  print(f"Analyzing segment {segment:<44} for {CP.carFingerprint}")
  for name in message_names:
    if parsed_message_history[0][name]["CHECKSUM"] != 0:  # Message is present for this segment
      gear_prev = parsed_message_history[0][name]["GEAR"]
      print(f"  {name:<15} gear={gear_prev}")
      for i, parsed_messages in enumerate(parsed_message_history):
        gear = parsed_messages[name]["GEAR"]
        if gear != gear_prev:
          print(f"  *** Signal transition found! ***")
          examples.append(i)
        gear_prev = gear

print(f"Analysis finished")
Analyzing segment ff2bd20623fcaeaa/2023-11-26--16-27-04/5/s    for KIA EV6 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 3f1a6480f940cf9a/2024-01-10--23-06-11/16/s   for KIA EV6 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment b0a9998109ed0053/2023-12-15--11-10-18/12/s   for KIA EV6 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 6e14aa2ed85025df/2023-11-15--13-18-12/24/s   for KIA EV6 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment a43f21df3a1ca12d/2024-01-25--08-56-22/16/s   for KIA EV6 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 1618132d68afc876/2023-12-05--13-49-24/11/s   for HYUNDAI KONA ELECTRIC 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 1618132d68afc876/2023-11-26--12-31-18/17/s   for HYUNDAI KONA ELECTRIC 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 1618132d68afc876/2023-12-05--11-51-44/3/s    for HYUNDAI KONA ELECTRIC 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 1618132d68afc876/2023-08-27--09-32-14/13/s   for HYUNDAI KONA 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 1618132d68afc876/2024-01-25--15-07-04/24/s   for HYUNDAI KONA ELECTRIC 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 223780ed74116bc2/2023-11-16--09-44-56/15/s   for HYUNDAI IONIQ 5 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment ba9951252624f37d/2024-01-20--22-33-23/118/s  for HYUNDAI IONIQ 5 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 8379b28e51ceb3b1/2023-11-09--23-21-58/92/s   for HYUNDAI IONIQ 5 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 26fac43e27cd6091/2023-11-06--12-23-21/9/s    for HYUNDAI IONIQ 5 2022
  GEAR_SHIFTER    gear=1.0
  ACCELERATOR     gear=0.0
Analyzing segment 5edb897a0ec7a477/2024-01-13--20-41-36/101/s  for HYUNDAI IONIQ 5 2022
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 66cf8ea23b7c2789/2023-12-04--13-48-53/5/s    for KIA NIRO EV 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment b153671049a867b3/2023-12-10--20-31-37/2/s    for KIA NIRO EV 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment b153671049a867b3/2023-12-03--21-08-30/14/s   for KIA NIRO EV 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment b153671049a867b3/2023-11-07--19-52-23/0/s    for KIA NIRO EV 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment b153671049a867b3/2023-07-12--19-25-18/6/s    for KIA NIRO EV 2ND GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 9ea4578ee2b1abcb/2023-11-18--07-59-26/11/s   for HYUNDAI IONIQ 6 2023
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 0ad7facc77922c3e/2023-12-21--17-47-25/18/s   for HYUNDAI IONIQ 6 2023
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 26968f888e7330d3/2024-01-02--11-18-37/8/s    for HYUNDAI IONIQ 6 2023
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 9ea4578ee2b1abcb/2023-11-27--21-03-24/33/s   for HYUNDAI IONIQ 6 2023
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment df7fdd56970d90fe/2024-01-07--01-04-39/26/s   for HYUNDAI IONIQ 6 2023
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 94542b2d06f7a9a6/2023-12-11--14-45-44/0/s    for GENESIS GV60 ELECTRIC 1ST GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 94542b2d06f7a9a6/2023-12-11--20-57-09/8/s    for GENESIS GV60 ELECTRIC 1ST GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 94542b2d06f7a9a6/2024-01-03--12-52-38/5/s    for GENESIS GV60 ELECTRIC 1ST GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 94542b2d06f7a9a6/2024-01-19--19-57-52/47/s   for GENESIS GV60 ELECTRIC 1ST GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analyzing segment 94542b2d06f7a9a6/2024-01-03--13-01-23/1/s    for GENESIS GV60 ELECTRIC 1ST GEN
  GEAR_SHIFTER    gear=4.0
  ACCELERATOR     gear=5.0
Analysis finished
In [ ]:
In [ ]: