Target Go — ROS2 예제
소스: rbq_sdk/ros2/src/rbq_examples/src/rbq_target_go.cpp
Target Go의 ROS 2 포팅입니다. rbq_msgs/TargetGo를 한 번 발행해 로봇이 목표 자세(x, y, 방향)로 걸어가도록 명령합니다. 로봇 측 Network 프로세스(sim.bash / Motion이 띄움)가 CycloneDDS로 직접 받아 처리하며 — 별도의 드라이버 노드는 없습니다.
사전 요구사항
- ROS 2 Humble 설치·source, RBQ ROS2 SDK 빌드 — ROS2 SDK 개요 참조.
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp, domain 0, 그리고 로봇/심과 같은 인터페이스를 가리키는CYCLONEDDS_URI.- 로봇 스택이 실행 중이며 제어 시작 / 기립 상태 — 아니면 QuadWalk가
Can't Receive cmd: CON_START first로 응답.
빌드
bash
cd RBQ/rbq_sdk/ros2
rosdep install --from-paths src -y --ignore-src
colcon build --symlink-install
source install/setup.bash실행
bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI=file:///path/to/cyclonedds.xml # 로봇/심과 같은 인터페이스
ros2 run rbq_examples rbq_target_go -- [x] [y] [theta] [gait] [mode]
# 시뮬레이터, wave 보행으로 1 m 전진:
ros2 run rbq_examples rbq_target_go -- 1.0 0.0 0.0 0 0위치 인자는 -- 뒤에 옵니다(ROS 2가 자체 플래그를 먼저 제거함):
| 인자 | 의미 | 기본값 |
|---|---|---|
x | 시작 위치 기준 목표 X (m) | 1.0 |
y | 시작 위치 기준 목표 Y (m) | 0.0 |
theta | 목표 방향 (rad) | 0.0 |
gait | 0=wave / 1=stairs / 2=RL | 0 |
mode | 0=rot→straight→rot / 1=rot→diag / 2=diag→rot / 3=rot+diag 동시 | 0 |
메시지
예제는 rbq_msgs/TargetGo 한 개를 채워 /rbq/cmd/target_go로 발행합니다(노드는 접두 슬래시 없는 rbq/cmd/target_go로 발행하며, 이는 /rbq/cmd/target_go로 해석됩니다. QuadWalk는 DDS 이름 rt/rbq/cmd/target_go를 구독합니다).
| 항목 | 타입 | 설명 |
|---|---|---|
gait | int32 | 보행: 0=wave, 1=stairs, 2=RL |
mode | int32 | 접근 모드: 0=rot→straight→rot, 1=rot→diag, 2=diag→rot, 3=rot+diag 동시 |
x | float32 | 시작 위치 기준 목표 X (m) |
y | float32 | 시작 위치 기준 목표 Y (m) |
theta | float32 | 목표 방향 (rad) |
offset_x | float32 | 접근 오프셋 X (m) — 예제는 0 전송 |
offset_y | float32 | 접근 오프셋 Y (m) — 예제는 0 전송 |
slow | bool | 저속 접근 — 예제는 false 전송 |
wide | bool | 넓은 보폭 접근 — 예제는 false 전송 |
vision | bool | 비전 높이 피드백 사용 — 예제는 false 전송 |
출력 예시
[rbq_target_go]: published: gait=0 mode=0 x=1.00 y=0.00 theta=0.000MuJoCo 시뮬레이터에서 rmw_cyclonedds_cpp로 검증함 — 명령이 ROS2 ↔ CycloneDDS 경계를 넘어 QuadWalk가 rt/rbq/cmd/target_go에서 수신합니다(제어 시작 전이면 Can't Receive cmd: CON_START first).
