-
CAN 데이터로 제동 성능 평가하기analysis 2024. 10. 25. 02:32
시작하기 전에
자동차 성능은 꾸준히 향상되어 왔다. 대부분의 일이 그렇듯이 많은 사람들의 노력 덕분이다. 하지만 자동차사 별로 성능 향상의 정도는 같지 않은 것 같다. 행복한 가정은 모두 비슷한 방식으로 행복한데, 불행한 가정은 각자의 방식으로 불행하다고 한 톨스토이의 말을 맘대로 가져다 자동차 성능 개발에 붙이자면 성능 향상을 잘 이룬 회사들은 모두 비슷한 방식으로 개발을 하는데 그렇지 않은 회사들은 각자의 방식으로 개발을 하는 것 같다.
(옆에서 봤더니) 잘 하는 회사들은 아래와 같이 하는 것 같다.
- 주관 평가보다는 객관 평가를 한다. 담당자가 바뀌어도 일관된 성능 평가가 이뤄진다.
- 객관 평가를 위한 성능 지표와 시험 방법이 있다. 그리고 목표 성능 지표를 지속적으로 높인다. 새로운 성능 지표와 시험 방법을 추가한다. 성능 지표들 사이의 우선 순위를 목적에 따라 조정한다.
- 소위 시스템을 갖추고 있고, 시스템을 꾸준히 개선한다. 성능 개선은 그런 관점에서 보면 시스템 개선의 부산물이다. (원래 목적물이겠지만)
객관 평가를 할 때 꼭 필요한 것이 데이터 측정과 데이터 처리이다. 내가 개발에 참여했던 전자 제어 제동 시스템 (EBS. Electronic Brake System)에는 10여 가지 제동 성능 평가 지표들이 있다. 그들 중 직진 제동의 성능 지표들로 Deceleration Uniformity (디셀 유니포머티), Average Yaw Rate (평균 요-레이트), Peak-to-peak Yaw Rate (요-레이트 변동폭) 등이 있다.
CAN 데이터에서 디셀 유니포머티, 평균 요-레이트, 요-레이트 변동폭을 계산하는 방법을 설명한다.
개요
- 이 실습에서는 CAN 데이터에서 각 제동 이벤트의 디셀 유니포머티, 평균 요-레이트, 요-레이트 변동폭을 계산하는 파이썬 스크립트를 작성한다. 순서는 아래와 같다.
- 데이터
- 차량 주행 중 CAN 데이터를 측정하여 blf 파일로 저장한다.
- blf는 수신 메시지를 순서대로 저장하는 포맷이다. 메시지를 보기에 편리하지만, 메시지 안의 신호들을 보기에 불편하다.
- 데이터 전처리
- blf 파일을 mat 파일로 변환하기
- 메시지 기반의 blf 파일을 신호 기반의 mat 파일로 변환한다.
- mat 파일로 변환하면 데이터를 컬럼으로 구분된 신호들과 타임스탬프를 인덱스로 하는 테이블 형태로 만들게 된다. 이렇게 하면 데이터 처리에 편리하다.
- mat 파일을 데이터프레임으로 변환하기
- 나는 파이썬으로 데이터를 처리할 때 pandas라는 모듈을 사용한다. pandas는 데이터프레임 처리에 특화되어 있다. 데이터프레임은 엑셀 표 같은 데이터 구조를 지칭한다.
- mat 파일로 저장된 데이터는 아래 그림에서 보는 것처럼 신호들의 타임스탬프가 서로 다르다. (작은 시간 차이를 무시하고) 타임스탬프를 일치시킨다. 그리고 데이터프레임을 파일로 저장한다. (데이터프레임을 저장하는 파일 포맷이 다양하게 있다. 나는 feather라는 포맷을 사용한다.)
- blf 파일을 mat 파일로 변환하기
- 제동 성능 지표 계산
- 데이터프레임 파일을 읽어 디셀 유니포머티, 평균 요-레이트, 요-레이트 변동폭을 계산하는 파이썬 스크립트를 작성한다.
- 파이썬 스크립트를 실행한다.
데이터
차량 주행 중 CAN 데이터 측정하기
- 이전 블로그에서 소개하였다. TSMaster로 차에서 CAN 트레이스 받기
- 직접 실습을 해보실 분들은 TSMaster로 차량 CAN 트레이스에서 바퀴 속도 보기 에서 사용한 blf 파일을 이용하십시오.
데이터 전처리
blf 파일을 mat 파일로 변환하기
- blf 파일은 TSMaster가 수신하는 CAN 메시지들을 순차적으로 저장한 형태이다.
- dbc 파일 없이 blf 파일만으로는 어떤 신호가 무슨 값인지 알 수 없다.
- 따라서 blf만 읽어서는 신호 처리를 할 수 없다.
- 짝이 맞지 않는 blf 와 dbc 파일은 신호와 값을 잘못 해석하는 오류를 야기한다.
- 위의 불편과 오류 방지를 위해 반복해서 사용할 데이터라면 메시지 기반 구조의 blf 파일을 신호 기반 구조의 mat 혹은 mdf 파일로 변환하여 보관할 것을 권장한다.
- 디셀 유니포머티, 평균 요-레이트, 요-레이트 변동폭을 계산하기 위해서는 아래 신호들이 필요하다.
- 바퀴 속도
- 정차 여부를 확인하기 위해 필요하다.
- WHL_SPD11 메시지의 WHl_SPD_FL, WHL_SPD_FR, WHL_SPD_RL, WHL_SPD_RR 신호들이다.
- 종방향 가속도 (종가속도)
- 디셀 유니포머티 계산에 필요하다.
- ESP12 메시지의 LONG_ACCEL 신호이다.
- 요-레이트
- 평균 요-레이트와 요-레이트 변동폭 계산에 필요하다.
- ESP12 메시지의 YAW_RATE 신호이다.
- 제동 유압
- 제동 여부 확인에 필요하다.
- ESP12 메시지의 CYL_PRES 신호이다.
- 조향각
- 직진 제동 여부를 판정하는데 필요하다.
- SAS11 메시지의 SAS_Angle 신호이다.
- 횡방향 가속도 (횡가속도)
- 직진 제동 여부를 판정하는데 참조한다.
- ESP12 메시지의 LAT_ACCEL 신호이다.
- 바퀴 속도
- TSMaster의 Log Converter 기능을 이용하여 blf를 mat으로 변환한다.
- 메인 메뉴/ Analysis/ Log Converter 버튼을 클릭하여 TS Log Converter 창을 연다.
- Source File에 변환할 blf 경로를 입력한다.
- Destination File에서 MAT 버튼을 선택한다.
- 신호를 선택할 수 있는 옵션 메뉴창이 열린다. Configure CAN Signals ..를 선택한다.
- (익숙한) 데이터베이스 창이 열린다. 필요한 신호들을 선택한다. Ctrl 키를 누른 상태로 마우스 좌클릭을 하면 여러 신호들을 선택할 수 있다.
- 선택된 신호들이 신호 리스트 창에 표시된다.
- OK 버튼을 클릭하여 변환한다.
- mat 파일이 생성된다.
- 메인 메뉴/ Analysis/ Log Converter 버튼을 클릭하여 TS Log Converter 창을 연다.
mat 파일을 데이터프레임으로 변환하기
mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장한다.
- 아래 두 링크들은 같은 내용이다. 티스토리에는 빨리 열리는 대신 코드를 다운로드 받을 수 없다. Jupyter Notebook은 코드를 느리게 열리지만 코드를 다운로드 받을 수 있다.
- 티스토리: mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기 :: hsl's tsmaster 사용기
- Jupyter Notebook: ebs_perf/ebs_perf_1_mat2feather_blog.ipynb at main · hsl38/ebs_perf (github.com)
제동 성능 지표 계산
제동 성능 지표를 계산한다.
- 아래 링크들은 같은 내용이다. 티스토리에는 빨리 열리는 대신 코드를 다운로드 받을 수 없다. Jupyter Notebook은 코드를 느리게 열리지만 코드를 다운로드 받을 수 있다.
- 티스토리: 제동 성능 지표 계산하기 :: hsl's tsmaster 사용기
- Jupyter Notebook: ebs_perf/ebs_perf_2_decel_uniformity_blog.ipynb at main · hsl38/ebs_perf (github.com)
디셀 유니포머티 계산 방법
- 아래 그림은 제동 중 시간 vs 감가속도 그래프이다.
- 녹색 점선으로 표시한 프로파일은 이상적인 경우의 감가속도이다.
- 빨간색 실선으로 표시한 프로파일은 실제 감가속도이다.
- 디셀 유니포머티는 녹색 점선과 시간축이 사이의 면적 대비 빨간색 실선과 시간축 사이의 면적 비율이다.
- 녹색 점선은 다음과 같이 구한다. 제동 시작점과 빨간색 실선의 접점을 찾는다. 접점에서 빨간색 실선의 다음 접점을 찾는다. 이렇게 다음 접점 찾기를 정차 시점까지 반복한다.
결론
- 측정된 CAN 데이터에서 전자 제어 제동 시스템의 성능 평가 지표를 계산하였다.
- 성능 지표에 기반한 평가는 평가의 객관성과 일관성을 높인다.
- 객관성은 개발 업무 체계 수립의 근간이다.
- 체계적인 개발로 지속적이고 일관적인 성능 향상이 가능하다.
- 체계적인 개발에 데이터 측정과 데이터 처리는 필수이다.
'analysis' 카테고리의 다른 글
제동 성능 지표 계산하기 (4) 2024.10.25 mat 파일을 데이터프레임으로 변환하고 feather 파일로 저장하기 (2) 2024.10.25 CAN 신호들로 실시간 연산하기 - 미니프로그램으로 yaw_rate_ws 계산 (0) 2024.10.25 CAN 트레이스 받기 - 하드웨어 설정 (0) 2024.10.25 CAN 트레이스 보기 - 바퀴 속도 (4) 2024.10.25