Skip to content

High Level Command — C++ 예제

소스: rbq_sdk/cpp/example/src/rbq_high_level.cpp

DDS를 통해 HighLevelCommand 메시지를 50 Hz로 발행합니다.
보행 선택은 터미널 입력으로, 속도 setpoint는 조이스틱으로 제어합니다.

개요

세 가지 동시 실행 구성요소:

구성요소주기역할
제어 루프 스레드50 Hz현재 보행 + 속도로 HighLevelCommand 발행
조이스틱 루프 스레드100 Hz조이스틱 폴링 후 속도 전역 변수 업데이트
메인 스레드 (터미널)블로킹stdin에서 보행 이름/ID를 읽어 목표 보행 업데이트

시작 시 제어 루프가 switchControlMode = true를 한 번 발행하여 로봇 스택에서 EXT_JOY 모드를 활성화합니다 — 이 토픽이 발행되지 않으면 HighLevelCommand 토픽은 무시됩니다.

사전 요구사항

  • RBQ SDK 빌드 및 설치 완료 — C++ SDK 개요 참조.
  • Linux 조이스틱 장치 /dev/input/js* (조이스틱이 필수).
  • 로봇 스택이 실행 중(시뮬레이션 또는 하드웨어).

빌드

bash
bash scripts/setup.bash
bash scripts/build.bash

바이너리: bin/rbq_high_level

실행

bash
./bin/rbq_high_level <networkInterface> [joystickPath]
# 예:
./bin/rbq_high_level eth0
./bin/rbq_high_level eth0 /dev/input/js1

조이스틱 자동 감지는 Sport Client (조이스틱) 예제와 동일한 로직을 따릅니다.

터미널 명령

> 프롬프트에서 보행 이름 또는 숫자 보행 ID를 입력합니다.

list              # 사용 가능한 모든 보행 출력
standing          # STANDING으로 전환 (이름으로)
3                 # TROTTING으로 전환 (ID로)
rl_trot           # RL_TROT으로 전환 (이름으로)

사용 가능한 보행

이름ID설명
sitting0지면에 앉기
standing1서기 자세 (시작 시 기본값)
aiming2조준 자세
trotting3MPC 트롯 보행
trot_stairs4계단 적응형 트롯
waving5느린 걷기 보행
trot_running6고속 트롯
docking10자동 도킹 시퀀스
rl_trot30RL 기반 트롯
rl_front_walk31RL 전진 보행
rl_left_walk33RL 좌측 이동 보행
rl_right_walk34RL 우측 이동 보행
rl_bound35RL 바운드 보행
rl_pace36RL 페이스 보행
rl_pronk37RL 프롱크 보행
rl_3leg_hr38RL 3다리 (후우측 들기)
rl_3leg_hl39RL 3다리 (후좌측 들기)
rl_3leg_fl41RL 3다리 (전좌측 들기)
rl_trot_vision42RL 비전 트롯
rl_trot_run45RL 트롯 런
rl_silent46RL 사일런트 보행
rl_stairs47RL 계단 오르기
rl_walk_vision48RL 워크 비전 (지형 height 피드백, height/pitch 조정 가능)
rl_walk49RL 워크 (height/pitch 조정 가능)
rl_end80RL 종료 상태

조이스틱 속도 제어

매핑최대값
왼쪽 스틱 Y (앞으로)vel_x±1.2 m/s
왼쪽 스틱 X (왼쪽으로)vel_y±0.5 m/s
오른쪽 스틱 X (요)omega_z±60 deg/s

데드존: 0.12 적용 후 스케일링.

omega_z 단위 주의: HighLevelCommand.omega_z도/초(deg/s) 단위로 전송됩니다.
로봇 내부 QuadWalk가 D2R을 곱해 rad/s로 변환합니다 (예: 60 deg/s ≈ 1.05 rad/s 요 속도).

사용되는 DDS 토픽

방향토픽메시지 타입
발행rt/rbq/cmd/highLevelrbq_msgs::msg::dds_::HighLevelCommand_
발행rt/rbq/cmd/switchControlModestd_msgs::msg::dds_::Bool_

주요 구현 사항

  • gait_transition 플래그: 보행 변경 직후 단 한 틱에만 true로 설정되며, std::atomic<bool>::exchange()로 정확히 한 번만 소비됩니다. QuadWalk gaitTimer가 연속으로 트리거되는 것을 방지합니다.
  • switchControlMode: 시작 시 200 ms 딜레이 후 한 번 발행됩니다 (DDS 구독자 연결 대기). 발행하지 않으면 로봇은 조이스틱 모드를 유지하고 HighLevelCommand를 무시합니다.
  • 타이밍: 제어 루프는 clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, ...)을 사용해 정밀한 20 ms 스케줄링을 구현합니다.

관련 문서

This user manual is intended for RBQ users.