본문으로 건너뛰기

M10.06 · ROS 2 브리지·관절 명령·카메라 연결

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

전체 커리큘럼

학습 안내

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

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

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

학습 목표

  • ROS 2와 시뮬레이터 사이의 발행/구독·시간·제어 책임을 구분하고 연결 성공의 증거 범위를 설명한다.
  • 가상 관절 명령의 이름·단위·시각 계약을 적용해 목표를 재정렬하고 입력 유효성과 상태 비교 한계를 판정한다.
  • 영상의 encoding·행 간격·크기·프레임/시각과 CameraInfo를 검사하고 원시 payload 비용을 계산한다.

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

권장 선수

M05의 ROS 통신/시계, M08.05의 JointState/TF, M10.05의 물리·렌더 주기가 선수다. Isaac Sim 6.2/ROS 2 Jazzy 문서에 근거한 가상 기록 분석이며 실제 ROS·Isaac·GPU를 실행하지 않는다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

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

토픽이 보이는 것부터 작업 성공까지

브리지는 시뮬레이터의 상태/센서와 ROS 2 인터페이스를 연결한다. 통신이 발견되는 것, 메시지가 도착하는 것, 숫자가 올바르게 해석되는 것, 물리 상태가 목표를 따라가는 것은 다른 단계다. 그래프에서 토픽 이름을 봤다는 이유만으로 마지막 단계까지 통과했다고 쓰지 않는다. 발행자/구독자·타입·QoS·이름/namespace·도메인과 전달량을 확인한 뒤 내용과 동작을 검사한다.

가상 설계에서 제어 노드는 /sim/joint_command를 발행하고 시뮬레이터 어댑터는 이를 구독하여 정해진 관절 제어 입력에 연결한다고 하자. 시뮬레이터 상태 발행자는 /sim/joint_states를 보내며 RSP/기록기가 읽는다. 명령 발행자와 상태 발행자는 역할이 다르다. 같은 숫자를 양쪽에 복사해도 실제 추종 증거가 되지 않는다. 상태를 장면 위치로 직접 설정하는 미러링과 힘/drive를 통해 목표를 따르는 물리 실험도 구분한다.

Isaac Sim 6.2의 공식 Joint Control 예제는 관절 상태/명령과 articulation 제어 연결을 보여 준다. 예제에서 JointState를 명령 운반에 쓰는 것은 그 소비자가 정의한 계약이며 표준 메시지가 자동으로 명령 의미를 갖는 것은 아니다. 실제 프로젝트는 궤적/action/ros2_control 등 필요한 완료·취소·제한 계약을 선택한다. 여기서는 학습용 어댑터의 절대 위치 목표만 해석한다.

시계와 권한도 정한다. 시뮬레이션이 /clock을 소유하고 관련 노드가 그 시계를 쓰도록 구성하는 경우, 시스템 시각을 같은 숫자 축으로 취급하지 않는다. reset/일시정지 시 명령 만료와 상태 기록 정책도 필요하다. 두 주체가 같은 TF child를 서로 다른 값으로 발행하거나 두 제어기가 같은 관절을 동시에 지배하지 않도록 담당자를 정한다. 연결과 시간의 기본은 M05.03/M05.06을 보충 경로로 사용한다.

관절 명령은 순서와 신선도를 검사한다

합성 절대 위치 명령의 name=[elbow,shoulder], position=[0.2,0.5]라 하자. 두 관절 모두 rad 단위 회전 관절이고 유효 범위는 [−1,1] rad다. 어댑터 내부 순서가 [shoulder,elbow]면 값은 [0.5,0.2]로 재정렬한다. 이름/값 길이·중복/누락·유한 값·범위·모드와 단위를 검사한다. 원본 관절 이름과 변환된 USD 이름의 대응표도 필요하다. degree 속성과 rad API를 혼동하거나 그리퍼 m 값을 rad로 읽지 않는다.

이 어댑터의 별도 계약에서 명령 stamp는 ROS 시뮬레이션 시각 1.10 s, 현재 시각은 1.12 s, 허용 나이는 0~0.05 s라고 명시하자. 나이는 0.02 s이므로 그 조건은 통과다. 현재가 1.18 s면 0.08 s로 실패다. 미래 시각도 이 계약에서는 거부한다. 이것이 모든 ROS 노드의 공통 TTL 규칙이라는 뜻은 아니다. TTL은 유효 기간이며 애플리케이션이 명시·검사하는 조건이다.

상태 로그의 shoulder=0.4 rad가 stamp=1.08 s라면 1.10 s에 생성한 목표 0.5와 차이 0.1을 계산할 수는 있어도 목표 적용 뒤의 추종 오차로 확정할 수 없다. 관측이 명령보다 앞서기 때문이다. 목표 적용 시각과 이후 상태·지연·모드/포화/오류를 확인해야 한다. topic echo로 값이 보이는 것과 작업 완료 판정이 다른 이유가 여기에 있다. 상태 미제공을 0으로 채우거나 오래된 상태 stamp를 현재로 덮어쓰지 않는다.

카메라 Prim은 영상 토픽이 아니다

카메라 Prim의 위치/광학 설정에서 렌더 결과를 얻고 이를 메시지로 변환·발행하는 경로가 필요하다. render product는 지정 카메라의 렌더 데이터를 얻는 연결점이며 viewport에서 방을 본다고 그 영상이 의도한 ROS 센서 토픽에 발행되는 것은 아니다. 카메라 경로, render product의 연결/활성, 데이터 종류와 발행 주기를 확인한다. 6.2 카메라 문서는 기존 frameSkipCount 대신 OmniSensorAPI가 적용된 카메라의 omni:sensor:tickRate를 쓰는 변경을 설명한다. 다른 버전의 옵션 이름을 그대로 옮기지 않는다.

ROS Image의 encoding은 채널 의미/순서와 값 크기를 나타낸다. rgb8이면 한 픽셀의 RGB 세 채널이 각각 8 bit다. bgr8과 같은 색 순서라고 해석하면 빨강/파랑이 뒤바뀔 수 있다. width/height는 열/행 수이고 step은 행 하나의 바이트 수다. 패딩이 있을 수 있으므로 언제나 step=width×채널 수라고 가정하지 않는다. data 크기는 step×height와 맞는지 검사한다.

합성 영상이 640×480, rgb8, 패딩 없는 step=1920 byte라면 한 영상은 1920×480=921600 byte다. 30 Hz면 원시 영상 payload는 초당 27648000 byte, 십진 단위 약 27.648 MB/s다. 네트워크 헤더·다른 토픽·복사·압축 전후 비용은 포함하지 않았다. 이 계산만으로 실제 대역폭이나 지연을 측정했다고 할 수 없다. step이 1936이라면 패딩을 포함한 크기를 다시 계산해야 한다.

영상·보정·TF가 같은 관측을 가리키는가

Image와 CameraInfo의 header는 영상 취득 시각과 optical frame을 설명한다. optical 축은 +x가 영상 오른쪽, +y가 아래쪽, +z가 전방이다. ROS의 일반 몸체 프레임과 다를 수 있으므로 이름만 바꿔 축을 맞췄다고 하지 않는다. CameraInfo는 이미지와 맞는 해상도/내부 파라미터/왜곡 정보를 제공해야 하고 해당 시각의 TF로 다른 프레임과 연결한다. Image와 연결된 CameraInfo의 frame_id가 충돌하면 계약 위반이다.

640×480 영상에 다른 크기에서 얻은 내부 파라미터를 근거 없이 재사용하거나 RGB/깊이의 다른 관측 시각을 같게 취급하면 영상이 보여도 좌표 해석은 틀릴 수 있다. CameraInfo가 도착했다고 보정이 유효하다는 증거도 아니며 K[0]=0은 공식 메시지에서 미보정 표시로 해석할 수 있다. 핀홀 계산은 M12.02에서 자세히 다룬다. 지금은 ‘영상이 보임’과 ‘프레임/보정/시각이 맞는 관측’의 차이를 검사한다.

기존 1.5 브리지와 4.2 프레임을 연결하면 통신→입력 계약→시뮬레이션 적용→시간 있는 상태/영상의 순서로 근거를 남길 수 있다. 아래 활동은 실제 연결 로그가 아니라 위 설계의 합성 예다.

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

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

    1.5 Isaac Sim-ROS 2 브리지 설계

    목표 일부 관련

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

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

    3.6 ROS 2 JointState 브리지

    목표 일부 관련

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

학습 범위와 한계

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

실습 필수

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

입력은 위 명령/현재/상태 시각과 관절 값, 640×480 rgb8 영상/step 1920/30 Hz다. Image frame_id는 sim/camera_optical, 연결된 CameraInfo는 camera_link라고 기록돼 있다. 토픽 발견만 성공했고 적용/오류 로그는 없다.

  1. 명령·상태·RSP·카메라 발행의 방향과 책임을 그린다. 발견 성공이 입증하는 범위와 추가로 확인할 전달 증거를 적는다.
  2. 명령을 내부 순서로 바꾸고 현재 1.12/1.18 s의 나이를 판정한다. 상태 1.08 s로 목표 추종을 확정할 수 있는지 설명한다.
  3. 영상 크기/원시 payload 비용을 계산하고 두 frame_id의 문제를 찾는다. 영상 정합을 확인할 추가 자료를 제안한다.

관찰은 연결도·관절 계약·영상 계약으로 나눈다. 막히면 초 단위와 바이트 단위를 따로 계산하고 메시지 수신과 의미 검증을 분리한다. 실제 ROS나 simulator를 실행하지 않는다.

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

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

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

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

    [SIM→HW] [SAFETY] 실습 1-4: 시뮬레이터-ROS 2 브리지 계약

    목표 일부 관련

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

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

    [SIM→HW] [SAFETY] 실습 3-3: ROS 2 JointState 안전 브리지

    목표 일부 관련

    실습 원고 참조. 로컬/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

    목표 충족 범위 없음

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

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

    01_physical_ai_isaac_ros2/code/ros2_jazzy/safety_gate_cpp/CMakeLists.txt

    목표 충족 범위 없음

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

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

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

    목표 충족 범위 없음

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

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

    01_physical_ai_isaac_ros2/code/ros2_jazzy/safety_gate_cpp/src/safety_gate.cpp

    목표 충족 범위 없음

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

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

    03_so101_kinematics_teleop/code/ros2_ws/src/so101_training_bridge/CMakeLists.txt

    목표 충족 범위 없음

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

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

    03_so101_kinematics_teleop/code/ros2_ws/src/so101_training_bridge/package.xml

    목표 충족 범위 없음

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

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

    03_so101_kinematics_teleop/code/ros2_ws/src/so101_training_bridge/scripts/safe_joint_bridge.py

    목표 충족 범위 없음

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

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

    03_so101_kinematics_teleop/code/ros2_ws/src/so101_training_bridge/src/joint_state_monitor.cpp

    목표 충족 범위 없음

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

학습 범위와 한계

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

평가·해설 필수

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

확인 문제 Q1

시뮬레이터의 /joint_states 토픽이 발견됐다. 로봇 명령 추종과 카메라 연결도 성공했다고 할 수 있는가? 발행/구독 및 적용/피드백 책임으로 설명하라.

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

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

확인 문제 Q2

동일한 이름 계약의 명령 stamp=2.0 s, 현재=2.06 s이고 허용 나이는 0~0.05 s다. [elbow,shoulder]의 값 [0.1,0.3]을 내부 [shoulder,elbow]로 바꾸고 유효성을 판정하라. 상태 stamp=1.99 s의 위치로 이후 추종을 입증할 수 있는가?

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

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

확인 문제 Q3

패딩 없는 rgb8 4×2 영상의 step과 data 크기는 얼마인가? step=16 byte로 패딩했다면 크기는 어떻게 되는가? CameraInfo의 frame_id와 취득 시각이 맞는지도 확인해야 하는 이유를 설명하라.

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

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

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

학습 범위와 한계

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

참고 자료

학습 확인

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

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

학습 이동

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

전체 목차로 돌아가기 →

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