怎么读这三张图,以及结论是什么
这三张图讨论的是同一个工业场景:
跨站补料与空箱回收的移动机器人任务级闭环。
具体条件也是同一组:
当前任务:从 A 仓位取一箱连接器,送到 3 号装配站,并回收空箱
执行中异常:去往 3 号站途中发现该站暂时占用,机器人剩余电量降到 18%
系统候选:先去临时缓存位 -> 判断是否需要补能 -> 去充电点补能 -> 重新规划路线 -> 到站交付 -> 回收空箱
若仍无法完成:转人工调度
三张图不是在画三个不同系统,而是在用三种不同的表达方式描述同一件事。只有放在一起看,差别才真正明显。
先看哪张
最好的阅读顺序是:
- 先看流程图
- 再看状态机
- 最后看行为树
原因很简单。
流程图最容易看懂,它先把“这件事大概怎么走”讲清楚。状态机会让你看到,一旦把这件事写成可执行控制逻辑,状态和转移很快就会开始膨胀。行为树则回答最后一个问题:如果我们既想让它可执行,又想让它可复用、可回退、可扩展,应该怎么组织。
第一张图在回答什么
流程图文件:
abb-isaac-agent-flexible-manufacturing-ai-first-07-why-behavior-tree-flowchart-example.puml
这张图回答的问题是:
这条任务闭环,按步骤大概怎么走。
它适合说明下面这些事:
- 从 A 仓位取料之后,会向 3 号站发起交付任务。
- 如果目标站占用,系统会先去缓存位。
- 如果等待期间电量不够,系统会插入补能分支。
- 站点释放并重新规划成功后,系统会继续交付并回收空箱。
它最适合拿来做:
- 文档说明
- 给非机器人软件背景的人做场景介绍
- 讨论业务流程和处理顺序
但它不擅长回答:
- 哪些判断会被反复检查
- 哪些子流程可以复用
- 哪些失败只需要局部插入一个恢复子流程
- 运行时如何持续推进整个执行结构
所以流程图最像“说明书”,不太像“执行骨架”。
第二张图在回答什么
状态机文件:
abb-isaac-agent-flexible-manufacturing-ai-first-07-why-behavior-tree-fsm-example.puml
这张图回答的问题是:
如果把这条任务闭环写成可执行状态逻辑,系统会有哪些状态、怎样转移。
它适合说明下面这些事:
- 什么时候进入去缓存位中、等待站点释放中、去充电点中、重新规划中
- 什么时候能从等待恢复到重新去站点
- 什么时候必须转人工调度
它最适合拿来做:
- 设备级或站级控制逻辑
- 资格判断明确、转移条件明确的确定性流程
- 底层导航模块、充电模块、设备联锁层的状态控制
但放到这个场景里,它会开始暴露问题:
- 很多本来只是条件的东西,被迫抬成状态
- 只要继续叠加路线禁行、缓存位不可用、不同站点策略差异,状态会迅速膨胀
- 相同的任务骨架很难优雅复用
- 图会越来越像“状态和转移表”,而不是一组可重组的任务骨架
所以状态机不是不能做,而是越往任务级恢复闭环走,越容易变笨重。
第三张图在回答什么
行为树文件:
abb-isaac-agent-flexible-manufacturing-ai-first-07-why-behavior-tree-bt-example.puml
这张图回答的问题是:
如果把这条任务闭环做成一套可执行、可回退、可复用的任务骨架,结构应该长什么样。
它适合说明下面这些事:
- 主交付路径是一棵
Sequence - 直接去站点不成立时,
Fallback会切到缓存、补能和重规划路径 - 条件节点和动作节点可以清晰分开
- 叶子节点可以直接映射成已验证技能
- 运行时会持续 tick 整棵树,而不是一次走完就结束
它最适合拿来做:
- 任务级执行编排
- 带条件检查的恢复链
- 局部重试和局部回退
- 多站点、多物料、多任务之间的子流程复用
这正是这个场景最需要的东西。
三张图真正的差别
如果把三张图压成一句话:
- 流程图关心的是“顺序怎么描述”
- 状态机关心的是“状态怎么转移”
- 行为树关心的是“任务结构怎么执行、回退和复用”
再说得更直白一点:
- 流程图最适合给人看
- 状态机最适合做设备级确定性控制
- 行为树最适合做任务级闭环编排
这个判断不是抽象偏好,而是由场景决定的。
因为这个跨站补料与空箱回收场景同时要求:
- 前置条件检查
- 最新状态参与决策
- 缓存等待
- 插入补能子流程
- 重规划后继续执行
- 人工接管点
- 同类任务骨架跨站点复用
一旦这些要求同时出现,行为树的结构优势就会变得很明显。
最后应该得出的结论
这三张图放在一起,真正想说明的不是“行为树永远比状态机高级”,而是:
在工业系统里,不同层该用不同表达方式。
更稳的分工通常是:
- 流程图负责讲清楚任务全貌和系统边界
- 状态机负责设备级、站级、确定性控制逻辑
- 行为树负责任务级恢复闭环、条件判断和技能组合
所以对这个跨站补料与空箱回收场景,我的结论很明确:
如果只是讲清楚流程,用流程图。 如果要写底层模块和控制器内的确定性状态控制,用状态机。 如果要把它做成可执行、可回退、可复用、可扩展的任务骨架,用行为树。
这也是为什么工业上很多成熟系统最后不是三选一,而是三者分层共存。
