[OBD Acquisition & Kinematics] 차량 센서 데이터 수집 통신 파이프라인 구축 및 트러블슈팅

2 min read

차량의 동역학 데이터(가속 페달, 브레이크, 차량 속도 등) 수집을 위해 PCAN to OBD 케이블을 활용하여 통신 파이프라인을 구축했다. 초기에는 PEAK사 공식 OBD Viewer와 PCAN-View를 통해 통신 상태를 확인했다. 그러나 기본 제공되는 OBD Viewer는 표준 PID만 조회할 수 있었고, 제어 시스템의 비표준 확장 PID 데이터는 확인할 수 없었다. 따라서 필요한 센서 데이터 PID를 찾기 위해 브루트포스 스캔 환경을 구성했다.

[통신 파이프라인] 확장 PID 브루트포스 스캔의 한계

특정 조작(예: 브레이크 페달 조작) 전후 데이터를 비교하여 목적 PID를 찾기 위해 스크립트 기반 자동화가 필요했다. PEAK사 PCAN-View는 수동 조작 도구이므로 브루트포스 스캔과 수신 응답 로깅에 적합하지 않았다.

  • python-can 패키지를 사용하여 유효한 확장 PID를 탐색하는 자동화 스크립트를 작성했다.
  • 스크립트를 차량에 연결해 테스트한 결과, 차량에서 수신되는 응답 데이터가 반복적으로 손상되었다.
  • 물리적 연결이 유지된 상태에서 공식 도구인 PCAN-View로 진단 세션 시작 메시지를 전송하면 정상 응답이 수신되는 점을 확인하여, 문제 원인을 프로토콜 처리의 한계로 판단했다.
  • python-can과 같은 범용 라이브러리 환경만으로는 복잡한 차량 진단 프로토콜 요구사항을 완전히 제어하지 못해 통신 불안정이 발생한다고 분석했다.

[프로토콜] PCAN-OBDonUDS API 기반 통신 안정성 확보

범용 라이브러리의 자체 구현에 한계가 존재하여, 신뢰성 있는 통신 계층을 구축하기 위해 PEAK사 공식 API 환경으로 변경했다.

  • PEAK사가 제공하는 PCAN-OBDonUDS API를 적용해 진단 프로토콜 통신을 처리하도록 구조를 변경했다.
  • 해당 API가 Windows 전용이어서 기존 Linux 환경을 사용할 수 없는 제약이 있었으나, 프로토콜 안정성과 데이터 검증 속도를 우선하여 Windows 환경으로 이동했다.
  • 개발 전 PCAN-ISO-TP, PCAN-OBD-2, PCAN-OBDonUDS, PCAN-UDS, PCAN-Basic 등 주요 API 매뉴얼을 분석하여 통신 규격을 확인했다.
  • 이를 바탕으로 C++ 환경에서 안정적으로 확장 PID를 스캔하고, 차량 응답을 누락 없이 기록하는 데이터 수집 프로그램을 개발했다.