Claude에서 열기ChatGPT에서 열기
https://rainbowrobotics.github.io/RBQ/nightly/llms-full.txt 는 Rainbow Robotics RBQ 4족 로봇 매뉴얼 전문입니다. 읽고 이 문서를 근거로 한국어로 답변해 주세요.
AI 답변은 부정확할 수 있습니다. 안전·정비 항목은 매뉴얼 원문을 확인하세요.
한국어
https://rainbowrobotics.github.io/RBQ/nightly/llms-full.txt 는 Rainbow Robotics RBQ 4족 로봇 매뉴얼 전문입니다. 읽고 이 문서를 근거로 한국어로 답변해 주세요.
AI 답변은 부정확할 수 있습니다. 안전·정비 항목은 매뉴얼 원문을 확인하세요.
한국어
소스: rbq_sdk/python/example/sport/rbq_low_level.py
rbq_low_level.cpp의 Python 포팅 버전.
IMU, 조이스틱, 관절 피드백 토픽을 구독하고, 관절 위치 레퍼런스를 발행하며, 학습된 보행 정책(ONNX)을 100 Hz로 실행합니다.
백그라운드 스레드에서 단일 500 Hz 제어 루프 (2 ms 주기)가 실행됩니다. 키보드 기반 상태 머신이 활성 모드를 제어합니다:
| 상태 | 키 | 제어 루프 동작 |
|---|---|---|
| Idle | — | rt/rbq/ref/motion/_0을 구독하여 그대로 재발행 (pass-through) |
| Motion | x / z | 코사인 보간으로 관절을 ready 또는 ground 자세로 이동 |
| Control | c | ONNX 정책을 100 Hz로 실행 (5틱 중 1회), MotionRef_ 발행 |
rbq_sdk_py 설치 완료 — Python SDK 개요 참조.pip install onnxruntimeinfo.json과 policy.onnx가 있는 정책 디렉토리.cd RBQ/rbq_sdk/python
pip install -e .
pip install onnxruntimecd RBQ/rbq_sdk/python/example/sport
# networkInterface는 선택 — 기본값은 lo
python3 rbq_low_level.py -p <policyDir> [networkInterface]
# 예시
python3 rbq_low_level.py -p ../../../../rbq_simulator/rbq_gym/policy/rbq10/
python3 rbq_low_level.py -p ../../../../rbq_simulator/rbq_gym/policy/rbq10/ eth0C++ 버전과 달리
sudo가 필요하지 않습니다 — Python은 실시간 스레드를 사용하지 않습니다.
RBQ/ 루트에서:bash scripts/sim.bash --no-guiSTAND 순서로 누릅니다. 제어 홈 참고.lo):python3 rbq_low_level.py -p ../../../../rbq_simulator/rbq_gym/policy/rbq10/| 키 | 동작 |
|---|---|
q | 종료 |
z | ground 자세로 이동 (folding → ground, 약 4.8초) |
x | ready 자세로 이동 (ground → folding → ready, 약 2.8~5.6초) |
c | Walk / Control 모드 시작 (-p에서 정책 로드) |
키보드는 비정규 모드(non-canonical, no-echo)로 읽힘 — Enter 없이 즉시 반응.
-p 디렉토리에 다음 파일이 있어야 합니다:
| 파일 | 역할 |
|---|---|
info.json | 정책 하이퍼파라미터 (run_name, policy_dt, action_scale, 강성/감쇠, 관측/행동 크기, 정규화 스케일, 기본 관절 각도, 명령 범위) |
policy.onnx | 학습 프레임워크에서 내보낸 ONNX 모델 |
지원 정책 이름 (info.json의 run_name):
| 이름 | 관측 벡터 | 비고 |
|---|---|---|
rbq10 | gyro, proj_grav, command, dof_pos, dof_vel, action | 단일 프레임 |
rbq10_trot | gyro, proj_grav, command, 4×dof_pos history (0,2,4,6), 4×dof_vel history, action×2, added_mass | 7프레임 히스토리 |
rbq10_trot_run | rbq10_trot과 동일 | 고속 런 변형 |
정책 이름은
info.json의config_info.run_name필드에서 가져옵니다.
| 방향 | 토픽 | 타입 | 설명 |
|---|---|---|---|
| 구독 | rt/rbq/joy | Joy_ | 조이스틱 축 (속도 명령) |
| 구독 | rt/rbq/imu | Imu_ | 각속도 + 방향 쿼터니언 |
| 구독 | rt/rbq/leg_joint | LegJointInfo_ | 관절 위치 및 속도 (12개) |
| 구독 | rt/rbq/ref/motion/_0 | MotionRef_ | 최종 블렌딩된 레퍼런스 (Idle 상태용) |
| 발행 | rt/rbq/ref/motion/_20 | MotionRef_ | PD 게인이 포함된 관절 위치 레퍼런스 |
| 발행 | rt/rbq/cmd/motion/owner/_20 | JointOwnershipCmd_ | 12개 관절 소유권 요청 |
인덱스 0~11:
HR: HRR(0), HRP(1), HRK(2) → HL: HLR(3), HLP(4), HLK(5) → FR: FRR(6), FRP(7), FRK(8) → FL: FLR(9), FLP(10), FLK(11)
time.sleep()으로 2 ms 주기를 유지합니다. C++ RT 스레드보다 타이밍 지터가 큽니다. 시뮬레이션과 테스트에는 적합하지만, 고동적 실로봇 운용에는 제약이 있을 수 있습니다.SharedState의 msg_imu, msg_leg, msg_joy는 기본값으로 초기화되어 있어, DDS 첫 샘플이 도착하기 전에도 정책이 즉시 실행됩니다. 아직 수신되지 않은 구독자가 있으면 0.5 Hz로 제한된 경고를 출력합니다.info.json의 policy_dt와 일치.JointOwnershipCmd_를 한 번 발행하여 12개 관절 전체를 우선순위 20으로 요청.go_to_motion_ready()는 4개의 hip-pitch 각도가 60°를 초과하면 로봇이 접힌 상태로 판단하여 folding 단계를 먼저 실행.| 문제 | 가능한 원인 |
|---|---|
| 동작 없음 / 토픽 수신 없음 | 스택 미실행 또는 잘못된 네트워크 인터페이스 |
Policy, PolicyParams not loaded | -p 경로 오류, info.json / policy.onnx 누락 |
NaN or Inf in output data | 비정상 관측값; IMU 및 관절 토픽 확인 |
| 타이밍 경고 로그 | 시스템 부하 과다; 다른 프로세스 종료 |