분류 전체보기
-
blf 파일에서 m_id, dlc, d_ts 추출하기tip 2025. 1. 19. 19:17
목적TSMaster로 받은 차량 통신 데이터 파일 (blf)를 분석하여 메시지 아이디 (m_id), 데이터 길이 (dlc, data length code), 전송 주기(d_ts. ts = timestamp, d_ts는 ts의 차이)를 구하는 미니프로그램을 만든다.그동안 나는 blf 파일을 직접 처리할 줄 몰랐다. 그래서 blf를 TSMaster의 Log Converter 기능을 이용하여 텍스트 형식의 asc 파일로 변환한 후, asc 파일을 읽어 데이터를 처리했다. 변환은 한 번만 하면 되는 일이지만 그래도 불편하다. 이 기회에 blf 파일을 직접 다루는 방법을 배운다. blf 파일 읽기m_id, dlc, d_ts를 구하기 위해서는 blf를 읽기만 하면 된다.blf 파일을 읽을 수 있는 Python 모듈..
-
차량 형상 점검application 2025. 1. 19. 18:14
시작하기 전에 새 차를 개발할 때 시작차(Prototype)를 만든다. 시작차는 기존 차(들)에서 시스템들을 가져다 만든다. (이를 캐리-오버라고 부른다.) 내가 말하는 시스템은 제어기, 센서, 액추에이터로 구성된다. 센서나 액추에이터는 단순 부품일 수도 혹은 그 자체가 하나의 시스템일 수도 있다. (전통적으로 시스템은 차 안에 있었지만 커넥티비티의 발전으로 요즘 시스템은 차 밖에 있을 수도 있다.) 시스템들은 "통신"을 통하여 개별 시스템은 할 수 없는 기능을 구현한다. 소위, 협조 제어 (coordinated control)라고 한다.캐리-오버한 시스템들로 시작차 조립을 한 후 곧바로 모든 시스템 기능들이 정상 동작하는 경우를 나는 겪어보지 못했다. 거기에는 여러 가지 원인들이 있다. 이 들 중에 ..
-
주행 중인 도로의 경사도 구하기 1/t.b.d.application 2025. 1. 15. 17:59
gradient_dynamic주행 중 노면의 경사도를 구한다.# importimport sysfrom pathlib import Pathimport numpy as npimport pandas as pdimport plotly.express as pxfrom PIL import Image # plotly 그래프로 출력하면 노트북 크기가 너무 커서 GitHub에 표시가 안됨. 그래서 이미지로 저장해서 표시하기 위해 사용함함# 블로그에 올리기 위해 plotly renderer의 설정이 필요하다. import plotly.io as piopio.renderers.default = "notebook_connected" # constant# 프로젝트 디렉토리 경로k_dir_project = Path('.')...
-
미니프로그램에서 CAN 신호와 시스템 변수 다루기tip 2025. 1. 10. 01:47
시작하기 전에 미니프로그램을 작성하다보면 CAN 신호와 시스템 변수를 다루게 된다. 아래의 경우들이 있다. 미니프로그램에서 CAN 신호를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 CAN 메시지의 신호로 전송한다.신호를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.메시지는 blf 파일에 저장할 수 있다. (blf 파일을 csv, mat, csv 등으로 변환하여 다른 프로그램에서 읽을 수 있다.)미니프로그램에서 시스템 변수를 읽어서 연산에 사용한다.미니프로그램에서 연산한 결과를 시스템 변수에 저장한다.시스템 변수를 TSMaster의 그래픽, 트레이스, 판넬 창 등에서 사용할 수 있다.시스템 변수를 blf 파일에 저장할 수 있다. (2025-01-10 현재, 시스템 변수..
-
Python 미니프로그램: 코드에서 CAN 메시지의 신호를 읽는 방법tip 2025. 1. 7. 19:49
코딩을 하다보면 메시지의 신호에서 값을 읽어올 경우가 있다. 그 방법을 설명한다. 신호를 포함하는 메시지를 읽을 수 있도록 준비먼저 읽을 신호를 포함하고 있는 메시지를 코드에서 사용할 수 있도록 준비해야 한다. Python Code Editor의 Properties 탭을 클릭한다. 왼쪽 아래쪽에 Database Symbols 영역이 있다. 읽을 메시지가 포함된 dbc 파일을 체크한다. (TSMaster에서 dbc를 읽으면 pdbc로 변환된다.)Symbols 탭을 클릭한다.Global Definition을 선택한다. 여기에 메시지를 읽는데 필요한 코드가 삽입되어야 한다. 코드 어디에서나 사용되어야 해서 Global Definition에서 정의한다.Functions 탭을 클릭한다.읽을 메시지에서 우클릭한다..
-
침입 감지 시스템 (IDS) - 타임스탬프 보완application 2025. 1. 5. 22:12
시작하기 전에 침입 감지 시스템 (IDS: Intrusion Detection System) :: hsl's tsmaster 사용기에서 실제로 감지된 침입 건수가 내 예상보다 많았다. 원인을 찾다가 아래의 생각이 났다. TSMaster의 Rx 이벤트가 발생할 때 ts(timestamp)를 메시지 수신 시각으로 삼았다.하드웨어에서 메시지를 수신한 시각과 이벤트가 발생한 시각 사이에 차이가 있다면? 그리고 그 차이가 일정하지 않다면?하드웨어가 메시지 수신 시각을 메시지 데이터에 추가하지 않았을까? TSMaster의 메시지는 RawCAN 클래스이다. RawCAN 클래스의 정의에서 time_us (timestamp in microseconds) 를 찾았다. 참고로 RawCAN 클래스는 아래 코드와 같다.cl..
-
IDS 오감지/ 민감 감지에 관한 고찰tip 2025. 1. 4. 23:26
IDS 오감지/ 민감 감지에 관한 고찰IDS 미니프로그램이 잘 작동한다.0x300번대 메시지들은 침입이 아닌데도 주기 기반 침입 감지가 발생한다.혹시 0x300번대에 메시지들이 다른 번호대 메시지들 보다 많나? 그래서 전송 지연이 연쇄 작용을 일으키나? 하는 의문이 생겼다. import pandas as pdfrom pathlib import Pathimport pickleimport plotly.express as pximport plotly.graph_objects as go# 메시지별 d_ts 통계값을 저장한 xlsx 파일을 읽는다.xlsx_d_ts_distribution = Path.cwd() / 'd_ts_distribution.xlsx'df = pd.read_excel(xlsx_d_ts_dis..
-
침입 판정 기준값 데이터 준비tip 2025. 1. 4. 18:01
침입 감지를 판정할 d_ts의 기준값을 준비한다.¶침입이 있다면 메시지 전송 간격인 d_ts (= timestamp의 diff라는 의미로 d_ts)가 줄어들게 된다.칩입이 없을 때 d_ts의 최소값을 d_ts_min이라고 하자.침입 판정 기준을 d_ts_intrusion_detection_threshold라고 하자.d_ts가 d_ts_min 보다 작아으면 침입으로 감지로 의심할 수 있다.d_ts_min을 구하는데 사용된 데이터가 충분히 많다고 할 수 없다.내가 사용한 데이터는 3분 30초 길이로 너무 짧다.내가 했던 주행도 매우 평범하여 제어기에 연산 하중이 매우 작았을 것이다. 그래서 전송 주기에 영향이 거의 없었을 것이다.데이터가 충분하지 않아 너무 민감하게 침입을 감지할 가능성이 있다.메시지별 d_..
-
CAN 메시지 전송 주기 분포 분석카테고리 없음 2025. 1. 4. 14:59
메시지 전송 주기 분포 분석m_id 별로 메시지 전송 주기의 분포를 확인한다.import pandas as pdfrom pathlib import Pathimport plotly.express as pximport plotly.graph_objects as go# data 디렉토리에 있는 모든 .asc 파일들dir_data = Path('.').absolute()/'asc_per_id'ascs = list(dir_data.glob('*.asc'))print(f'{len(ascs) = :,}')# for asc in ascs:# print(asc.name)len(ascs) = 59한 asc를 대상으로 방법을 개발한다.def read_asc_to_df(asc): ''' .asc 파일을 읽어..
-
asc 파일을 pandas 데이터프레임으로 변환하기tip 2025. 1. 4. 14:02
asc to dataframe¶메시지 전송 주기를 분석하기 위해 수치 데이터 처리에 편리한 pandas를 사용할 것이다.m_id별로 분리된 asc 파일을 읽어서 pandas 데이터프레임을 만든다.데이터 길이 (dlc: data length code)가 일정하지 않다. 어떻게 처리할까?In [16]:import pandas as pdfrom pathlib import PathIn [17]:# data 디렉토리에 있는 모든 .asc 파일의 이름을 출력한다.dir_data = Path('.').absolute()/'asc_per_id'ascs = list(dir_data.glob('*.asc'))print(f'{len(ascs) = :,}')for asc in ascs: print(asc.name)len..