bag 기록과 재생 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. Robot 디버깅에서 rosbag2가 일반 Log보다 중요한 이유를 설명하세요.
정답과 해설
일반 Log는 Program이 선택한 문자열과 상태만 남깁니다. rosbag2는 실제 Message의 Type, Payload와 시간 순서를 보존하므로 Sensor 입력과 판단 결과를 다시 재생하고 같은 조건에서 Algorithm을 반복 검증할 수 있습니다.
2. Bag에 저장되는 Metadata와 자동으로 저장되지 않는 실행 환경 정보를 구분하세요.
정답과 해설
Bag에는 Topic 이름·Type, Message 수, 기록 시간, Storage와 QoS 관련 Metadata 및 Message Data가 저장됩니다. Source Commit, Parameter 전체, Launch 명령, Container Image, 장비 Serial, Calibration과 현장 상황은 별도 Manifest로 남겨야 합니다.
3. Camera 한 대의 예상 기록 용량을 계산하는 절차를 설명하세요.
정답과 해설
평균 Message 크기에 초당 Frame 수와 기록 초를 곱하고 다른 Topic과 Index·Metadata 여유를 더합니다. 실제 ros2 topic bw 측정값에 기록 시간을 곱한 뒤 Compression 비율과 최소 20~30%의 Disk 여유를 반영하는 편이 정확합니다.
4. --all, Topic 목록, Include Regex와 Exclude Regex를 어떤 상황에서 사용하나요?
정답과 해설
--all은 짧은 탐색 기록, 명시적 Topic 목록은 운영용 최소 Dataset, Include Regex는 Namespace나 Sensor 묶음, Exclude Regex는 전체 기록에서 대용량 영상·Debug Topic 등을 제거할 때 사용합니다. 최종 목록은 반드시 확인합니다.
5. Navigation 실패를 재현하기 위해 Sensor 외에 함께 기록할 Topic을 쓰세요.
정답과 해설
LaserScan·PointCloud·IMU 같은 Sensor뿐 아니라 /tf, /tf_static, Odometry, Map, Localization Pose, Goal·Path, Costmap 관련 출력, /cmd_vel, Diagnostics와 Mode 상태를 함께 기록해야 원인과 결과를 복원할 수 있습니다.
6. MCAP과 sqlite3를 선택할 때 고려할 항목은 무엇인가요?
정답과 해설
설치된 Storage Plugin, ROS 배포판과 분석 도구 호환성, 파일 복구성, Chunk·Index·Compression 구성, 기록 성능과 기존 Pipeline을 비교합니다. 형식 이름만 보고 결정하지 말고 목표 장비에서 쓰기 부하와 읽기 도구를 시험해야 합니다.
7. 파일 분할, Compression과 Cache의 장점과 위험을 설명하세요.
정답과 해설
분할은 전송·복구 범위를 줄이고, Compression은 Disk와 I/O를 절약하며, Cache는 순간 쓰기 지연을 흡수합니다. 반면 파일 경계 관리, CPU 부하, 종료 시 미기록 Cache 손실과 Memory 증가가 생길 수 있어 Drop과 System 부하를 측정해야 합니다.
8. ros2 bag info에서 현장을 떠나기 전에 확인할 항목은 무엇인가요?
정답과 해설
Storage ID, Duration, 시작·종료 시간, 전체 Message 수와 각 Topic의 이름·Type·개수, 파일 크기와 분할 파일을 확인합니다. 핵심 Topic의 개수가 0이 아닌지와 기대 주기 대비 누락이 없는지도 검증합니다.
9. Record Timestamp, Header Stamp와 /clock의 차이를 설명하세요.
정답과 해설
Record Timestamp는 Recorder가 Message를 Bag에 기록한 기준 시각이고 Header Stamp는 Sensor 측정이나 Data 생성 시각입니다. /clock은 재생·Simulation 중 Node들이 따라갈 ROS Time을 공급하므로 세 값의 지연과 기준 Clock을 구분해야 합니다.
10. Bag 재생에서 --clock과 use_sim_time이 필요한 상황은 언제인가요?
정답과 해설
Node가 Timer, TF 조회, Timeout과 Message Age를 녹화 당시 시간 흐름으로 계산해야 할 때 Player가 --clock으로 시간을 발행하고 대상 Node는 use_sim_time:=true로 이를 사용합니다. Wall Time만 쓰면 재생 속도·Pause와 Algorithm 시간이 어긋납니다.
11. /tf_static이 없거나 TF Extrapolation이 발생할 때 진단 순서를 설명하세요.
정답과 해설
먼저 Bag Topic과 Message 수에서 /tf·/tf_static 존재를 확인합니다. Frame 이름과 Tree 연결, Static Transform 공급자를 점검하고 Header Stamp·ROS Clock·use_sim_time을 맞춘 뒤 TF Buffer 범위보다 과거·미래를 조회하는지 조사합니다.
12. QoS Override가 필요한 기록·재생 상황을 각각 설명하세요.
정답과 해설
기록에서는 자동 선택 QoS가 Publisher와 호환되지 않거나 Transient Local Data를 놓칠 때 Topic별 Subscription QoS를 지정합니다. 재생에서는 Consumer 요구와 맞지 않거나 저장된 제안 정책을 바꿔야 할 때 Player의 Publisher QoS를 Override합니다.
13. 실제 Robot에서 /cmd_vel Bag 재생이 위험한 이유와 방지책을 쓰세요.
정답과 해설
과거 속도 명령이 현재 장애물·위치와 무관하게 Motor Driver에 전달되면 충돌할 수 있습니다. Actuator 전원을 분리한 Simulation에서 우선 검증하고, Topic 제외 또는 안전 Namespace Remap, Velocity Mux·Watchdog·E-stop과 제한 구역을 적용합니다.
14. SequentialReader, get_message, deserialize_message의 역할을 설명하세요.
정답과 해설
SequentialReader는 Storage를 열고 기록 순서대로 Serialized Message를 읽습니다. get_message는 Type 문자열로 Python Message Class를 찾고, deserialize_message는 Byte Data를 해당 ROS Message 객체로 변환해 Field 분석을 가능하게 합니다.
15. 고정 Bag을 이용한 Algorithm 회귀 시험 Pipeline과 비결정성 처리 방법을 설명하세요.
정답과 해설
Version이 고정된 Bag과 Config로 Algorithm을 실행하고 출력 Topic 또는 계산 Metric을 수집해 허용 오차와 기준 결과를 비교합니다. Seed·Thread 수·Clock·Hardware 가속을 고정하고 여러 번 실행해 분포를 비교하며, 결과와 Software Version을 함께 보관합니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.