피드로 돌아가기
Dev.toInfrastructure
원문 읽기
ROS 2 Runtime 없이 손상된 MCAP/SQLite3 데이터 복구 SDK 구현
Recovering Corrupted ROS 2 Bags Without a ROS 2 Runtime
AI 요약
Context
로봇의 비정상 종료나 전원 손실 시 rosbag2 파일의 Footer, Summary, Index가 누락되어 공식 도구로 읽기 불가능한 데이터 손상 발생. 특히 사고 직전의 핵심 데이터가 파일 끝단에 위치하여 복구가 절실하지만, 분석 환경에 ROS 2 전체 런타임을 설치해야 하는 의존성 제약 존재.
Technical Solution
- ROS 2 Runtime 의존성을 완전히 제거한 C++ SDK 및 C ABI 설계를 통한 경량 진단 도구 구현
- MCAP 파일의 순차 스캔을 통해 완전한 Record만 추출하고 손상된 Tail 영역을 제거한 후 Footer를 재구축하는 Repair 로직 적용
- SQLite3의 WAL Recovery 및 Integrity Check를 우선 수행하고, 실패 시 Page-level Salvage 기법으로 Schema와 Table 행을 직접 복구하는 2단계 전략 채택
- 센서 데이터의 해석과 무관하게 컨테이너 포맷 복구에만 집중하는 Container-centric Repair 레이어 설계
- 데이터 무결성을 위해 불완전한 메시지는 복구 대상에서 제외하고 버려진 바이트 수를 보고하는 엄격한 필터링 정책 적용
- Swift, Kotlin, Python 등 다양한 언어 바인딩을 지원하기 위한 Stable C ABI 제공
실천 포인트
1. 시스템 크래시 대비를 위해 데이터 파일의 Footer/Index 의존성을 낮추는 기록 방식 검토
2. 장애 복구 도구 설계 시 분석 환경의 제약을 고려하여 런타임 의존성을 최소화한 독립적 SDK 형태로 구축
3. 바이너리 파일 복구 시 '최대한의 복구'보다 '검증 가능한 데이터의 보존'을 우선하는 필터링 전략 수립
4. 다양한 플랫폼 확장을 위해 C++ 핵심 로직과 C ABI 인터페이스를 분리하는 설계 적용