j1939can-buscppsqlitekinematics

[Multi-Protocol Sensor Acquisition] J1939 파싱 엔진 및 데이터 처리 파이프라인 초기 아키텍처 구축

2 min read

J1939 프로토콜 기반의 데이터를 수집, 파싱 및 영구 저장하기 위한 초기 아키텍처를 설계함. 설정 파일의 동적 로딩, 비트 슬라이싱 기반의 파싱 엔진, 로컬 SQLite를 활용한 데이터 관리, 그리고 센서 데이터를 가공하는 운전 형태 분석기 모듈을 순차적으로 구현함.

[C++ / Bit-slicing] 하이브리드 주소 파싱 엔진 및 정적 타입 유효성 검사

  • 29비트 CAN ID에서 PGN(PDU1, PDU2)을 추출하는 로직 및 리틀 엔디안 기반 비트 슬라이싱(Bit-slicing) 구현.
  • J1939 표준의 Byte.Bit (X.Y) 표기법을 지원하여 글로벌 비트 인덱스로 자동 변환하는 하이브리드 파싱 로직 적용.
  • INT, DOUBLE, BOOLEANDataType 열거형을 도입하여 기존의 불안정한 문자열 기반 타입 비교를 제거함.
  • Min/Max 유효성 필터링 및 비트 길이에 독립적인 범용 오류 상태(Not Available, Error) 감지 로직 적용.

[SQLite / Storage] 트랜잭션 버퍼링 및 SPN 기반 동적 스키마 적용

  • TableWriterTxGuard를 구현하여 SQLite 기반의 안전한 트랜잭션 관리 인터페이스 구축.
  • 설정 파일에서 Save_Interval_MSMax_Batch_Size를 로드하여, 디스크 I/O를 제어하고 주기적인 스냅샷을 생성하는 버퍼링 로직 적용.
  • 타겟 SPN 목록을 기반으로 데이터베이스 테이블 컬럼이 자동 구성되는 동적 스키마 생성 기능 구현.

[C++ / Kinematics] 실시간 궤적 산출기 및 차량 상태(가감속) 추론 엔진

  • 단순 데이터 로깅을 넘어 주행 맥락을 판별하기 위해 SpeedAnalyzerRotationAnalyzer를 연동하여 회전/가감속 상태 판정 로직을 구현함.
  • 저속 주행 시 정상적인 정차(STOP) 상태로 천이되도록 폴링 엣지 트리거 로직 및 래치(Latch) 메커니즘 적용.
  • N/A(255) 데이터 수신 시 궤적 큐를 강제 초기화하여 에러 상태(-1)로 즉각 진입하는 방어 로직 추가.
  • 차량이 요레이트 값을 제공하지 않는 경우를 대비해, 좌/우 휠 속도 데이터와 윤거 값을 활용하여 회전 판단을 수행하는 다중 Fallback 연산 구조를 확보함.

[Configuration / Core] 3-Tier 기반 설정 시스템 및 동적 단위 변환 아키텍처

  • 설정을 signals, target, fallback 3계층 구조로 분리하여 메타데이터와 복구 규칙의 의존성을 해소함.
  • 수집된 Yaw Rate 데이터의 rad/sdeg/s 간 단위 변환을 자동으로 수행하는 getEffectiveValue 로직 도입.