Skip to content

하단 LED — Python 예제 ​

소스: rbq_sdk/python/example/sport/rbq_led_bottom.py

C++ 하단 LED의 Python 포팅입니다. rt/rbq/cmd/led_bottom에 LedBottom_ 메시지를 한 번 발행해 몸통 아래의 상태 LED 두 개를 설정하고, 로봇이 rt/rbq/led_bottom으로 1 Hz 로 알려 주는 LedBottomState_를 출력합니다.

동작 방식 ​

  1. 명령행에서 interface와 선택 인자 side mode r g b on_ms off_ms count를 읽습니다.
  2. ChannelFactoryInitialize(0, interface) 호출 후 ChannelPublisher("rt/rbq/cmd/led_bottom", LedBottom_)와, 마지막 상태를 간직하는 핸들러를 단 ChannelSubscriber("rt/rbq/led_bottom", LedBottomState_)를 만듭니다.
  3. DDS 디스커버리를 ~0.5 초 기다린 뒤 LedBottom_ 메시지를 채워 한 번 발행합니다.
  4. IF 보드가 설정을 적용하고 알려 줄 때까지 ~2.5 초 기다린 뒤, 마지막으로 받은 LedBottomState_를 출력하고 종료합니다.

로봇의 Network 프로세스가 범위를 검사하고(PUT /api/led/bottom과 같은 검사), Motion 이 CAN FD 로 IF 보드에 보내며, 보드가 1 초마다 알려 주는 값이 rt/rbq/led_bottom으로 돌아옵니다.

사전 요구사항 ​

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

실행 ​

bash
cd RBQ/rbq_sdk/python/example/sport
python3 rbq_led_bottom.py [networkInterface] [side] [mode] [r] [g] [b] [on_ms] [off_ms] [count]

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

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

# 양쪽 끄기:
python3 rbq_led_bottom.py eth0 both off

인자는 모두 위치 인자이므로 인터페이스를 첫 인자로 넘겨야 합니다.

인자와 기본값은 C++ 버전과 같습니다. 로봇에 닿는 인터페이스를 쓰세요 — 로봇 PC 에서 돌리면 lo, 다른 호스트에서는 본인 NIC.

출력 예시 ​

[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가 붙습니다.

This user manual is intended for RBQ users.