Sport Client — Python 예제
소스: rbq_sdk/python/example/sport/rbq_sport_client.py
C++의 rbq_sport_client를 Python으로 포팅한 버전입니다.
SportClient 명령을 하나씩 로봇에 전송하는 터미널 기반 대화형 애플리케이션으로 50 Hz로 동작합니다.
동작 방식
단일 메인 루프:
stdin에서 한 줄 입력 받기 (list, 명령 이름, 또는 명령 ID).- 활성
TestOption업데이트. - 20 ms 틱마다 해당
SportClient메서드 호출.
사전 요구사항
rbq_sdk_py설치 완료 — Python SDK 개요 참조.- 로봇 스택이 실행 중이며 네트워크 접근 가능.
실행
bash
python3 rbq_sport_client.py <networkInterface>
# 예:
python3 rbq_sport_client.py eth0사용 가능한 명령
프롬프트에서 list를 입력하면 전체 명령 목록이 출력됩니다.
| ID | 이름 | 호출되는 SportClient 메서드 |
|---|---|---|
| 0 | damp | Damp() |
| 1 | balance_stand | BalanceStand() |
| 2 | stop_move | StopMove() |
| 3 | stand_down | StandDown() |
| 4 | recovery_stand | RecoveryStand() |
| 5 | move | Move(0.0, 0.0, 0.5) — 제자리 회전 |
| 6 | switch_gait | SwitchGait(0) |
| 7 | speed_level | SpeedLevel(1) |
| 8 | get_state | GetState() — FSM ID, 이름, 속도 레벨, 자동 복구, 프로세스 상태 출력 |
| 9 | recovery_switch | SetAutoRecovery(0) |
| 10 | body_height | BodyHeight(0.3) |
| 11 | stand_up | StandUp() |
| 12 | enter_leftside_gait | LeftSideGait(1) |
| 13 | exit_leftside_gait | LeftSideGait(0) |
| 14 | enter_handstand | HandStand(1) |
| 15 | exit_handstand | HandStand(0) |
| 16 | front_flip | 이 로봇에서는 지원하지 않음 |
| 17 | back_flip | 이 로봇에서는 지원하지 않음 |
| 18 | pose | 이 로봇에서는 지원하지 않음 |
| 19 | euler | 이 로봇에서는 지원하지 않음 |
주요 구현 사항
SetTimeout(25.0): PythonSportClient는 25초 타임아웃을 명시적으로 설정합니다 —GetState같은 RPC 스타일 호출에 필요합니다.- 50 Hz 페이싱:
time.sleep(max(0.0, next_tick - time.monotonic()))으로 정확한 루프 타이밍 구현. get_state응답:fsm_id,fsm_name,speed_level,auto_recovery_switch,process_state키를 가진 딕셔너리를 반환합니다.
C++ 버전과의 차이점
| 항목 | C++ | Python |
|---|---|---|
| 타임아웃 | 기본값 | SetTimeout(25.0) 명시 |
ConvertToInt 실패 시 | -1 반환 | None 반환 (ID 0과의 오매칭 없음) |
| 터미널 입력 | std::getline 블로킹 | input() 블로킹 |
