5.1.5 上肢控制
通过发布 /mc/upper_body_command 话题,控制机器人头部、双臂和手部关节。
使用前需先切换到对应运动模式,详见 运动模式切换。
话题接口
话题名称 |
数据类型 |
描述 |
QoS |
频率 |
|---|---|---|---|---|
|
|
上肢控制指令 |
|
用户发送(推荐50Hz) |
警告
header.stamp 时间戳与运控模块接收时间差不得超过 200 ms,否则指令将被丢弃。若 header.stamp 为 0,运控模块以接收时刻作为时间戳。
UpperBodyCommandArrayros2-msg @ mc/openapi/msg/UpperBodyCommandArray.msgMessageHeader 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 |
|
1 |
|
双臂(arm_pos,长度 14)
索引 |
关节 |
索引 |
关节 |
|---|---|---|---|
0 |
|
7 |
|
1 |
|
8 |
|
2 |
|
9 |
|
3 |
|
10 |
|
4 |
|
11 |
|
5 |
|
12 |
|
6 |
|
13 |
|
手部(hand_pos,长度由 hand_sub_mode 决定)
|
长度 |
说明 |
|---|---|---|
1: 夹爪开合 |
2 |
|
2: 灵巧手关节 |
20 |
左手 10 关节 + 右手 10 关节,关节顺序见 |
3: 灵巧手手势 |
4 |
|
使用流程
第一步:切换到对应模式
头部控制(仅限旗舰版,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