Skip to content

휠 제어 — Python 예제 ​

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

C++ 휠 제어의 Python 포팅입니다. 바퀴 관절의 소유권만 가져온 뒤 앱 슬롯 21 로 rt/rbq/ref/motion/_21에 MotionRef_를 발행해 **RBQ 휠 기체(RBQ-W)**의 바퀴 네 개를 돌리고, 끝나면 놓아 줍니다.

동작 방식 ​

  1. 명령행에서 interface와 선택 인자 torque kd seconds를 읽습니다.
  2. ChannelFactoryInitialize(0, interface) 호출 후 ChannelPublisher("rt/rbq/ref/motion/_21", MotionRef_), ChannelPublisher("rt/rbq/cmd/motion/owner/_21", JointOwnershipCmd_)와, 로봇이 적용하는 레퍼런스를 받는 ChannelSubscriber("rt/rbq/ref/motion/_0", MotionRef_)를 만듭니다.
  3. DDS 디스커버리를 ~0.5 초 기다린 뒤 토크 0 레퍼런스를 먼저 보내고, whl_joint = [True] * 4인 JointOwnershipCmd_를 보냅니다.
  4. whl_joint를 500 Hz 로 발행합니다 — kp = 0, 주어진 kd, 0.5 초 동안 0 에서 올라가는 토크. 0.5 초마다 적용된 바퀴 레퍼런스를 출력합니다.
  5. 시간이 끝나면(또는 Ctrl+C) 토크를 0 으로 0.5 초 보낸 뒤 kp = kd = torque = 0을 보내고 종료합니다.

떠 있는 바퀴는 속도 = torque / kd [rad/s]에 수렴합니다. 게인은 CAN FD 기체든 일반 CAN 기체든 물리값으로 보내고, Network 가 보드에 맞게 바꿉니다. 슬롯 20 을 쓰는 Low Level (Python)과 함께 돌릴 수 있습니다.

WARNING

바닥에 있으면 바퀴가 도는 동안 로봇이 굴러갑니다. 공간을 확보하고, 작은 토크부터 시작하고, 원격 비상정지를 손에 두세요.

사전 요구사항 ​

  • rbq_sdk_py import 가능 — Python SDK 개요 참조.
  • 로봇 스택이 실행 중이며 동일 DDS 인터페이스 사용.
  • 서 있는 RBQ 휠 기체(RBQ-W). 시뮬레이터에서는 Motion 과 MuJoCo 를 --wheel로 띄웁니다(bash scripts/sim.bash --robot wheel).

실행 ​

bash
cd RBQ/rbq_sdk/python/example/sport
python3 rbq_wheel.py [networkInterface] [torque] [kd] [seconds]

# 앞으로 2 rad/s, 3 초(기본값) — 인터페이스가 항상 먼저 옵니다:
python3 rbq_wheel.py eth0

# 뒤로 1 rad/s, 5 초:
python3 rbq_wheel.py eth0 -0.5 0.5 5

인자는 모두 위치 인자이므로 인터페이스를 첫 인자로 넘겨야 합니다.

인자·기본값과 예제가 끝난 뒤의 동작은 C++ 버전과 같습니다. 로봇에 닿는 인터페이스를 쓰세요 — 로봇 PC 에서 돌리면 lo, 다른 호스트에서는 본인 NIC.

출력 예시 ​

[rbq_wheel] wheel ownership requested (app 21)
[rbq_wheel] applied: HRW(tq=0.00 kd=0.500) HLW(tq=0.00 kd=0.500) FRW(tq=0.00 kd=0.500) FLW(tq=0.00 kd=0.500)
[rbq_wheel] applied: HRW(tq=1.00 kd=0.500) HLW(tq=1.00 kd=0.500) FRW(tq=1.00 kd=0.500) FLW(tq=1.00 kd=0.500)
[rbq_wheel] done - wheels released (kp = kd = torque = 0)

바퀴 순서는 HRW HLW FRW FLW(관절 12–15)입니다. 일반 CAN 기체에서는 kd가 보드 단위로 반올림된 값(예: 0.501)으로 보입니다.

This user manual is intended for RBQ users.