Skip to content

RBQ SDK — Python 개요 ​

RBQ Python SDK (rbq_sdk/python/)는 C++ SDK와 동일한 CycloneDDS 인프라를 Python으로 래핑한 패키지(rbq_sdk_py)입니다.
SportClient API와 DDS 채널 유틸리티를 순수 Python으로 제공합니다.

패키지 구조 ​

rbq_sdk/python/
├── rbq_sdk_py/
│   ├── core/
│   │   └── channel.py          # ChannelFactoryInitialize, ChannelPublisher, ChannelSubscriber
│   └── sport/
│       ├── sport_client.py     # SportClient — Network 서비스 Python 바인딩
│       └── sport_api.py        # ID_DEFAULT_MODE, ID_RUNNING_MODE, ID_CLIMB_MODE 상수
└── example/
    ├── sport/
    │   ├── rbq_sport_client.py      # SportClient 명령 터미널 CLI
    │   ├── rbq_sport_client_joy.py  # 조이스틱 기반 SportClient
    │   ├── rbq_high_level.py        # 고수준 명령 예제
    │   ├── rbq_low_level.py         # 저수준 명령 예제
    │   └── rbq_target_go.py         # 목표 지점 이동 예제
    ├── front_camera/
    │   ├── capture_image.py         # 전방 카메라 한 프레임을 img.jpg로 저장
    │   └── camera_opencv.py         # 전방 카메라 스트림을 OpenCV로 표시
    └── idl/
        └── _rbq_idl.py             # 생성된 Python IDL 바인딩

예제 안내: rbq_high_level.py, rbq_low_level.py, rbq_target_go.py, rbq_sport_client.py, rbq_sport_client_joy.py 예제는 모두 example/sport/에서 사용할 수 있습니다.

요구사항 ​

항목최소 버전
OSUbuntu 22.04
Python3.8 이상
CycloneDDS Python 바인딩rbq_sdk/python/pyproject.toml로 설치

설치 ​

bash
cd rbq_sdk/python
pip install -e .

DDS 초기화 ​

python
from rbq_sdk_py.core.channel import ChannelFactoryInitialize

# 인터페이스 이름 — 시뮬레이터와 로봇 내부 스택은 "lo",
# 다른 호스트에서 로봇에 붙을 때는 "eth0" 같은 NIC 이름
ChannelFactoryInitialize(0, nic)

인터페이스를 None으로 전달하거나 두 번째 인수를 생략하면 CycloneDDS가 자동 감지합니다. 동봉된 예제들은 자동 감지 대신 기본값으로 "lo" 를 넘기므로, 인자 없이도 시뮬레이터와 바로 맞물립니다.

SportClient ​

python
from rbq_sdk_py.sport.sport_client import SportClient

sport = SportClient()
sport.Init()

sport.BalanceStand()
sport.Move(vx=0.5, vy=0.0, vyaw=0.0)
sport.SwitchGait(ID_DEFAULT_MODE)
sport.Damp()

메시지 발행 (Publishing) ​

python
from rbq_sdk_py.core.channel import ChannelPublisher
from _rbq_idl import HighLevelCommand_, Bool_

pub = ChannelPublisher("rt/rbq/cmd/high_level", HighLevelCommand_)
pub.Init()

msg = HighLevelCommand_()
msg.gait_state = 1
msg.vel_x = 0.5
pub.Write(msg)

메시지 구독 (Subscribing) ​

python
from rbq_sdk_py.core.channel import ChannelSubscriber
from _rbq_idl import Imu_

def on_imu(sample):
    print(sample.angular_velocity.x)

sub = ChannelSubscriber("rt/rbq/imu", Imu_)
sub.Init(handler=on_imu, queueLen=4)

조이스틱 (Linux /dev/input/js*) ​

Python 예제는 외부 의존성 없이 Linux 조이스틱 이벤트를 직접 읽는 자체 Joy 클래스를 포함합니다:

python
joy = Joy("/dev/input/js0")
joy.open()

while True:
    joy.poll()
    lx = deadzone(joy.ax[AXIS_LX], DEADZONE)
    ly = deadzone(joy.ax[AXIS_LY], DEADZONE)
    joy.end_frame()
    time.sleep(0.01)

pick_joy_path(argv) 헬퍼는 연결된 게임패드를 자동 감지합니다 (Logitech/Xbox/Wireless 이름 우선, 이후 첫 번째 /dev/input/js* 노드 사용).

예제 프로그램 ​

예제설명
Sport Client (Python)SportClient 명령 터미널 CLI
Sport Client 조이스틱 (Python)게임패드 기반 SportClient — 전체 버튼 매핑
High Level Command (Python)50 Hz HighLevelCommand 발행 + 조이스틱 속도 제어
Low Level (RL 정책) (Python)관절 수준 제어 + ONNX 정책 실행기
Target Go (Python)목표 자세로 걸어가는 일회성 명령 발행

관련 문서 ​

This user manual is intended for RBQ users.