Skip to content

RBQ SDK — C/C++ 개요

RBQ C++ SDK (rbq_sdk/cpp/)는 Eclipse Cyclone DDS 기반의 라이브러리로, 외부 애플리케이션이 네트워크를 통해 로봇 소프트웨어 스택과 통신할 수 있게 해줍니다.
DDS 참여자(participant), 토픽, IDL 메시지 타입을 래핑하며, 저수준 관절 제어, RL 정책 실행, 타이밍 유틸리티, 선택적 실시간(RT) 스레드를 위한 헬퍼 클래스를 제공합니다.

SDK 구조

영역내용
DDS I/Orbq_sdk/cpp/rbq_sdk_cpp/include/dds/Publisher.hpp, Subscriber.hpp — CycloneDDS-CXX 타입 리더/라이터 템플릿
고수준 클라이언트rbq_sdk/cpp/rbq_sdk_cpp/include/dds/SportClient.hpp — Network 서비스용 RPC 래퍼 (Damp, Move, SwitchGait 등)
IDL 메시지rbq_sdk/cpp/rbq_sdk_cpp/idl/rbq/, idl/ros2/, idl/go2/ — 모든 토픽에서 사용되는 C++ 타입
제어 헬퍼JointControl, Policy/PolicyParams (ONNX), Filter, Timer, Thread (RT 선택)

요구사항

항목최소 버전
OSUbuntu 22.04 (x86_64)
CMake≥ 3.22
C++ 표준C++17
CycloneDDSbuild_dds.bash로 시스템에 다운로드·설치 (최초 1회, 아래 부트스트랩 참고)

빌드 및 설치

RBQ 저장소 루트의 rbq_sdk/cpp/rbq_sdk_cpp/ 디렉토리에서:

bash
# 1. 번들된 CycloneDDS 빌드 (최초 1회)
sudo bash scripts/build_dds.bash

# 2. 설정, 빌드, 설치
sudo bash scripts/build.bash

설치가 완료되면 include/rbq_sdk/ 및 생성된 IDL 헤더가 CMAKE_PREFIX_PATH에 추가됩니다.

DDS 초기화

모든 애플리케이션은 publisher 또는 subscriber를 생성하기 전에 ChannelFactory::Instance().Init()을 한 번 호출해야 합니다:

cpp
#include <rbq_sdk/dds/ChannelFactory.hpp>

// argv[1]은 네트워크 인터페이스 이름 (예: "eth0")
rbq_sdk::ChannelFactory::Instance().Init(0, argv[1]);

메시지 발행 (Publishing)

cpp
#include <rbq_sdk/dds/Publisher.hpp>
#include <rbq_sdk/idl/rbq/HighLevelCommand_.hpp>

rbq_sdk::Publisher<rbq_msgs::msg::dds_::HighLevelCommand_> pub("rt/rbq/cmd/highLevel");

rbq_msgs::msg::dds_::HighLevelCommand_ msg;
msg.gait_state()      = 1;    // STANDING
msg.gait_transition() = true;
msg.vel_x()           = 0.5f;
pub.write(msg);

메시지 구독 (Subscribing)

cpp
#include <rbq_sdk/dds/Subscriber.hpp>
#include <rbq_sdk/idl/ros2/Imu_.hpp>

sensor_msgs::msg::dds_::Imu_ imuMsg;
rbq_sdk::Subscriber<sensor_msgs::msg::dds_::Imu_> sub(&imuMsg, "rt/rbq/info/imu");

// 새 샘플이 도착할 때마다 imuMsg가 업데이트됩니다.

주요 DDS 토픽

방향토픽메시지 타입설명
발행rt/rbq/cmd/highLevelHighLevelCommand_보행 + 속도 명령
발행rt/rbq/cmd/switchControlModeBool_EXT_JOY 모드 활성화/비활성화
발행rt/rbq/ref/leg_joint/owner_20MotionRef_관절별 위치/게인 레퍼런스
발행rt/rbq/cmd/motion/joint_owner/_20JointOwnershipCmd_관절 소유권 요청
구독rt/rbq/info/imuImu_IMU 각속도 + 자세(orientation)
구독rt/rbq/info/leg_jointLegJointInfo_다리 관절 위치 및 속도 (12개)
구독rt/rbq/ref/leg_joint/finalMotionRef_최종 블렌딩된 레퍼런스 (읽기 전용)
구독rt/rbq/cmd/joy/finalJoy_스택이 전달하는 조이스틱 축 값

예제 프로그램

예제설명
Sport ClientSportClient API 명령 테스트용 터미널 CLI
Sport Client (조이스틱)게임패드 + SportClient — 전체 버튼 매핑
High Level Command50 Hz HighLevelCommand 발행 + 조이스틱 속도 제어
Low Level (RL 정책)관절 수준 제어 + ONNX 정책 실행기

관련 문서

This user manual is intended for RBQ users.