Devin.KR

ROS 2 노드·토픽 계약과 상태 표시

ROS 2 구성 개념을 가상 노드와 토픽 계약으로 구현하고 통신 실패를 진단합니다.

진도 0%

레슨

  1. 노드 역할과 메시지 계약

    센서·상태 표시·구동 노드의 입력과 출력을 구성도로 제출합니다.

  2. 토픽 이름·타입과 발행 주기

    주어진 메시지 열에서 토픽·필드 형식 불일치를 판정합니다.

  3. Python 가상 발행·구독

    표준 라이브러리 deque 기반 버스로 센서 메시지를 전달하고 상태를 표시합니다.

  4. 통신 설정·큐와 진단 순서

    노드 미실행·이름 오타·타입 불일치·큐 손실을 각각 주입해 원인을 기록합니다.

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
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 입력·단위·실패 조건과 변경 이유를 설명합니다.
  • 이전 모듈의 회귀 테스트와 이번 실험 근거를 함께 제출합니다.