为什么这个工业场景更适合用行为树,而不是状态机或流程图

我选的场景

如果只挑一个最能说明问题,而且又适合让 AI 完全主导任务级闭环的工业场景,我会选:

跨站补料与空箱回收的移动机器人任务。

一个具体例子是:

当前任务:从 A 仓位取一箱连接器,送到 3 号装配站,并回收空箱
执行中异常:去往 3 号站途中发现该站暂时占用,机器人剩余电量降到 18%
系统候选:先去临时缓存位 -> 判断是否需要补能 -> 去充电点补能 -> 重新规划路线 -> 到站交付 -> 回收空箱
若仍无法完成:转人工调度

我选这个场景,不是因为它最复杂,而是因为它刚好落在行为树最有优势的位置:

  • 它是任务级闭环,不是毫秒级控制闭环。
  • 它既要持续看状态,又要不断改后续动作。
  • 它天然包含等待、回退、补能、重规划和恢复执行。
  • 它的子流程很容易跨站点、跨物料、跨产线复用。
  • 它也最符合“AI 完全主导”的直觉边界,AI 负责任务决策,导航和底层控制仍由确定性控制栈执行。

这正是行为树最擅长的地带。

这个场景到底难在哪

表面上看,这只是“送一箱料,再把空箱带回来”。真正落到工业现场,系统通常要同时处理:

  • 前置条件检查:料箱是否已取到,目标站是否可对接,缓存位是否空闲,电量是否足够。
  • 状态持续更新:站点占用会变化,路线可达性会变化,电量也会持续下降。
  • 局部调整:不是整条任务推倒重来,而是先插入一个缓存或补能子流程,再继续原任务。
  • 恢复执行:充完电、站点释放后,系统要从当前上下文继续,而不是重新派一张新工单。
  • 人工接管:缓存位不可用、长时间无路可走、站点持续占用时,必须收束到可解释、可接管的位置。

这里最关键的一点是,系统不是沿着一条静态路径往下跑,而是在执行过程中不断“看条件,再决定下一步”。

用行为树会长什么样

把这个场景收成行为树,大致会是下面这种结构:

Fallback
├── Sequence
│   ├── 检查料箱已装载
│   ├── Fallback
│   │   ├── Sequence
│   │   │   ├── 检查 3 号站可对接
│   │   │   ├── 检查电量足够
│   │   │   ├── 去 3 号站
│   │   │   ├── 交付料箱
│   │   │   └── 回收空箱
│   │   └── Sequence
│   │       ├── 去临时缓存位
│   │       ├── 如有需要则去充电点补能
│   │       ├── 重新规划路线
│   │       ├── 再次检查 3 号站可对接
│   │       ├── 去 3 号站
│   │       ├── 交付料箱
│   │       └── 回收空箱
└── 人工调度

这个结构有几个工业上很实用的特点:

  • Sequence 适合表达“必须按顺序全部成功”的主路径。
  • Fallback 适合表达“直接交付不成立时,切到缓存、补能和重规划路径”。
  • 条件节点可以持续检查,不需要把站点占用、电量门槛、路线可达性全部塞进状态定义。
  • 叶子节点可以直接映射成已验证技能,例如去缓存位、去充电点、到站交付、回收空箱。
  • 运行时可以持续 tick 整棵树,根据节点返回的 success / failure / running 决定下一步。

行为树的价值,不只是“图更结构化”,而是它本身就是一种可执行结构。

为什么不是流程图

流程图适合讲清楚“正常情况下大概怎么走”。它的问题是,到了这个场景里,它很快会变成一张说明图,而不是运行图。

流程图在这里的短板主要有三点:

  • 它更适合静态说明,不擅长表达运行时反复 tick、暂停、恢复和重入。
  • 一旦开始加入站点占用、缓存等待、充电分支、路线重规划,图会迅速膨胀成一堆箭头。
  • 它没有天然的执行语义。画出来很容易,真正让运行时按图执行、插入补能子流程、恢复原任务,还得额外发明一套机制。

所以流程图在这个场景里最适合做文档,不适合做执行骨架。

为什么不是状态机

状态机当然能做,而且在很多控制器和设备里一直都在做。问题不在“能不能做”,而在“做到什么复杂度以后开始变得难维护”。

如果把这个场景硬写成状态机,状态很快会开始膨胀:

  • 取料中
  • 去 3 号站中
  • 站点占用判断中
  • 去缓存位中
  • 等待站点释放中
  • 去充电点中
  • 充电中
  • 重新规划中
  • 到站交付中
  • 空箱回收中
  • 等待人工调度

这还只是主状态。只要再叠加下面这些维度,状态数会继续放大:

  • 当前电量是否足够直接完成任务
  • 缓存位是否可用
  • 路线是否临时禁行
  • 目标站是否已经释放
  • 当前是第一次尝试还是恢复后的再次尝试
  • 不同站点是否共用同一套策略

状态机的真正问题是组合爆炸。很多信息本来只是条件,却被迫提升成状态。结果就是:

  • 图越来越大
  • 转移条件越来越绕
  • 相同子流程难复用
  • 稍微换一个站点或补料任务,就得复制一份相似状态机

状态机仍然非常适合设备级控制和小范围确定性流程,例如电池管理模块、门禁互锁、底层导航状态、充电桩握手。但在这种“带持续判断和局部恢复的任务级闭环”里,它会很快变得笨重。

行为树在这个场景里的决定性优势

如果把重点放回工业落地,行为树真正赢的不是“更先进”,而是下面四件事:

  • 它把条件、动作、回退和恢复分开了,不用把所有东西塞进状态定义。
  • 它天然支持局部插入子流程。站点占用时只插入缓存和等待子树,电量不足时只插入补能子树,不必整条任务重来。
  • 它天然支持复用。检查电量、去缓存位、执行补能、重新规划、到站交付、回收空箱,这些子树可以在多个任务里复用。
  • 它和技能编排非常贴合。树的叶子节点可以直接对应技能运行时里的标准技能。

换句话说,这个场景里最值钱的不是“我有一条搬运流程”,而是“我有一套可以跨任务复用的任务骨架”。这正是行为树比状态机更适合的地方。

我的判断

如果问“工业上哪个场景最有特点,最适合拿来解释为什么要用行为树,而且 AI 还能完全主导任务级闭环”,我的答案就是:

跨站补料与空箱回收的移动机器人任务。

原因很简单:

  • 它比精密插装更适合作为 AI 完全主导的首个场景,因为节拍是秒级到分钟级,不是毫秒级。
  • 它比普通 AGV 搬运更能体现状态判断,因为这里不是单纯点到点运输,而是要处理站点占用、缓存、补能和恢复执行。
  • 它比纯流程审批更接近真实工业执行,因为每一步都要接现场状态、设备接口和运行时回执。
  • 它又没有深入到底层导航控制和伺服闭环,仍然属于任务级执行骨架可以接住的范围。

所以这个场景刚好卡在行为树最舒服的位置:

上面接工单、调度和任务目标。 下面接导航栈、底盘控制、充电接口和站点对接接口。 中间不断看条件、切分支、做恢复。

什么时候还是该用状态机或流程图

行为树不是要替代一切。

更实际的分工通常是:

  • 流程图:用来讲清楚任务全貌和系统边界。
  • 状态机:用来做设备级、站级、强确定性的控制逻辑。
  • 行为树:用来做任务级执行编排、条件判断、恢复分支和技能组合。

在这个跨站补料与空箱回收场景里,最稳的办法通常不是三选一,而是三者分层:

  • 流程图负责说明任务全貌。
  • 控制器或底层模块状态机负责导航、充电、对接等设备级控制。
  • 行为树负责任务级恢复闭环。

这才是工业上更常见、也更稳的落地方式。