1.5 Isaac Sim-ROS 2 브리지 설계

1.5.1 경계에서 명시해야 할 네 가지

  1. 좌표 프레임: world, base_link, tool0, 카메라 optical frame 사이의 TF 관계
  2. 단위: radian/degree, metre/millimetre, N/N·m
  3. 시간: 시뮬레이션 clock과 메시지 timestamp의 소유자
  4. 명령 소유권: 같은 관절을 그래프, ROS controller, GUI가 동시에 쓰지 않도록 단일 writer 지정

ROS 2 브리지 데이터 흐름

그림 1-4. 관측 경로와 명령 경로를 분리하고 안전 게이트를 시뮬레이터 밖의 독립 Node로 두면 실물 전환 시 같은 계약을 유지하기 쉽다.

1.5.2 권장 인터페이스

  • /joint_states (sensor_msgs/msg/JointState): 관절 위치·속도·힘
  • /tf, /tf_static: 좌표 프레임 관계
  • 카메라 영상과 CameraInfo: 영상과 내부 파라미터
  • /clock: 시뮬레이션 시간
  • 제어 명령: controller가 요구하는 trajectory 또는 명시적 target message
  • 작업 수준: 자체 Action 또는 표준 controller Action

JointState의 name과 각 배열은 인덱스가 대응한다. 빈 velocity를 허용하는지, 모든 관절을 매번 포함하는지 계약을 명시한다. 이름 순서를 고정된 하드코딩 인덱스로 가정하지 말고 map을 구성한다.

1.5.3 단계별 통합 전략

  1. 시뮬레이터를 정지한 상태에서 Stage 경로와 관절 이름을 확인한다.
  2. /clock, /joint_states, /tf처럼 읽기 전용 관측 경로를 먼저 연결한다.
  3. 단일 관절을 낮은 속도로 명령하고 부호와 단위를 확인한다.
  4. 명령 만료 watchdog과 범위 제한을 활성화한다.
  5. reset, pause, bridge 재시작, 구독자 지연을 의도적으로 발생시킨다.
  6. 정상 경로보다 실패 뒤 복구가 결정적인지 확인한다.
이 장의 예제 코드·설정 파일 (12)

이 장의 자가 점검·가상실습