[Multi-Protocol Sensor Acquisition] 다중 프로토콜 CAN 파싱 및 실시간 동역학 추론 엔진 구축

3 min read

다양한 포맷의 J1939 및 CAN 프로토콜 센서 데이터를 수집·처리하기 위해 파싱 엔진을 개선했다. 기존 하드코딩 규칙 대신 외부 설정 파일 기반 동적 파싱 아키텍처를 적용해 센서 추가와 변경에 대한 유지보수성을 확보했다.

[Architecture / Parser] 계층형 메타데이터 기반 설정 시스템 구축

  • 단일 설정 파일 의존 구조를 변경하여 신호 정의, 수집 대상, 대체 규칙으로 역할을 분리한 3-Tier 계층형 아키텍처를 적용했다.
  • 하이브리드 주소 체계를 파싱해 전역 비트 인덱스로 변환하는 로직을 구현하여 메모리 접근 정합성을 확보했다.
  • 데이터 타입 열거형 기반 스위치 분기를 적용해 문자열 비교 오버헤드를 제거하고 파싱 속도와 타입 안정성을 개선했다.
  • 29비트 CAN ID에서 포맷 식별자를 추출하는 비트 마스킹 로직을 구현해 메시지 고유값을 식별했다.
  • 페이로드 내 바이트 경계를 넘나드는 리틀 엔디안 신호를 슬라이싱하는 전용 파이프라인을 구축했다.
  • 설정 파일 내 허용 범위와 배율 인자를 배정밀도 부동소수점 수준으로 파싱해 물리값 변환 정밀도를 개선했다.

[Hardware Abstraction / Integration] 하드웨어 인터페이스 추상화

  • 물리적 CAN 통신 하드웨어 의존성을 낮추기 위해 수신 추상화 레이어를 추가했다.
  • 외부 API(PCAN-Basic)를 래핑해 특정 디바이스 드라이버 모드를 유저 모드에서 매핑·관리하도록 연동 구조를 개선했다.

초당 수백 건 이상 인입되는 다중 센서 데이터를 로컬 스토리지에 기록하기 위해 영속화 파이프라인을 구축했다. 동적 스키마 생성과 배치 트랜잭션을 적용해 파일 I/O 오버헤드를 줄였다.

[SQLite / Transaction] 트랜잭션 가드 기반 배치 영속화 적용

  • SQLite 기반 로컬 저장소 모듈을 통합하고 트랜잭션 가드 패턴을 구현해 데이터베이스 연결 상태를 관리했다.
  • 주기적인 타임스탬프 스냅샷을 캡처해 단일 트랜잭션으로 플러시하는 배치 인서트 로직을 적용해 디스크 기록 병목을 해결했다.

[Schema / Architecture] 설정 주도형 동적 데이터베이스 스키마 생성

  • 수집 대상으로 등록된 센서 메타데이터 기반으로 런타임에 시계열 테이블 스키마를 자동 생성하는 기능을 추가해 스키마 관리를 개선했다.
  • 센서 신호 데이터 타입에 적합한 SQLite 자료형을 동적 매핑해 저장 공간 효율성을 확보했다.

[Data Integrity / Sync] 결측치 보정 및 시간 동기화 인터페이스

  • 센서 응답 지연이나 수집 누락 시 스냅샷 기록 시점에 기본값을 주입하는 Fallback 로직을 적용해 시계열 데이터 타임라인 정합성을 유지했다.
  • 오프라인 시뮬레이터 환경에서 로컬 로그 파일을 재생할 수 있도록 외부 타임스탬프 주입이 가능한 오버로딩 파이프라인을 적용했다.

실시간 수집 차량 속도와 요레이트 데이터로 정차, 가감속, 좌우 회전 등 동역학 상태를 판별하는 추론 엔진을 적용했다. 신호 노이즈와 센서 오류 대응을 위한 안정화 및 복원 로직을 구현했다.

[Algorithm / Logic] 폴링 엣지 기반 상태 래치 알고리즘

  • 차량 가감속과 회전 판별 시 일시적 신호 튐 현상에 따른 상태 오분류를 방지하기 위해 시간 윈도우 기반 래치 로직을 적용했다.
  • 속도가 특정 임계치 밑으로 떨어지면 궤적 산출용 큐와 누적 거리를 초기화해 정차 중 연산 오류를 방지했다.
  • 추론 모듈과 데이터 처리 파이프라인 간 시점 불일치를 해결하기 위해 고정밀 단일 시간 동기화 유틸리티를 적용했다.

[Kinematics / Mapping] 자동 단위 변환 및 규격 매핑과 Fallback 로직

  • 요레이트 분석 시 센서에서 입력되는 물리값 단위를 분석기 규격에 맞춰 런타임 자동 변환하는 오프셋 처리 로직을 추가했다.
  • 특정 상용차량에서 요레이트 값을 미제공할 경우, 휠 속도와 차량 윤거 데이터로 회전 반경을 추론해 차량 속도를 연산하는 폴백 로직을 구축했다.
  • J1939 표준 명세에 맞춰 회전 방향 부호 매핑 정합성을 확보했다.

[Error Recovery / Protection] 동적 에러 감지 및 즉각적 상태 복원 메커니즘

  • 비정상 범위의 에러 임계치 초과 신호 유입 시 내부 연산 버퍼를 비우고 에러 상태로 전환하는 보호 로직을 추가했다.
  • 오류 상태에서 유효 데이터가 재인입되면 기존 래치 지속 시간 규칙을 무시하고 정상 추론 상태로 복구되도록 제어 흐름을 변경했다.