Skip to content

Image Echo — C++ 예제 ​

소스: rbq_sdk/cpp/example/src/rbq_image_echo.cpp

압축 카메라 토픽을 구독해 초당 수신율, 마지막 프레임 크기, 이미지 포맷을 출력하는 읽기 전용 진단 도구입니다. 카메라 스트림이 실제로 발행되고 있는지, SDK 호스트에서 도달 가능한지 확인할 때 사용합니다.

동작 방식 ​

프로그램 동작:

  1. argv[1]에서 토픽 이름을(기본값 rt/rbq/vision/sensor_4/rgb/compressed), argv[2]에서 네트워크 인터페이스를(기본값 lo) 읽습니다.
  2. 해당 인터페이스로 DDS ChannelFactory를 초기화하고 Subscriber<CompressedImage_>를 생성합니다.
  3. 샘플을 수신할 때마다 카운터, 마지막 바이트 크기, 이미지 포맷을 갱신합니다.
  4. 1초마다 경과 시간, 총 샘플 수, 1초 수신율, 마지막 프레임 크기, 포맷을 출력합니다.
  5. Ctrl+C(SIGINT/SIGTERM) 시 총 샘플 수를 출력하고 정상 종료합니다.

발행은 하지 않으므로 실제 로봇이나 시뮬레이터와 함께 실행해도 안전합니다.

사전 요구사항 ​

  • RBQ SDK 빌드 및 설치 완료 — C++ SDK 개요 참조.
  • 압축 이미지 토픽을 발행하는 측이 실행 중이어야 합니다 — 로봇 비전 스택 또는 비전 포함 MuJoCo 시뮬레이터(bash scripts/sim.bash --vision).

빌드 ​

rbq_sdk/cpp/example/에서:

bash
bash scripts/setup.bash
bash scripts/build.bash

바이너리 위치: bin/rbq_image_echo

실행 ​

두 인자 모두 선택입니다:

bash
./bin/rbq_image_echo [topic] [interface]
인자의미기본값
topic구독할 압축 이미지 토픽rt/rbq/vision/sensor_4/rgb/compressed
interfaceCycloneDDS 인터페이스lo

MuJoCo 시뮬레이터에서 ​

시뮬레이터는 lo 로 발행하며, 이 예제의 기본값과 같으므로 인자가 필요 없습니다:

bash
bash scripts/sim.bash --vision     # 한 터미널에서
./bin/rbq_image_echo               # 다른 터미널에서

카메라는 로봇·심 모두 숫자 id를 씁니다. sensor_4가 전방, sensor_5가 후방 카메라이고, sensor_0–sensor_3은 depth와 ir만 발행합니다:

bash
./bin/rbq_image_echo rt/rbq/vision/sensor_4/rgb/compressed   # 전방 카메라
./bin/rbq_image_echo rt/rbq/vision/sensor_5/rgb/compressed   # 후방 카메라

다른 호스트에서 실제 로봇에 붙을 때 ​

로봇에 닿는 인터페이스를 두 번째 인자로 넘기세요:

bash
./bin/rbq_image_echo rt/rbq/vision/sensor_4/rgb/compressed enp3s0

로봇 쪽 비전 스택도 본인 PC에서 도달 가능한 인터페이스로 떠 있어야 합니다 — 로봇에서 bash scripts/RBQ.bash -i <nic> 로 실행하세요. 양쪽이 같은 인터페이스를 써야 하며, 다르면 rate=0 Hz가 됩니다.

lo 로 실행하면 CycloneDDS가 selected interface "lo" is not multicast-capable: disabling multicast 를 남깁니다. 정상이며 무해합니다 — 같은 호스트 안의 프로세스 사이에서는 디스커버리가 그대로 동작하고, 시뮬레이터가 정확히 그 경우입니다. 호스트를 넘어가는 구성에서만 실제 NIC가 필요합니다.

출력 예시 ​

MuJoCo 시뮬레이터(sim.bash --vision)에서 sensor_4(전방 카메라)를 구독한 결과:

[rbq_image_echo] subscribed to 'rt/rbq/vision/sensor_4/rgb/compressed' on interface 'lo'
[rbq_image_echo] waiting for samples (Ctrl+C to exit)...
[rbq_image_echo] 1.0s  total=15  rate=15 Hz  last=13053 bytes  fmt='jpeg'
[rbq_image_echo] 2.0s  total=29  rate=14 Hz  last=13080 bytes  fmt='jpeg'
[rbq_image_echo] 3.0s  total=44  rate=15 Hz  last=13067 bytes  fmt='jpeg'
[rbq_image_echo] exiting, total samples = 44

수신율이 일정하고 바이트 크기가 0이 아니며 fmt='jpeg'이면 스트림이 정상입니다. rate=0 Hz이면 해당 토픽/인터페이스에서 발행 측을 찾지 못한 것이니 토픽 이름과 DDS 인터페이스를 확인하세요.

This user manual is intended for RBQ users.