Skip to content

하단 LED — C++ 예제 ​

소스: rbq_sdk/cpp/example/src/rbq/rbq_led_bottom.cpp

몸통 아래의 상태 LED 두 개(오른쪽·왼쪽)를 설정하고, 로봇이 알려 주는 상태를 출력하는 예제입니다. rt/rbq/cmd/led_bottom에 LedBottom 메시지를 한 번 발행하고, rt/rbq/led_bottom의 1 Hz LedBottomState를 기다려 출력한 뒤 종료합니다.

동작 방식 ​

  1. 명령행에서 interface와 선택 인자 side mode r g b on_ms off_ms count를 읽습니다.
  2. 해당 인터페이스로 DDS ChannelFactory를 초기화하고 rt/rbq/cmd/led_bottom에 Publisher<LedBottom_>, rt/rbq/led_bottom에 Subscriber<LedBottomState_>를 만듭니다.
  3. DDS 디스커버리를 ~500 ms 기다린 뒤 LedBottom 필드를 채워 한 번 발행합니다.
  4. IF 보드가 설정을 적용하고 알려 줄 때까지 ~2.5 초 기다린 뒤, 마지막으로 받은 LedBottomState를 출력하고 종료합니다.

로봇의 Network 프로세스가 명령을 받아 범위를 검사하고(PUT /api/led/bottom과 같은 검사) Motion 에 넘기면, Motion 이 CAN FD 로 IF 보드에 보냅니다. 설정은 IF 보드가 쥐고 있으며 1 초마다 알려 주고, Network 가 그 값을 rt/rbq/led_bottom으로 다시 발행합니다.

사전 요구사항 ​

  • RBQ SDK 빌드 및 설치 완료 — C++ SDK 개요 참조.
  • 로봇 스택이 실행 중이며 동일 DDS 인터페이스에서 접근 가능해야 합니다.
  • CAN FD 기체. 다른 기체에서는 Network 가 명령을 거부하고 상태도 발행하지 않아 예제가 no state on rt/rbq/led_bottom을 출력합니다. 시뮬레이터에서는 Motion 이 IF 보드 역할을 대신하고 MuJoCo 가 몸통 밑 LED 두 개를 보여 주므로 예제가 그대로 동작합니다.

빌드 ​

rbq_sdk/cpp/example/에서:

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

바이너리 위치: bin/rbq_led_bottom

실행 ​

bash
./bin-x86_64/rbq_led_bottom [interface] [side] [mode] [r] [g] [b] [on_ms] [off_ms] [count]

# 양쪽 파랑으로 켜 두기(기본값) — 인터페이스가 항상 먼저 옵니다:
./bin-x86_64/rbq_led_bottom eth0

# 오른쪽을 빨강으로 0.5 초 켜고 0.5 초 끄기를 계속:
./bin-x86_64/rbq_led_bottom eth0 right blink 255 0 0 500 500 0

# 양쪽 끄기:
./bin-x86_64/rbq_led_bottom eth0 both off

인자는 모두 위치 인자이므로 인터페이스를 첫 인자로 넘겨야 합니다. 로봇에 닿는 인터페이스를 쓰세요 — 로봇 PC 에서 돌리면 lo, 다른 호스트에서는 본인 NIC.

인자의미기본값
interfaceCycloneDDS 인터페이스 (로봇 PC lo / 다른 호스트 NIC)—
sideright / left / both — 고르지 않은 쪽은 그대로both
modeoff / on / blinkon
r g b색, 각 0~2550 0 255
on_ms off_ms깜빡일 때 켜는·끄는 시간, 10~2550 ms(10 ms 단위); blink가 아니면 무시500 500
count깜빡이는 횟수, 0 = 계속; blink가 아니면 무시0

범위 밖 값은 Network 가 거부하고(로봇 로그에 남음) LED 는 그대로 있습니다.

출력 예시 ​

[rbq_led_bottom] published: side=right mode=blink rgb=255,0,0 on_ms=500 off_ms=500 count=0
[rbq_led_bottom] state: age_ms=312 configured=1 if_fw=2026100701
  right: mode=blink rgb=255,0,0 on_ms=500 off_ms=500 count=0 actual=255,0,0 lpf_w=0.6
  left: mode=on rgb=0,0,255 on_ms=0 off_ms=0 count=0 actual=0,0,255 lpf_w=0.4

값은 로봇마다 다릅니다. actual은 IF 보드의 전력 제한을 거친 마지막 출력이고, 최근 1 초 안에 그 제한이 출력을 줄였으면 limited가 붙습니다. configured=0은 IF 보드가 재부팅해 설정이 없다는 뜻이며, Motion 이 마지막 설정을 스스로 다시 보냅니다.

This user manual is intended for RBQ users.