Skip to content

Sport Client (조이스틱) — C++ 예제

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

게임패드 / 조이스틱을 사용해 SportClient API로 로봇을 제어합니다.
아날로그 스틱은 연속적인 Move 속도 명령을 전송하고, 버튼은 Damp, StandUp/Down, 보행 전환, 특수 동작 등의 이산 명령을 트리거합니다.

동작 방식

두 개의 스레드가 동시에 실행됩니다:

스레드주기역할
메인 스레드 (조이스틱)~100 Hz조이스틱 이벤트 읽기, 이산 SportCmd를 큐에 추가, 속도 setpoint 업데이트
제어 루프 스레드10 Hz명령 큐를 소비하고, 비어있으면 sport.Move(vx, vy, vyaw) 호출

제어 루프는 sport.SetNoReply(true) — fire-and-forget 방식으로 RPC 응답을 기다리지 않습니다.

사전 요구사항

  • RBQ SDK 빌드 및 설치 완료 — C++ SDK 개요 참조.
  • Linux 조이스틱 장치 (예: Logitech F710) /dev/input/js*.
  • 로봇 스택이 실행 중이며 네트워크 접근 가능.

빌드

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

바이너리: bin/rbq_sport_client_joy

실행

bash
./bin/rbq_sport_client_joy <networkInterface> [joystickPath]
# 조이스틱 자동 감지:
./bin/rbq_sport_client_joy eth0
# 장치 직접 지정:
./bin/rbq_sport_client_joy eth0 /dev/input/js1

조이스틱 경로가 없으면 Linux js* 장치를 자동 감지합니다 (Logitech/Xbox/Wireless 이름 우선, 이후 첫 번째 js* 노드 사용).
JOY 환경 변수로도 경로를 지정할 수 있습니다.

게임패드 버튼 매핑

Logitech F710 / Xbox 레이아웃 (Linux 조이스틱 드라이버 기준).

버튼 조합 (chord) — 우선 검사

누르는 버튼로봇 동작
L2 + BDamp — 고댐핑 비상 정지
L2 + A (첫 번째 누름)StandUp — 서기 자세로 관절 고정
L2 + A (두 번째 누름)StandDown — 엎드리기
STARTDefaultMode — 기본 보행 해제
L2 + STARTRunningMode — 고속 보행
L2 + XRecoveryStand — 넘어짐 후 일어서기
R1 + XClimb — 계단 오르기 보행
L1 + X이 로봇에서는 지원하지 않음
L1 + Y이 로봇에서는 지원하지 않음
BACKStopMove — 제자리 정지

더블 클릭 매핑

두 번째 누름이 첫 번째 누름으로부터 400 ms 이내에 발생해야 동작합니다.

버튼동작
X 더블 클릭LeftSideGait
Y 더블 클릭RightSideGait
R1 더블 클릭이 로봇에서는 지원하지 않음
R2 (트리거) 더블 클릭이 로봇에서는 지원하지 않음

아날로그 스틱 속도 제어 (연속)

매핑최대값
왼쪽 스틱 Y (앞으로)vel_x (전진)±0.55 m/s
왼쪽 스틱 X (왼쪽으로)vel_y (횡방향)±0.35 m/s
오른쪽 스틱 Xvyaw (요 속도)±1.0 rad/s

주요 구현 사항

  • lock_toggle_to_prone: L2+A는 불리언 토글로 StandUp / StandDown을 번갈아 수행합니다 (A2 로봇 기본 컨트롤러 동작과 동일).
  • 더블 클릭 감지: consume_double() 람다가 마지막 엣지 타임스탬프를 추적하고, kDoubleClickWindow(400ms) 내에 두 번째 엣지가 도착하면 동작을 실행하고 카운터를 초기화합니다.
  • R2를 가상 버튼으로 처리: RT 트리거(AXIS_RT)는 축 값을 0과 비교하여 버튼처럼 처리합니다 (유휴 = −1, 완전 누름 = +1).
  • 에러 누적 로깅: 연속 에러가 50번마다 한 번 출력되어 로그 스팸을 방지합니다.

관련 문서

This user manual is intended for RBQ users.