obdpcansqlitekinematicsembedded

[OBD Acquisition & Kinematics] OBD-II 데이터 수집 파이프라인 및 이동 궤적 매핑 초기 구축

2 min read

지난 1~2월 테스트 과정에서 겪었던 비표준 확장 PID 브루트포스 스캔 시 응답 깨짐 현상을 바탕으로 시스템 구조를 전면 재검토했다. 특히 임베디드 보드 환경에서의 포팅 및 동작 이슈를 해결하며, 이번 주차에는 안정성을 강화한 본격적인 통신 파이프라인 구축에 착수했다.

[PCAN / SQLite] 통신 제어 및 데이터 로컬 저장 파이프라인

  • PCAN 버스의 상태를 모니터링하여 버스 오프(PCAN_ERROR_BUSOFF), 하드웨어 오류, 과부하(PCAN_ERROR_BUSHEAVY) 등 예외 상황을 감지하고 차단하는 예외 처리 로직을 구현함.
  • 수집된 원본 메시지는 raw_{날짜} 테이블에, 파싱 완료된 데이터는 parsed_{날짜} 테이블에 분리 저장하여 데이터 추적성을 확보함.
  • SQLite 데이터베이스의 고속 기록을 지원하기 위해 PRAGMA synchronous=NONE;busy_timeout=5000; 옵션을 적용하여 디스크 I/O 병목을 완화함.
  • Docker Compose를 활용하여 로컬 컨테이너 기반으로 Grafana 시스템과 SQLite 데이터 소스 플러그인을 통합하여 실시간 모니터링 환경을 구축함.

[Python / Kinematics] 차량 거동 분석 엔진 및 임계치 최적화

  • 휠 스피드와 요레이트(Yaw Rate)를 기반으로 차량의 주행 상태(정지, 직진, 좌회전, 우회전)와 가속 상태(정지, 등속, 급감속, 급가속)를 판별하는 상태 머신 알고리즘을 도입함.
  • 일시적인 센서 노이즈로 인한 상태 오분류를 방지하기 위해, 회전 판단에 이어 가속 유형 판단에도 상태 전환 래치 지속 시간(latch_duration) 로직을 추가 적용하고 임계치를 조정함.
  • 속도와 요레이트 변화량 데이터를 토대로 시작 지점의 좌표를 (0, 0)으로 기준 삼아 2D 평면상의 상대 이동 궤적(x, y)을 산출하는 알고리즘을 적용함.
  • 저속 주행 시 발생하는 요레이트 노이즈를 억제하기 위해 횡가속도(lat_accel) 필터를 적용하고, 정차 중 요레이트 편향(yaw_bias)을 동적으로 보정하는 알고리즘을 추가함.

[J1939 / Data Architecture] 로우 데이터 분리 저장 및 패시브 스니핑 검토

  • 초기 트래픽 디버깅 및 분석을 위해 원본 CAN 메시지를 별도의 테이블에 분리 생성하고, executemany 구문을 통해 배치 삽입하는 로직을 구성함.
  • 상용 차량(버스)의 SAE J1939 통신 표준 기반 데이터 수집 가능성을 검토하고, DTG 단자의 OBD 스플리터를 활용한 패시브 리스닝(Passive Listening) 방식으로 종가속도/횡가속도 및 요레이트 데이터를 스니핑(Sniffing)하는 구조를 기획함.