High Level Command — ROS2 예제
소스: rbq_sdk/ros2/src/rbq_examples/src/rbq_high_level.cpp
ROS 2로 HighLevelCommand 메시지를 50 Hz로 발행합니다.
터미널에서 보행을 선택하고, 조이스틱으로 속도를 제어합니다.
개요
세 개의 병렬 실행 주체가 함께 동작합니다:
| 실행 주체 | 주기 | 역할 |
|---|---|---|
| 제어 루프 (타이머) | 50 Hz | 현재 보행 + 속도로 HighLevelCommand 발행 |
| 조이스틱 스레드 | 이벤트 기반 | 조이스틱 이벤트를 읽어 속도 원자 변수 업데이트 |
| 터미널 스레드 | 블로킹 | stdin에서 보행 이름/ID 입력 처리 |
시작 시 200 ms 지연 후 switchControlMode = true를 한 번 발행하여 로봇의 HighLevel 모드를 활성화합니다. 이 메시지가 없으면 HighLevelCommand 토픽이 무시됩니다.
사전 요구사항
- ROS 2 Humble 설치 및 소스 완료.
- RBQ ROS2 SDK 빌드 완료 — 빠른 시작 참고.
- 로봇 스택 실행 중 (시뮬레이션 또는 실제 하드웨어).
/dev/input/js*경로의 Linux 조이스틱 장치 (선택 사항; 조이스틱 없이도 터미널 모드만 사용 가능).
빌드
bash
cd RBQ/rbq_sdk/ros2
rosdep install --from-paths src -y --ignore-src
colcon build --symlink-install
source install/setup.bash실행
bash
ros2 run rbq_examples rbq_high_level [joystickPath]
# 예시
ros2 run rbq_examples rbq_high_level
ros2 run rbq_examples rbq_high_level /dev/input/js1기본 조이스틱 경로: /dev/input/js0.
터미널 명령어
보행 이름 또는 숫자 ID를 입력하고 Enter를 누릅니다.
list # 전체 보행 목록 출력
stand # 이름으로 STAND 전환
3 # ID로 WALK 전환
rl_trot # RL_TROT으로 전환사용 가능한 보행 목록
| 이름 | ID | 설명 |
|---|---|---|
sit | 0 | 바닥에 앉기 |
stand | 1 | 중립 서기 자세 |
aim | 2 | 조준 자세 |
walk | 3 | MPC 트롯 보행 |
stairs | 4 | 계단 적응 보행 |
wave | 5 | 저속 보행 |
run | 6 | 고속 보행 |
rl_trot | 30 | RL 기반 트롯 |
rl_front_walk | 31 | RL 전진 보행 |
rl_left_walk | 33 | RL 좌측 보행 |
rl_right_walk | 34 | RL 우측 보행 |
rl_bound | 35 | RL 바운드 보행 |
rl_pace | 36 | RL 페이스 보행 |
rl_pronk | 37 | RL 프롱크 보행 |
rl_3leg_hr | 38 | RL 3족 (후우 들기) |
rl_3leg_hl | 39 | RL 3족 (후좌 들기) |
rl_3leg_fr | 40 | RL 3족 (전우 들기) |
rl_3leg_fl | 41 | RL 3족 (전좌 들기) |
rl_trot_vision | 42 | RL 비전 트롯 |
rl_trot_run | 45 | RL 트롯 런 |
rl_silent | 46 | RL 저소음 보행 |
rl_stairs | 47 | RL 계단 오르기 |
rl_walk_vision | 48 | RL 워크 비전 (지형 height 피드백, height/pitch 조정 가능) |
rl_walk | 49 | RL 워크 (height/pitch 조정 가능) |
조이스틱 속도 제어
| 축 | 대응 명령 | 최대값 |
|---|---|---|
| L 스틱 앞/뒤 | vel_x | ±1.2 m/s |
| L 스틱 좌/우 | vel_y | ±0.5 m/s |
| R 스틱 좌/우 | omega_z | ±60 deg/s |
데드존: 0.12 적용.omega_z는 deg/s 단위로 전송되며, QuadWalk 내부에서 rad/s로 변환됩니다.
사용하는 ROS 2 토픽
| 방향 | 토픽 | 메시지 타입 |
|---|---|---|
| 발행 | /rbq/cmd/highLevel | rbq_msgs/msg/HighLevelCommand |
| 발행 | /rbq/cmd/switchControlMode | std_msgs/msg/Bool |
| 발행 | /rbq/cmd/switchGait | std_msgs/msg/Int8 |
| 발행 | /rbq/cmd/joy | sensor_msgs/msg/Joy |
| 구독 | /rbq/robot_status | rbq_msgs/msg/RobotStatus (best-effort QoS) |
구현 주요 사항
gait_transition플래그: 보행 변경 시마다true로 설정됩니다. QuadWalk의 보행 타이머가 전환을 시작하도록 트리거합니다.switchControlMode: 시작 후 200 ms 지연(mode_timer_)을 두고 한 번만 발행합니다. DDS 구독자가 먼저 연결될 시간을 확보하기 위함입니다.- 조이스틱 이벤트: 조이스틱 스레드가 독립적으로 실행되어
vel_x_,vel_y_,omega_z_원자 변수를 업데이트합니다. 50 Hz 타이머는 매 발행 주기마다 이 값들을 읽습니다.
