본문으로 건너뛰기

M05.03 · DDS·QoS·통신 발견·네임스페이스

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • DDS 기반 통신의 발견 조건과 도메인·네임스페이스·이름의 역할을 구별하여 완전한 Topic 이름을 구한다.
  • 발행자가 제공하는 QoS와 구독자가 요구하는 QoS의 호환을 판정하고 가정한 대기 자료의 나이를 계산한다.
  • 메시지 미수신을 발견·이름/타입·QoS·실행 지연의 증거로 나누어 진단하고 정책 변경의 한계를 설명한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M05.01의 노드와 실행기, M05.02의 Topic과 자료형이 선수다. ROS 2 Jazzy의 DDS 기반 RMW를 기준으로 합성 설정표를 읽는다. 실제 도메인 변경·방화벽 조작·ROS 실행은 필요 없다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

서로를 찾는 것과 자료를 처리하는 것

ROS 2의 통신 계층은 사용자 코드와 같은 층이 아니다. 클라이언트 라이브러리 아래에서 RMW(ROS Middleware) 인터페이스가 미들웨어 구현과 연결된다. 여기서는 DDS 기반 RMW를 가정한다. DDS는 분산 데이터 교환과 발견 등의 기능을 제공하는 표준 계열이다. ROS 2라는 이름만으로 모든 구현의 내부 동작이나 네트워크 설정이 같다고 가정하지 않는다.

발견(discovery)은 다른 참여자와 통신 대상을 알아가는 과정이다. 일반적인 DDS 기반 구성에서는 같은 ROS 도메인에 속한 참여자들이 발견 정보를 교환한다. ROS_DOMAIN_ID가 다른 두 집단은 기본 직접 통신에서 분리된다. 별도 브리지나 중계가 구성된 예외는 이 기본 모델과 구분한다. 같은 도메인이라고 네트워크 도달성·보안 설정·타입·QoS까지 모두 충족하는 것은 아니다. 도메인 번호는 물리적인 다른 LAN을 만드는 장치도, 접근 제어를 완성하는 보안 경계도 아니다.

네임스페이스(namespace)는 이름의 범위를 나눈다. 노드의 네임스페이스가 /robot_a이고 상대 Topic 이름이 joint_states라면 완전한 이름은 /robot_a/joint_states다. /joint_states처럼 처음부터 /로 시작하는 절대 이름은 이 네임스페이스를 붙이지 않는다. remap은 지정한 이름을 다른 이름으로 바꾸는 규칙이며 최종 해석 이름으로 연결 여부를 비교해야 한다. 서로 다른 노드 이름 자체가 같은 Topic 통신을 막는 것은 아니다. 반대로 비슷한 노드 이름이나 폴더에 있어도 최종 Topic이 다르면 같은 흐름을 읽지 못한다. 메시지 안의 frame_id 같은 문자열에는 노드 네임스페이스가 자동 적용되지 않으므로 좌표계 분리와도 구별한다.

같은 QoS가 아니라 호환되는 QoS를 찾는다

QoS(Quality of Service)는 전달과 보관 등의 정책 묶음이다. 발행자는 제공(offered) 정책을, 구독자는 요구(requested) 정책을 갖는다. 통신 중에 두 값이 알아서 동일해지는 ‘협상’으로 생각하지 않는다. 호환은 각 발행자와 구독자 쌍에서 판정한다. 다른 구독자의 설정이 이 쌍의 요구를 대신 낮춰 주지도 않는다.

reliability의 best effort는 손실이 있을 수 있는 전달 방식이고 reliable은 재전송 등을 사용하는 신뢰 전달 방식이다. best effort 발행에 reliable을 요구하는 구독은 호환되지 않는다. reliable 발행에 best effort를 요구하는 구독은 이 정책에 대해서는 호환된다. durability의 volatile은 늦게 참여한 구독자를 위해 이전 자료를 보관하려 하지 않고, transient local은 살아 있는 발행자가 보관한 자료를 늦은 구독자에게 제공하는 데 쓰인다. volatile 발행과 transient local 요청은 호환되지 않는다. 둘 다 transient local인 경우에도 보관 깊이와 자원·수명 조건에 따라 제공 가능한 과거 자료가 제한된다. 디스크에 영구 저장하는 데이터베이스와 같은 뜻은 아니다.

다음 표에서는 다른 정책과 이름·타입·발견 조건이 모두 맞는다고 가정한다. 실제 판정에서는 호환에 영향을 주는 모든 정책을 확인한다.

발행 제공구독 요구이 표의 판정
best effort / volatilereliable / volatilereliability 불일치
reliable / volatilebest effort / volatile호환
reliable / volatilereliable / transient localdurability 불일치
reliable / transient localreliable / transient local호환, 보관 조건은 별도

history의 keep last와 depth N은 보관할 최근 표본 수를 정하는 정책이다. keep all도 자원 제한을 없애는 마법은 아니다. depth를 늘리면 오래된 자료가 남을 수 있지만 처리 속도가 느린 문제 자체가 사라지지는 않는다. reliable도 사용자 콜백의 기한 내 실행, 디스크 기록 성공, 물리적인 작업 성공을 자동으로 보장하지 않는다. 통신 정책과 응용 수준의 완료 조건을 구분한다.

깊이와 시간은 서로 다른 질문이다

가상 보관 모델에서 메시지가 0, 20, 40, 60 ms에 하나씩 도착하고 그동안 소비가 전혀 없다고 하자. keep last 깊이 3으로 마지막 세 개만 남긴다면 20, 40, 60 ms 자료가 남는다. 판단 시각이 같은 시계의 70 ms라면 가장 오래된 자료의 나이는 50 ms, 최신 자료의 나이는 10 ms다. 이는 수신 직후 자료를 넣는 단일 가상 보관함의 계산이며 모든 DDS 구현의 정확한 큐 배치나 콜백 순서를 재현한 것은 아니다.

깊이를 1로 줄이면 이 모델에는 60 ms 자료만 남지만, 증분 명령이나 모든 사건을 세어야 하는 기록에 중간 자료를 버려도 되는지는 별도 요구다. 절대 상태의 최신 관측과 순서 의존 명령을 같은 방식으로 다루지 않는다. deadline은 기대 발행/수신 간격과 관련된 정책 및 위반 사건을 제공하지만 늦은 시스템을 자동으로 빨라지게 하지는 않는다. lifespan은 만료 자료의 전달을 제한하는 정책이며 센서 획득 시각부터 응용이 계산한 나이와 자동으로 동일하지 않다. 자세한 시간 계약은 M05.06에서 이어간다.

미수신 진단은 한 가지 버튼을 누르는 일이 아니다. 양쪽 실행 환경과 도메인·네트워크에서 서로를 발견하는지, 최종 이름과 타입이 같은지, 양쪽 QoS가 호환되는지, 실제 발행과 콜백 처리가 진행되는지를 차례로 연결한다. 기존 1장의 센서 상태 예제를 읽을 때에도 echo 도구 자체가 하나의 구독자라는 점을 고려한다. 관측 도구의 QoS가 맞지 않으면 도구에 안 보이는 것과 생산자의 미발행을 혼동할 수 있다.

관련 기존 자료 · 보충해서 읽기

  • 기존 상세 본문 · 관련 기존 자료 · 보충 참고

    1.4 ROS 2 Jazzy 통신 모델

    목표 일부 관련

    기존 자료의 관련 범위이며 신규 목표 전체의 품질 검수는 아직 진행하지 않았습니다.

  • 기존 상세 본문 · 관련 기존 자료 · 보충 참고

    1.8 트러블슈팅

    목표 일부 관련

    기존 자료의 관련 범위이며 신규 목표 전체의 품질 검수는 아직 진행하지 않았습니다.

  • 기존 요약 레슨 · 관련 기존 자료 · 보충 참고

    ROS 2 인터페이스와 QoS 계약

    목표 일부 관련

    핵심 요약 레슨입니다. 자세한 유도·수식·코드는 연결된 상세 본문을 함께 읽으세요.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

가상 설정에서 발행 노드는 도메인 7, 네임스페이스 /robot_a, 상대 이름 joint_states, 타입 JointState다. 제공 QoS는 best effort/volatile이다. 구독 노드는 도메인 7, 네임스페이스 /robot_b, 상대 이름 joint_states, 타입 JointState이며 reliable/volatile을 요구한다. 브리지와 remap은 없다. 별도 가상 보관함은 본문의 0/20/40/60 ms 입력과 keep last 깊이 3을 사용한다.

  1. 양쪽의 최종 Topic 이름을 구한다. 같은 도메인만으로 통신을 판정할 수 없는 이유와 /joint_states라는 절대 이름의 차이를 설명한다.
  2. 구독 이름을 발행 이름과 같게 고쳤다고 가정하고 QoS 호환을 판정한다. 이 정책에서 가능한 수정 방향 두 가지를 쓰고, 보관함의 남은 시각과 70 ms 기준 나이를 계산한다.
  3. 이름과 QoS를 맞춘 뒤에도 callback 기록이 없다. 발견 정보·실제 발행 기록·Executor의 시작/종료 기록 가운데 다음에 필요한 증거를 고르고 이유를 쓴다. reliable이나 큰 depth로 바꾸기만 하면 해결된다는 주장을 판정한다.

실제 네트워크 설정을 바꾸지 않는다. 막히면 최종 이름과 정책의 제공/요구 방향을 별도 칸에 쓴다. 예제에서 주지 않은 패킷 손실이나 장애 원인을 확정하지 않는다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

관련 기존 자료 · 보충해서 읽기

  • 기존 실습 원고 · 관련 기존 자료 · 보충 참고

    [SIM] 실습 1-3: ROS 2 인터페이스와 QoS

    목표 일부 관련

    실습 원고 참조. 로컬/ROS/Isaac/GPU/실물 실행과 장비 없는 기본 경로의 목표 검수는 미실시. 연결된 원고의 환경·절차를 확인하세요. 원고 열람은 실습 수행을 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/package.xml

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/physical_ai_demo/__init__.py

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/physical_ai_demo/joint_state_source.py

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/physical_ai_demo/proposed_command_source.py

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/resource/physical_ai_demo

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/setup.cfg

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    01_physical_ai_isaac_ros2/code/ros2_jazzy/physical_ai_demo/setup.py

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

네임스페이스 /r1의 상대 Topic scan과 절대 Topic /scan의 최종 이름은 무엇인가? 도메인이 같으면 반드시 통신하는가? frame_id도 자동으로 /r1이 붙는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

발행 제공이 reliable/volatile, 구독 요구가 best effort/transient local이다. 다른 조건이 맞을 때 호환되는가? 가상 keep last 깊이 2에 0/10/20 ms 자료가 소비 없이 들어왔다면 25 ms에서 남은 자료와 나이는 무엇인가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

발행 노드가 목록에 보이지만 관측 도구에는 메시지가 없다. ‘네트워크도 정상이고 생산자는 발행하지 않는다’는 결론이 충분한가? 필요한 증거 세 종류와 reliable/depth 변경의 한계를 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

관련 기존 자료 · 보충해서 읽기

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.