ROS 2 노드·토픽 계약과 상태 표시
ROS 2 구성 개념을 가상 노드와 토픽 계약으로 구현하고 통신 실패를 진단합니다.
진도 0%
레슨
- 노드 역할과 메시지 계약
센서·상태 표시·구동 노드의 입력과 출력을 구성도로 제출합니다.
- 토픽 이름·타입과 발행 주기
주어진 메시지 열에서 토픽·필드 형식 불일치를 판정합니다.
- Python 가상 발행·구독
표준 라이브러리 deque 기반 버스로 센서 메시지를 전달하고 상태를 표시합니다.
- 통신 설정·큐와 진단 순서
노드 미실행·이름 오타·타입 불일치·큐 손실을 각각 주입해 원인을 기록합니다.
ROS 2 노드·토픽 계약과 상태 표시 미션
m03-c-hal 미션 solution 전체와 C 44개·Python 34개 회귀 검사를 유지한 starter에서 topic_project.py를 확장합니다. 실제 HAL JSONL을 sensor_node 어댑터와 단일 구독자 버스로 연결합니다.
요구사항
- m03 HAL 로그를 sensor_node 입력으로 연결하고 status_node 출력에 최근 거리·시각·결함을 표시합니다.
- 발행 주기는 가상 시간 0.05초이며 큐 깊이는 4로 설정합니다.
- 이름·타입·생존 상태·큐 깊이·신뢰성 설정 확인 순서를 진단 문서로 남깁니다.
- Python 버스는 DDS나 ROS 2 실행기가 아니므로 QoS 호환·실제 Linux 노드 실행은 후속 체크리스트로 분리합니다.
- HAL 측정 stamp_s·seq는 보존하며 pub_s·pub_seq만 20Hz로 갱신합니다. 최신 상태 유지 재발행은 새 센서 측정이 아닙니다.
- topic_project.py의 TODO를 고치고 DIAGNOSIS.md의 원인별 근거와 후속 실제 ROS 2 체크리스트를 제출합니다.
완료 기준
- 가상 1초 구간 [0,1)에서 발행 20건과 정상 수신 20건을 확인합니다.
- 노드 중단·이름 오타·타입 불일치 fixture별 진단 사유가 달라집니다.
- 깊이 4인 큐에 6건을 넣으면 정의한 오래된 항목 제거 정책에 따라 최신 4건을 받습니다.
- bash check.sh에서 C 44개와 Python 61개 검사가 통과합니다. stamp_s=0.2인 마지막 결함이 pub_s=0.95에도 INVALID로 표시됩니다.
- 원래 정상 좌표 두 점과 실패 행 제외 정책을 유지합니다.
bash check.sh미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 입력·단위·실패 조건과 변경 이유를 설명합니다.
- 이전 모듈의 회귀 테스트와 이번 실험 근거를 함께 제출합니다.