当前位置: 首页 > news >正文

FSM和BT的区别

FSM:状态是 “主角”,逻辑是 “跳转”

BT:任务是 “主角”,状态只是 “执行结果”


用超级直白的比喻

1)FSM:像一个 “多房间的房子”

你人只能站在一个房间里

  • 客厅
  • 厨房
  • 卧室
  • 厕所

要做事,必须先跳进对应的房间。逻辑写的是:

  • 从客厅 → 厨房
  • 从厨房 → 卧室
  • 从卧室 → 厕所

房间(状态)是主体,你在哪个房间,决定你能干啥。

这就是 FSM:状态驱动。


2)BT:像一张 “任务清单”

你不关心自己在哪个房间,你只关心:下一步要做什么事?

  1. 去厨房烧水
  2. 去客厅拿杯子
  3. 去卧室拿手机
  4. 完成

任务是主体,你执行到哪一步,就是当前进度。

这就是 BT:任务 / 流程驱动。


那为什么 BT 里也会看到 “状态”?

因为任何执行中的动作,都必然有执行结果

  • 成功了(Success)
  • 失败了(Failure)
  • 还在做(Running)

这三个东西看起来像状态,但它们不是用来跳转的,是用来控制流程往下走不走的


真正的区别在这里(关键)

FSM 的状态 = 身份

我现在是【导航状态】→ 我就只能干导航的事要干避障 → 必须切换成【避障状态】

BT 的状态 = 结果

我现在在【执行路径跟踪】→ 返回 Running→ 继续 tick→ 继续走

障碍来了 → 跟踪失败→ 自动走下一个子任务(恢复 / 绕障)→ 不需要 “切换状态”,只是流程往下走


再简化到不能再简化

FSM:

我是谁 → 决定我做什么

BT:

我要做什么 → 做到哪步算哪步


对应到 Nav2 你就彻底懂了

FSM(ROS1 move_base)

  • 状态:全局规划中
  • 状态:局部控制中
  • 状态:恢复中
  • 状态:卡住

必须跳来跳去

BT(ROS2 Nav2)

  • 先检查目标
  • 再规划路径
  • 再跟踪路径
  • 跟踪失败 → 尝试恢复
  • 恢复成功 → 继续跟踪
  • 到达 → 结束

没有状态跳转,只有任务流程。


最终总结(你记住这句就够)

  • FSM 是状态机:状态是核心,逻辑是跳转。
  • BT 是流程树:流程是核心,状态只是返回值。
  • BT 里确实有 “状态”,但它不依赖状态跳转,所以不乱、不爆炸、好维护。

行为树本质上就是:可视化、可热改、带异步恢复的「面向过程编程」

你完全没理解错,而且这个比喻非常准。


一句话戳穿:

面向过程 = 代码写死的顺序流程行为树 = 可配置、可可视化、可中断恢复的 “活流程”

它就是升级版的面向过程,所以你觉得很好理解,太正常了!


那为什么还要搞 BT,不直接写 if-else /for/while?

我给你对比一下,你瞬间就明白 BT 存在的意义。

1)普通面向过程(代码里写死)

if (!到达目标) { 规划路径(); while (!障碍) { 走路径(); } 旋转避障(); }

问题:

  • 写死在代码里
  • 改逻辑要重新编译
  • 不能中途暂停、恢复
  • 复杂了就是面条代码
  • 无法可视化调试

2)行为树(XML 配置 + tick 循环)

<Sequence> <GoalReached/> <ComputePath/> <FollowPath/> <SpinRecovery/> </Sequence>

特点:

  • 流程写在XML / 图形
  • 不用改代码,改树就能改逻辑
  • 每帧只跑一小步(tick)
  • 可以中途挂起(Running)
  • 可以自动重试、恢复、切换策略
  • 可以可视化看机器人卡在哪一步

最关键的区别:能不能异步、能不能恢复

普通面向过程代码:

  • 一旦进入while(1)就卡死在里面
  • 不能暂停,不能保存进度
  • 异常处理全靠 if 堆

行为树:

  • 每帧只执行一小步,然后返回
  • 可以标记Running表示 “还没做完,下次继续”
  • 环境变了,树会自动重新走流程
  • 自带容错、重试、恢复机制

它就是 “不会卡死、自带容错、可配置” 的面向过程。


再对应到你熟悉的编程概念

  • Sequence 节点 → 就是代码里的{ ... }顺序执行
  • Selector 节点 → 就是if / else if选择执行
  • Running → 就是函数没执行完,下次继续
  • Decorator → 就是 for、while、timeout

所以:行为树 = 图形化 + 异步化 + 容错化 的面向过程

你觉得它像面向过程,非常正确,它本来就是面向过程的现代化工程版。


那 FSM 像什么?

FSM 更像:面向对象 + 状态变量 + switch case

switch(state) { case NAVIGATING: if(obstacle) state = AVOIDING; break; case AVOIDING: if(clear) state = NAVIGATING; break; }

状态多了就炸,逻辑乱飞。


最终超级总结(你一定会豁然开朗)

  • 面向过程:代码写死的顺序流程
  • 行为树 BT:可配置、可可视化、可恢复的柔性面向过程
  • FSM:状态跳转式的逻辑,容易乱

所以你觉得 BT 很好理解,因为它本来就是你最熟悉的思路,只是换了个可视化的壳。

http://www.jsqmd.com/news/618376/

相关文章:

  • 2026香港本科直申留学机构哪家专业?一站式申请与口碑好的咨询机构推荐 - 品牌2026
  • 南宁良庆区纳百旭建材经营部:南宁二手木方 二手模板 覆膜板定制公司电话 - LYL仔仔
  • AI写代码这件事,正在淘汰一批软件团队
  • 【专题】Awesome-Dify-Workflow:零基础搭建AI应用的终极指南
  • gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具讼
  • 辽阳兴旺石墨制品企业文化建设咋样,未来发展潜力大不大社会责任感强吗 - 工业推荐榜
  • Win11Debloat:给你的Windows 11来一次“数字瘦身“的3步指南
  • 终极提速方案:百度网盘macOS限速破解插件完全指南
  • Mac 能读移动硬盘却无法写入?这样做彻底解决移动硬盘读写问题
  • 严管?虚拟数字人新规拟出台!怎么做好AI合规(算法、大模型备案)
  • 2026年国际学校必备:SAT高分优质培训机构推荐与课程选择 - 品牌2026
  • EmojiOne彩色表情字体:为你的项目注入生动表情的终极指南
  • 文墨共鸣GPU算力优化:StructBERT模型显存占用降低40%的部署技巧
  • Clawdbot开源AI平台教程:Qwen3:32B与其它模型(如Llama3)共存的路由策略配置
  • 终极Windows 11优化指南:用Win11Debloat一键清理系统臃肿
  • 全场景实用向——m3u8live.cn 实测推荐:无需安装,一键搞定所有M3U8播放与调试需求
  • 别再用Excel手动分析了!用Dify+Spring Boot做个热点监控机器人,自动推送到飞书群
  • 【紧急预警】欧盟AI Act过渡期仅剩117天!SITS大会现场发布的GDPR-Ready合规迁移路线图(含5类高风险场景应答模板)
  • DDT4All汽车诊断工具:从零开始掌握专业级ECU调参与故障诊断
  • Pentaho Kettle数据血缘追踪架构深度解析:构建企业级数据治理核心能力
  • 2026年长沙妇科手术床选购攻略:教您三招省钱挑对高性价比产品 - 精选优质企业推荐榜
  • G-Helper:华硕笔记本终极轻量化控制方案,释放硬件全部潜能
  • ORM性能测试Benchmark(最终版)悠
  • AI开发-python-langchain框架(--串行流程 )舷
  • 从Python\+MySQL到Redis:非关系型数据库详解(PyCharm实操版)
  • 细聊石墨配件批发生产厂,选哪家更能满足定制需求? - 工业设备
  • 2026年护理床选购指南:教你3招挑选高性价比病床 - 精选优质企业推荐榜
  • 2026普通人转行,推荐一个好就业的方向——人工智能大模型
  • 别再被公私钥搞晕了!支付宝Python SDK配置中最容易出错的几个细节(附最新网关)
  • 郭老师-越善良的人,越懂得无情