人形机器人项目怎么先把工作流管住:从任务编排、责任边界到异常接管的实作指南

这篇文章解决的问题是:当你准备把人形机器人放进真实业务现场时,为什么很多项目不是死在本体能力不够,而是死在工作流没人真正“接住”。这篇适合已经有机器人原型、ROS 2 栈或现场试点计划的团队。最关键的工程判断是:先把任务编排、责任边界、异常接管和回放证据链搭好,再去追求更花哨的动作能力,落地成功率会高很多。

这篇适合谁

  • 准备把人形机器人接进工厂、楼宇、仓储、巡检或服务流程的集成团队
  • 已经有本体和基础技能,但上线时总在“谁负责调度、谁负责回退、谁来接管”上扯不清的项目负责人
  • 想把单机 demo 变成可持续运行系统的机器人软件、现场运维和测试团队

如果你现在连单个抓取、导航、开门、搬运动作都还没跑通,这篇不是第一优先。先把基础技能闭环打通,再来看工作流层。

先纠正几个很常见的误区

  • 误区 1:机器人够强,工作流自然会跟上。
    现实通常反过来。任务边界没定义清楚,再强的本体也会在现场被异常、优先级冲突和人工插手打断。
  • 误区 2:工作流就是上层调度,和机器人控制关系不大。
    错。工作流层必须知道机器人什么时候能接单、什么时候只能安全停机、什么时候必须请求人工接管,这些都要和机器人 supervisor 状态机对齐。
  • 误区 3:先把机器人卖进去,异常流程后面补。
    没有异常回退、工单取消、资源冲突处理和回放证据链,现场一出事故,项目很快就会失去信任。

关键实现判断

人形机器人项目里,真正应该“拥有工作流”的,不该是某一个技能节点,也不该是某一个 demo 脚本,而应该是一个可审计的任务编排层。这个层至少要负责四件事:

  1. 把业务任务拆成机器人能执行的原子步骤和检查点。
  2. 定义每一步由谁负责,失败后由谁接管。
  3. 把任务状态、资源占用、人工介入和机器人状态记录成可回放证据。
  4. 让机器人本体可以被替换、降级或临时下线,而业务流程不至于一起崩掉。

Open-RMF 的 fleet adapter 思路很值得借鉴,它把“核心调度”和“厂商机器人接口”拆开。VDA 5050 也给了一个很实用的启发,任务下发和状态回报必须有稳定字段、唯一 ID 和取消/更新语义。对人形机器人来说,你未必照搬这些协议,但一定要照着这个工程思路做。

分步实践指南

第 1 步,先画一条最小可运行工作流,而不是先堆能力清单

不要一上来写“机器人要会走、会抓、会看、会对话”。先选一条现场真会重复发生的流程,例如:

  • 巡检点位到达 → 读表/识别异常 → 上传结果 → 异常升级给值班员
  • 工位补料 → 到站确认 → 搬取物料 → 放置确认 → 失败回退
  • 楼宇服务 → 呼梯 → 到层 → 交互确认 → 任务完成或转人工

每条流程都写成同一张任务表:

  • 开始条件:谁触发,现场前提是什么
  • 成功条件:什么证据算完成
  • 失败条件:超时、资源不可用、视觉不确定、路径阻塞、抓取失败等
  • 人工接管点:哪几个节点允许人安全接手
  • 不可自动继续的条件:比如安全区失效、工装偏移、关键传感器掉线

如果这些字段写不清,说明你现在不是缺模型,而是任务定义还不配上线。

第 2 步,把系统切成 4 层,别让一个节点同时做所有决定

实践里比较稳妥的分层方式是:

  1. 工作流编排层:管理工单、优先级、资源锁、人工审批和跨系统状态。
  2. 站点适配层:把 MES/WMS/BMS/工单系统的字段,翻译成机器人可执行任务。
  3. 机器人 supervisor 层:决定当前机器人是否允许接单、进入 active、degraded、handover、safe-stop 哪种模式。
  4. 技能执行层:导航、抓取、开门、读表、对话等原子能力。

ROS 2 lifecycle 的 managed node 模型很适合拿来约束第 3 层。不是所有节点一启动就能执行任务,很多能力必须经过 configure、activate,异常后能 deactivate 或进入 error processing。你只要把这个思想贯彻进去,现场 bring-up 和回退就会清楚很多。

第 3 步,任务状态一定要可取消、可重试、可幂等

这是很多人形机器人项目最容易偷懒的地方。demo 脚本里只管“跑成功”,上线就会出事。

建议你的任务对象至少带这些字段:

  • task_id / run_id / site_id / robot_id
  • 当前阶段 phase,例如 dispatched、accepted、executing、blocked、handover_requested、completed、failed、cancelled
  • 动作级检查点 checkpoint,例如“已到站”“已抓起”“已放置”
  • 失败码和失败类别,例如 perception_uncertain、resource_locked、safety_hold、network_timeout
  • operator_action_required,明确是否需要人确认

VDA 5050 的价值不在于“你一定要用 AGV 标准”,而在于它提醒你:订单、状态、动作状态、取消和更新语义必须一开始就设计。否则后面你会发现,不同机器人、不同技能、不同站点都在用各自的话描述失败,最后谁也接不住系统。

第 4 步,站点适配器只做翻译,不要偷偷塞业务逻辑

Open-RMF fleet adapter 的一个好处,就是它把“核心系统怎么派任务”和“机器人厂商接口怎么实现”分开。做人形机器人也建议这么做:

  • 站点适配器负责把上游工单翻译成统一任务描述
  • 机器人适配器负责把统一任务描述拆成具体技能调用
  • 工作流编排层负责决定任务是否继续、重试、升级或取消

别把业务规则埋进机器人节点里,比如“补料任务默认重试 3 次,夜班优先级更高,超时后通知班长”。这些规则应该在编排层,不应该散落在 skill 节点或 action server 里。否则换一台机器人、换一个班组、换一个站点,整套逻辑都会碎。

第 5 步,提前设计人工接管,不要把它当失败后的临时补丁

真正的工作流系统,必须默认人会介入。比较实用的接管设计至少包括:

  • 接管触发条件:连续识别不确定、目标姿态偏差超阈值、路径长期占用、电量低于任务完成阈值等
  • 接管前冻结动作:停止新的高风险动作,只保留安全保持和姿态稳定
  • 接管界面:给人看的不是原始 topic,而是当前任务阶段、最近失败码、现场截图/片段和可选操作
  • 接管后恢复规则:恢复到上一个 checkpoint,还是从某个步骤重跑,必须明确

如果你的系统只有“遥控接管”而没有“工作流接管”,那本质上只是多了个远程手柄,不算完整上线方案。

第 6 步,把日志和回放当一等公民来设计

很多团队到了现场才发现,机器人为什么失败根本说不清,因为日志碎在 ROS bag、数据库、视频文件和工单系统里。

MCAP 的思路很适合做人形机器人工作流证据链。它支持多通道、带时间戳、带 schema 的异构数据记录,适合把这些东西放进同一条时间线里:

  • 任务状态变化
  • 机器人模式切换
  • 关键传感器摘要
  • 操作员介入事件
  • 上游工单字段和下游执行回执

现场复盘时,不要只问“算法为什么没成功”,而要问“工作流在哪个阶段失去了可控性”。这是两个完全不同的问题。

最容易翻车的地方 / 常见失败模式

  • 把现场 SOP 写成一串线性脚本。 一旦出现插队任务、设备占用、临时封路或人工打断,脚本就断。
  • 状态名太少。 只有 running / success / failed 三种状态,无法支撑接管、阻塞、重试和人工确认。
  • 机器人模式和业务状态脱节。 调度层还以为机器人可接单,但本体其实在 degraded 或 error hold。
  • 失败码不可操作。 只写 “task failed”,运维和算法同事都无法快速定位该看感知、控制、网络还是现场资源。
  • 没有幂等设计。 网络重发后任务重复下发,造成重复搬运、重复上报或重复接管。

怎么验证你真的搭对了

不要只做功能演示,至少做下面 5 类验证:

  1. 取消验证:任务执行到一半时取消,机器人能否进入安全状态并正确回写结果。
  2. 断链验证:临时断开站点系统、机器人接口或局部网络,看是否会出现幽灵任务和状态漂移。
  3. 接管验证:人为制造识别不确定、障碍阻塞、抓取失败,确认是否会在预定检查点请求人工介入。
  4. 回放验证:随机抽一条失败任务,能否在 10 分钟内复原“发生了什么、谁做了什么决定、为什么没继续”。
  5. 换机验证:用第二台配置相近的机器人接同一工作流,确认业务层不需要重写整套逻辑。

如果前 4 项过不了,就不要急着扩大试点。那不是规模问题,是工作流系统还没形成闭环。

下一步怎么做

  • 先选 1 条高频、低风险、可人工兜底的工作流,别一开始挑战最复杂场景。
  • 先把任务对象、状态机、失败码、接管规则和日志 schema 固定下来,再接更多技能。
  • 每周复盘失败任务时,按“任务定义问题 / 站点适配问题 / 机器人模式问题 / 技能执行问题”四类归因,不要都甩给模型。
  • 当一条流程能稳定跑,再复制它的编排模板到第二个站点,而不是从头写第二套。

延伸阅读 / Sources

Share this article

Send it to someone following humanoid robotics, embodied AI, or deployment trends.