AIMY 3 Command Guide
정보
모든 command들은 베이스 자세를 기준으로 시작합니다. 베이스 자세가 아니라면 초기설치 & 세팅 가이드 탭을 참고해주세요.
AIMY 3은 ROS2 토픽을 통해 로봇을 직접 제어할 수 있습니다.
아래 명령들은 모두 토픽 기반 커맨드이며, 모드별로 사용 방법이 다릅니다.
커맨드 입력 전에 반드시 Joint Limits을 확인해주세요.
ROS2 전용 지원
본 커맨드는 ROS2(humble, jazzy) 환경에서만 지원됩니다. ROS1/타 프레임워크에서는 동작을 보장하지 않습니다.
Joint Limits (공통)
| 조인트명 | 조인트 명령어 | 각도 범위 |
|---|---|---|
| Head Pitch | head_p | -15° ~ 12° |
| Head Yaw | head_y | -30° ~ 30° |
| Waist Pitch | waist_p | 0° ~ 20° |
| Left Shoulder Pitch | l_sh_p | -170° ~ 154° |
| Left Shoulder Roll | l_sh_r | -62° ~ 2.7° |
| Left Shoulder Yaw | l_sh_y | -120° ~ 120° |
| Left Elbow Pitch | l_el_p | -85° ~ 4° |
| Right Shoulder Pitch | r_sh_p | -170° ~ 154° |
| Right Shoulder Roll | r_sh_r | -2.7° ~ 62° |
| Right Shoulder Yaw | r_sh_y | -120° ~ 120° |
| Right Elbow Pitch | r_el_p | -4° ~ 85° |
Command Types
- Position Control Command
- Wheel Command
- Hand Command
Position Control Command
개요
- Position 모드 제어 → 목표 위치로 joint 각도가 즉시 이동
- 제어 토픽:
/aeirobot/aimy/command - 메시지 타입:
aeirobot_msgs/msg/Command
주의사항
명령을 보내는 즉시 목표 위치로 관절이 움직입니다. 현재 위치와 차이가 큰 명령을 보내면 로봇에 무리가 갈 수 있습니다.
Wheel Command
개요
- 휠(Wheel) 제어 → 바퀴의 속도를 기반으로 제어
- 제어 토픽:
/aeirobot/aimy/cmd_vel - 메시지 타입:
geometry_msgs/msg/TwistStamped
주의사항
- 이 토픽으로 보내는 속도 명령은 현재 제어 명령을 즉시 덮어씁니다.
- 케이블/연결 장치가 당겨지지 않도록 주변을 정리하세요.
- 반드시 즉시 정지 가능한 오퍼레이터가 대기해야 합니다.
데이터 형식
| 방향 | 데이터 |
|---|---|
| Forwards | linear.x positive |
| Backwards | linear.x negative |
| Rotate Left | angular.z positive |
| Rotate Right | angular.z negative |
예시: 전진 명령
ros2 topic pub /aeirobot/aimy/cmd_vel \
geometry_msgs/TwistStamped \
'{"twist": {"linear": {"x": 0.2}}}' -r 10
예시: 제자리 회전
ros2 topic pub /aeirobot/aimy/cmd_vel \
geometry_msgs/TwistStamped \
'{"twist": {"angular": {"z": 0.35}}}' -r 10
예시: 정지
ros2 topic pub /aeirobot/aimy/cmd_vel \
geometry_msgs/TwistStamped \
'{"twist":{"linear":{"x":0.0,"y":0.0},"angular":{"z":0.0}}}'
Hand Command
정보
해당 과정은 Inspire Hand를 기준으로 설명됩니다. 만약 로봇에 장착된 hand가 inspire hand가 아니라면, 정상 작동을 보장하지 않습니다.
개요
- 손가락 제어 → position 기반으로 각 손가락 제어
- 제어 토픽:
/aeirobot_hand/set_angle - 메시지 타입:
aeirobot_hand_msgs/msg/SetAngle
데이터 형식
| 필드 | 데이터 |
|---|---|
| msg.status | "set_angle" |
| msg.hand_id | 왼손 : 2 / 오른손 : 1 |
| msg.angle[ 0 ] | Pinky Pitch |
| msg.angle[ 1 ] | Ring Pitch |
| msg.angle[ 2 ] | Middle Pitch |
| msg.angle[ 3 ] | Index Pitch |
| msg.angle[ 4 ] | Thumb Pitch |
| msg.angle[ 5 ] | Thumb Roll |
참고 사항
- msg.angle에는 0~1000 사이의 값이 들어갑니다.
- 1000 : 완전히 펼침
- 0 : 완전히 접음
예시: 왼손 다 펼침
ros2 topic pub --once /aeirobot_hand/set_angle aeirobot_hand_msgs/msg/SetAngle \
"{status: 'set_angle', hand_id: 2, angle: [1000, 1000, 1000, 1000, 1000, 1000]}"
예시: 오른손 다 접음
ros2 topic pub --once /aeirobot_hand/set_angle aeirobot_hand_msgs/msg/SetAngle \
"{status: 'set_angle', hand_id: 1, angle: [0, 0, 0, 0, 0, 0]}"
각 손가락 position 값 받아오기 (요청/응답)
정보
각 손가락의 position(각도) 값을 읽을 때는 요청 토픽으로 데이터를 요청(publish) 하고, 결과 토픽을 구독(subscribe) 해서 응답을 받습니다.
주의
해당 기능은 내부적으로 시리얼 통신 기반으로 동작합니다. 너무 짧은 주기로 연속 요청을 보내면 통신 지연/버퍼 누적으로 인해 실제 손 동작(제어) 응답에 영향이 생길 수 있습니다. 값 조회는 필요한 경우에만 요청하고, 반복 조회 시에는 충분한 간격을 두는 것을 권장합니다.
1) 데이터 요청 (publish)
- 토픽 명:
/aeirobot_hand/get_angle_act - 메시지 타입:
aeirobot_hand_msgs/msg/HandTask
요청 메시지에 넣을 값
| 필드 | 의미 | 값 |
|---|---|---|
| msg.status | 요청 종류 | get_angleact |
| msg.hand_id | 손 선택 | 왼손: 2 / 오른손: 1 |
예시
ros2 topic pub --once /aeirobot_hand/get_angle_act aeirobot_hand_msgs/msg/HandTask \
"{status: 'get_angleact', hand_id: 2}"
2) 데이터 응답 (subscribe)
- 토픽 명:
/aeirobot_hand/get_angle_act_result - 메시지 타입:
aeirobot_hand_msgs/msg/GetAngleAct
응답 메시지에서 확인할 값
| 필드 | 의미 |
|---|---|
| msg.hand_id | 왼손: 2 / 오른손: 1 |
| msg.curangleact | 6개 관절의 position(각도) 배열 |
msg.curangleact 인덱스 의미
| 인덱스 | 데이터 |
|---|---|
| 0 | Pinky Pitch |
| 1 | Ring Pitch |
| 2 | Middle Pitch |
| 3 | Index Pitch |
| 4 | Thumb Pitch |
| 5 | Thumb Roll |
값 범위
msg.curangleact[i]값은0~1000범위입니다.1000: 완전히 펼침0: 완전히 접음
예시
ros2 topic echo /aeirobot_hand/get_angle_act_result