5.1.5 上肢控制

通过发布 /mc/upper_body_command 话题,控制机器人头部、双臂和手部关节。

使用前需先切换到对应运动模式,详见 运动模式切换。

话题接口

话题名称

数据类型

描述

QoS

频率

/mc/upper_body_command

aimdk_msgs/msg/UpperBodyCommandArray

上肢控制指令

BEST_EFFORT+VOLATILE

用户发送(推荐50Hz)

警告

header.stamp 时间戳与运控模块接收时间差不得超过 200 ms,否则指令将被丢弃。若 header.stamp 为 0,运控模块以接收时刻作为时间戳。

  • UpperBodyCommandArray ros2-msg @ mc/openapi/msg/UpperBodyCommandArray.msg

    MessageHeader header             # 消息头
    string source                    # 指令来源标识(任何非空字符串)
    uint8 hand_sub_mode              # 手部子模式(1 (HAND_CLAW_OPEN_CLOSE 夹爪开合), 2 (HAND_DEXTEROUS_JOINT 灵巧手关节), 3 (HAND_DEXTEROUS_GESTURE 灵巧手手势))
    float64[2] head_pos              # 头部关节目标位置,单位:rad
    float64[14] arm_pos              # 双臂关节目标位置(左臂 7 + 右臂 7),单位:rad
    float64[] hand_pos               # 手部目标,长度随 hand_sub_mode 变化
    

关节索引

头部(head_pos,长度 2)— 仅限 X2 Ultra(旗舰版)

索引

关节

0

head_yaw_joint

1

head_pitch_joint

双臂(arm_pos,长度 14)

索引

关节

索引

关节

0

left_shoulder_pitch_joint

7

right_shoulder_pitch_joint

1

left_shoulder_roll_joint

8

right_shoulder_roll_joint

2

left_shoulder_yaw_joint

9

right_shoulder_yaw_joint

3

left_elbow_joint

10

right_elbow_joint

4

left_wrist_yaw_joint

11

right_wrist_yaw_joint

5

left_wrist_pitch_joint

12

right_wrist_pitch_joint

6

left_wrist_roll_joint

13

right_wrist_roll_joint

手部(hand_pos,长度由 hand_sub_mode 决定)

hand_sub_mode

长度

说明

1: 夹爪开合

2

[left_open, right_open], 取值 0.0–1.0

2: 灵巧手关节

20

左手 10 关节 + 右手 10 关节,关节顺序见 HandCommand[]

3: 灵巧手手势

4

[left_gesture, left_open, right_gesture, right_open],开合控制

使用流程

第一步:切换到对应模式

头部控制(仅限旗舰版,X2 EDU 无头颈自由度):

ros2 run examples set_mc_action SD   # → STAND_DEFAULT
ros2 run examples set_mc_action HO   # → HEAD_ONLY

上肢 + 手部控制:

ros2 run examples set_mc_action SD   # → STAND_DEFAULT
ros2 run examples set_mc_action URS  # → UPPERBODY_REMOTE_SPLIT

备注

头部控制需先切换到 HEAD_ONLY 模式,在 UPPERBODY_REMOTE_SPLIT 模式下头部指令无效。X2 EDU(人人造版)无头颈自由度,不支持头部控制。

第二步:运行示例

# 头部控制(HEAD_ONLY 模式)
ros2 run py_examples upper_body_control head

# 夹爪控制(claw,UPPERBODY_REMOTE_SPLIT 模式)
ros2 run py_examples upper_body_control claw

# 灵巧手关节(UPPERBODY_REMOTE_SPLIT 模式)
ros2 run py_examples upper_body_control joint

# 灵巧手手势(UPPERBODY_REMOTE_SPLIT 模式)
ros2 run py_examples upper_body_control gesture

编程示例