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

3 min read

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

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

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

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

  • 물리적인 CAN 통신 하드웨어에 대한 의존성을 낮추기 위해 수신 추상화 레이어를 새롭게 정의했다.
  • 외부 API(PCAN-Basic)를 래핑하여 특정 디바이스 드라이버 모드를 유저 모드에서 안전하게 매핑 및 관리할 수 있도록 연동 구조를 최적화했다.

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

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

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

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

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

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

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

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

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

  • 차량의 가감속 및 회전 판별 시 일시적인 신호 튐 현상으로 인한 상태 오분류를 막기 위해 시간 윈도우 기반의 래치(Latch) 로직을 적용하여 상태 판별의 일관성을 확보했다.
  • 속도가 특정 임계치 이하로 떨어지는 조건에서 궤적 산출용 큐와 누적 거리를 강제 초기화하여 정차 중 연산이 오염되는 것을 방지했다.
  • 각 추론 모듈과 데이터 처리 파이프라인 간의 시점 불일치를 해소하기 위해 고정밀 단일 시간 동기화 유틸리티를 적용했다.

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

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

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

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