RBQ SDK — C/C++ 개요
RBQ C++ SDK (rbq_sdk/cpp/)는 Eclipse Cyclone DDS 기반의 라이브러리로, 외부 애플리케이션이 네트워크를 통해 로봇 소프트웨어 스택과 통신할 수 있게 해줍니다.
DDS 참여자(participant), 토픽, IDL 메시지 타입을 래핑하며, 저수준 관절 제어, RL 정책 실행, 타이밍 유틸리티, 선택적 실시간(RT) 스레드를 위한 헬퍼 클래스를 제공합니다.
SDK 구조
| 영역 | 내용 |
|---|---|
| DDS I/O | rbq_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 선택) |
요구사항
| 항목 | 최소 버전 |
|---|---|
| OS | Ubuntu 22.04 (x86_64) |
| CMake | ≥ 3.22 |
| C++ 표준 | C++17 |
| CycloneDDS | build_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/highLevel | HighLevelCommand_ | 보행 + 속도 명령 |
| 발행 | rt/rbq/cmd/switchControlMode | Bool_ | EXT_JOY 모드 활성화/비활성화 |
| 발행 | rt/rbq/ref/leg_joint/owner_20 | MotionRef_ | 관절별 위치/게인 레퍼런스 |
| 발행 | rt/rbq/cmd/motion/joint_owner/_20 | JointOwnershipCmd_ | 관절 소유권 요청 |
| 구독 | rt/rbq/info/imu | Imu_ | IMU 각속도 + 자세(orientation) |
| 구독 | rt/rbq/info/leg_joint | LegJointInfo_ | 다리 관절 위치 및 속도 (12개) |
| 구독 | rt/rbq/ref/leg_joint/final | MotionRef_ | 최종 블렌딩된 레퍼런스 (읽기 전용) |
| 구독 | rt/rbq/cmd/joy/final | Joy_ | 스택이 전달하는 조이스틱 축 값 |
예제 프로그램
| 예제 | 설명 |
|---|---|
| Sport Client | SportClient API 명령 테스트용 터미널 CLI |
| Sport Client (조이스틱) | 게임패드 + SportClient — 전체 버튼 매핑 |
| High Level Command | 50 Hz HighLevelCommand 발행 + 조이스틱 속도 제어 |
| Low Level (RL 정책) | 관절 수준 제어 + ONNX 정책 실행기 |
