Skip to content

High Level Command — Python 예제

소스: rbq_sdk/python/example/sport/rbq_high_level.py

rbq_high_level.cpp의 Python 포팅 버전.
DDS를 통해 HighLevelCommand50 Hz로 발행하고, 터미널에서 보행을 선택하며, 조이스틱으로 속도 setpoint를 제어합니다.

개요

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

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

시작 시 제어 루프가 switchControlMode = true를 한 번 발행(200 ms 대기 후)하여 로봇 스택의 EXT_JOY 모드를 활성화합니다. 이 토픽 없이는 HighLevelCommand가 무시됩니다.

사전 요구사항

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

설치 및 실행

bash
cd RBQ/rbq_sdk/python
pip install -e .
bash
cd RBQ/rbq_sdk/python/example/high_level
python3 rbq_high_level.py <networkInterface> [joystickPath]
# 예시
python3 rbq_high_level.py eth0
python3 rbq_high_level.py eth0 /dev/input/js1

조이스틱 자동 감지: 이름에 "Logitech", "gamepad", "Xbox", "wireless"가 포함된 장치를 우선 선택하고, 없으면 첫 번째 js* 노드를 사용합니다.
오버라이드: JOY=/dev/input/js1 python3 rbq_high_level.py eth0

터미널 명령

list            # 전체 보행 목록 출력
standing        # 이름으로 전환
3               # ID로 전환 (trotting)
rl_trot         # RL 트롯으로 전환

전체 보행 목록

이름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 단위: deg/s 단위로 전송 — QuadWalk가 내부에서 D2R을 곱합니다.

DDS 토픽

방향토픽메시지 타입
발행rt/rbq/cmd/highLevelHighLevelCommand_
발행rt/rbq/cmd/switchControlModeBool_

주요 구현 참고

  • gait_transition 플래그: threading.Lock으로 보호되는 consume_gait_pending() 메서드가 보행 변경 시 플래그를 정확히 한 번만 소비합니다 — C++의 std::atomic::exchange() 패턴과 동일.
  • switchControlMode: 시작 후 200 ms 대기 후 한 번 발행. 미발행 시 로봇이 HighLevelCommand를 무시.
  • 타이밍: time.monotonic()time.sleep()으로 20 ms 주기를 유지. 지연 발생 시 next_tick을 현재 시간으로 재설정.
  • RT 스레드 불필요: C++ 버전과 달리 실시간 스레드를 사용하지 않아 sudo가 필요하지 않습니다.

참고

This user manual is intended for RBQ users.