Target Go — C++ 예제
소스: rbq_sdk/cpp/example/src/rbq_target_go.cpp
로봇이 목표 자세(x, y, 방향)로 걸어가도록 명령하는 1회성 발행 예제입니다. 선택한 보행(gait)과 접근 모드(mode)로 rt/rbq/cmd/target_go에 TargetGo 메시지를 한 번 발행하고 종료합니다.
동작 방식
- 명령행에서
interface와 선택 인자x y theta gait mode를 읽습니다. - 해당 인터페이스로 DDS
ChannelFactory를 초기화하고rt/rbq/cmd/target_go에Publisher<TargetGo_>를 생성합니다. - DDS 디스커버리를 ~500 ms 기다린 뒤
TargetGo필드를 채워 한 번 발행하고, 보낸 값을 출력한 뒤 종료합니다.
로봇 측 QuadWalk 보행 엔진이 rt/rbq/cmd/target_go를 구독해 실제 보행을 수행합니다.
사전 요구사항
- RBQ SDK 빌드 및 설치 완료 — C++ SDK 개요 참조.
- 로봇 스택이 실행 중(시뮬레이터 또는 하드웨어)이며 동일 DDS 인터페이스에서 접근 가능해야 합니다.
- 먼저 로봇이 전원 ON / 제어 시작(started) 및 기립 상태여야 합니다. 제어 시작 전에 목표를 발행하면 QuadWalk가
Can't Receive cmd: CON_START first로 거부합니다.
빌드
rbq_sdk/cpp/example/에서:
bash
bash scripts/setup.bash
bash scripts/build.bash바이너리 위치: bin/rbq_target_go
실행
bash
./bin/rbq_target_go <interface> [x] [y] [theta_deg] [gait] [mode]
# 시뮬레이터, wave 보행으로 1 m 전진:
./bin/rbq_target_go lo 1.0 0.0 0.0 0 0실행 중인 로봇/심과 같은 인터페이스(lo 또는 본인 NIC)를 쓰세요. 디스커버리가 안 되면 Image Echo 페이지의 인터페이스 설명을 참고하세요(lo는 멀티캐스트 미지원인 경우가 많아 enp3s0 같은 실제 NIC 권장).
인자 (예제 자체 usage 기준):
| 인자 | 의미 | 기본값 |
|---|---|---|
interface | CycloneDDS 인터페이스 (lo 심 / NIC 실로봇) | 필수 |
x | 목표 X (m), 시작 기준 상대 | 1.0 |
y | 목표 Y (m), 시작 기준 상대 | 0.0 |
theta_deg | 목표 방향 | 0.0 |
gait | 0=wave / 1=stairs / 2=RL | 0 |
mode | 0=회전→직진→회전 / 1=회전→대각 / 2=대각→회전 / 3=회전+대각 동시 | 0 |
출력 예시
[rbq_target_go] published: gait=0 mode=0 x=1 y=0 theta=0한 번 발행 후 종료하며, 이후 로봇이 목표로 걸어갑니다. MuJoCo 시뮬레이터로 검증함 — QuadWalk가 rt/rbq/cmd/target_go에서 명령을 수신합니다. 단 제어 시작 전이면 Can't Receive cmd: CON_START first가 출력되니, 목표를 보내기 전에 제어를 시작(전원 ON + 기립)하세요.
