1.1 接口概述
上肢关节运动规划接口用于批量执行关节运动规划任务,支持队列化管理和自动执行。开发者可以在 YAML 配置文件中定义多个运动任务(如伸手、握手、复位等),程序会按顺序加载并执行每个任务,同时监控执行状态。
该接口适用于需要编排多个上肢动作序列的场景,与关节覆盖控制(第5章)的区别在于:运动规划是"发送一次请求,等待执行完成",而覆盖控制是"持续高频发布命令"。
1.2 消息字段
通信接口:上肢关节运动规划通过以下 ROS2 话题完成。
- 规划请求话题:
/joint_motion_plan_request,消息类型:interface_protocol/msg/JointMotionPlanRequest - 规划状态话题:
/joint_motion_plan_state,消息类型:interface_protocol/msg/JointMotionPlanState
本节后续给出消息字段的详细定义。
JointMotionPlanRequest.msg 字段定义(来自 GitHub):
PLAIN |
JointMotionPlanState.msg 字段定义:
PLAIN |
通信接口:
| 话题名称 | 消息类型 | 方向 | 说明 |
|---|---|---|---|
/motion/joint_motion_plan/request | JointMotionPlanRequest.msg | 客户端 → 规划器 | 发送运动规划请求 |
/motion/joint_motion_plan/state | JointMotionPlanState.msg | 规划器 → 客户端 | 接收规划器状态和执行进度 |
1.3 请求类型与状态常量
请求类型常量:
| 常量 | 值 | 说明 |
|---|---|---|
REQUEST_PLAN_EXECUTE | 0 | 正常运动规划,执行到目标位置 |
REQUEST_CANCEL | 1 | 取消指定 request_id 的任务 |
REQUEST_RESET | 2 | 重置到默认姿态,忽略大部分参数 |
状态常量:
| 常量 | 值 | 说明 |
|---|---|---|
STATUS_DISABLED | 0 | 禁用状态 |
IDLE | 1 | 空闲状态,可以接收新请求 |
EXECUTING | 2 | 执行中 |
EXITING | 3 | 退出中 |
1.4 前置条件
- 必须进入
lower_body_balance(下肢平衡)模式,上肢处于低阻尼步态状态 - 手柄切换:[LB, CROSS_X_DOWN]
- 请求只需要发送一次,规划器会自动执行
request_id必须递增(当前 ID + 1),可通过订阅状态话题获取当前 ID
1.5 YAML 配置文件格式
运动规划任务通过 YAML 配置文件定义。配置文件包含全局关节索引和任务队列两部分,不同机型的关节索引和参数有差异。YAML 中的 duration 字段对应 JointMotionPlanRequest.msg 中的 execution_time 字段,表示期望执行时间(单位:秒)。
PM01 配置示例(握手动作):
YAML |
以下为 T800 开发版和 T800 Pro 的配置示例,与 PM01 的差异主要体现在 joint_indices、stiffness 和 damping 值上:
T800 开发版配置示例(13 个上肢关节,含头部俯仰+偏航):
YAML |
T800 Pro 配置示例(关节索引跳跃,灵巧手占据中间索引):
YAML |
机型差异对比:
| 机型 | 关节索引 | 腰部刚度 | 腰部阻尼 |
|---|---|---|---|
| PM01 | [12~23],共 12 个 | 200.0 | 3.0 |
| T800 开发版 | [12~24],共 13 个 | 400.0 | 3.0 |
| T800 Pro | [12, 13, 14, 15, 16, 17, 27, 28, 29, 30, 31, 41, 42],共 13 个 | 500.0 | 10.0 |
配置文件第一项必须包含 joint_indices,target_positions 数量必须与 joint_indices 数量一致。RESET 类型请求会忽略大部分参数,将关节重置到默认位置。
1.6 示例:多任务队列执行
文件名:joint_multiple``_motion_plan_example.py
运行命令:
Bash |
程序流程:从配置文件加载任务队列 → 按顺序发送运动规划请求 → 监控执行状态 → 处理任务完成和错误情况。任务会按顺序执行,不能并行。
1.7 注意事项
- 必须进入
lower_body_balance模式 request_id必须递增(当前 ID + 1),如果状态不同步,等待下一个状态消息- 配置文件第一项必须包含
joint_indices target_positions数量必须与joint_indices数量一致- RESET 类型请求会忽略大部分参数,将关节重置到默认位置
- 任务执行失败不会自动重试,需要手动处理
- 使用 Ctrl+C 可以随时中断程序
📎 本章涉及的开源仓库源码文件(点击文件名跳转 GitHub):JointMotionPlanRequest.msg · JointMotionPlanState.msg · joint_multiple_motion_plan_example.py
