尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

行为树BehaviorTree.CPP

行为树BehaviorTree.CPP
📅 发布时间:2026/6/18 22:07:35

行为树BehaviorTree.CPP

BehaviorTree.CPP:

  BehaviorTree.CPP 本质上就是一个用现代 C++11/14 编写的、专注于行为树执行的开源库,不是 ROS 专属,但被 ROS 2 生态广泛采用最为行为规划树(尤其是 Nav2)。

1.1 核心思想

行为树是一种模块化、可复用、可调试的决策结构,用于描述智能体(如机器人)在复杂环境中的任务执行逻辑。相比传统状态机(FSM),它更灵活、层次清晰、易于扩展。

 
  • 节点类型(关键):
    • 控制节点(Control Nodes):
      • Sequence:顺序执行子节点,任一失败则整体失败。
      • Fallback(或 Selector):顺序尝试子节点,任一成功则整体成功。
      • Parallel:并行执行多个子节点,按成功/失败数量决定结果。
    • 执行节点(Leaf Nodes):
      • Action:执行具体动作(如“移动到A点”)。
      • Condition:判断条件(如“是否到达目标?”)。
    • 装饰节点(Decorator):
      • Inverter:反转子节点结果。
      • RepeatUntilFailure:重复执行直到失败。
      • Timeout:带超时限制。
 

1.2 为什么 ROS 2 选择行为树?

  • 可读性强:XML 或代码可直观表示任务流程。
  • 动态重配置:运行时可热加载新树。
  • 与导航栈深度集成:如 Nav2 默认使用 BT 作为高层决策器。
  • 跨语言支持:C++ 编写高性能节点,Python 用于快速原型。

1.3 组件关系:  

    

BehaviorTree.CPP (底层库)
↓
Nav2 BT Navigator (ROS 2 插件)
↓
用户自定义 BT 节点(C++/Python)
↓
XML 描述任务流程

1.4  使用方法:  

  • 替换默认树:修改 nav2_params.yaml 中的 default_bt_xml_filename。
  • 扩展节点:实现如 “避障后重规划”、“充电后继续任务” 等自定义逻辑。
  • 调试工具:使用 Groot2(官方 GUI)可视化运行时树状态。

2 架构分析:

▶ 模块 2.1:树结构定义(Tree Structure)

  • BT::Tree:表示整棵树的运行时对象。
  • BT::Node:所有节点的基类(抽象类)。
  • XML 解析器:支持从 XML 文件构建树(使用 tinyxml2)。

▶ 模块 2:节点类型体系(Node Types)

BehaviorTree.CPP 将节点分为 4 类,每类有多个子类:

ReactiveSequence:反应式每次都从tick开始执行,用于持续监控类;Sequence同步式下次tich从中断的位置继续(状态记忆))

image

 

▶ 模块 3:节点通信机制:黑板(Blackboard)

    • 作用:所有节点共享的键值存储(Key-Value Store),用于节点间传递参数(如目标位置、路径),避免全局变量。
    • image

▶ 模块 4:执行模型(Execution Model)

  • Tick 机制:每帧调用 tree.tickOnce(),从根节点递归执行。
  • 异步支持:
    • BT::AsyncActionNode:子线程执行耗时操作(如路径规划)。
    • 返回 RUNNING 表示“任务进行中”,下次 tick 继续检查。
  • 事件驱动:支持外部中断(如“紧急停止”)。

 

▶ 模块 5:工厂与插件系统(Factory & Plugin)

  • BT::BehaviorTreeFactory:负责注册节点类型。

注册方式:

image

 

▶ 模块 6:调试与可视化(Groot2)

  • Groot2:官方图形化工具(Qt 编写),可:
    • 编辑 XML 树
    • 实时连接运行中的树,查看节点状态(红/绿/黄)
    • 回放执行日志

3 开发步骤:

  nav2用yaml作为系统配置工具(避免硬编码,告诉 bt_navigator:加载哪个 XML 行为树文件;告诉 pluginlib:需要动态加载哪些 C++ 插件库(.so 文件);为自定义节点提供运行时参数),用xml作为行为逻辑配置文件(Groot2所需,缩进支持嵌套和注释;定义任务执行逻辑:节点如何组合(顺序、选择、并行);通过 {key} 引用黑板数据;节点名必须与 pluginlib 注册名一致),至于为何选用他们见导航《脚本配置文件》

image

 

  • 利用Groot2图形工具设计流程图(拖拽式设计,调试验证),生成xml文件给nav2用做行为逻辑配置文件(行为树的地图),后者用其生成对应节点(C++用tinyxml2进行解析生成节点)。
  • 系统启动Nav2:加载参数文件yaml,启动一下核心模块:
    • amcl(定位)
    • global_planner(全局路径规划,如 SmacPlanner)
    • local_controller(局部跟踪,如 DWBController)
    • bt_navigator(行为树导航器) ← 主角
  • bt_navigator 初始化

    • 读取配置中的 default_bt_xml_filename(例如 navigate_w_replanning_and_recovery.xml)
    • 使用 BehaviorTree.CPP 的 BehaviorTreeFactory 加载所有注册的节点插件(通过 pluginlib)
    • 构建 BT::Tree 对象(但不立即执行)

 

  • 用户发送导航目标,bt_navigator 作为 Action Server,收到该请求将目标存入黑板(Blackboard)【黑板是全局共享的 Key-Value 存储,所有 BT 节点都能读写】
  • 行为树开始执行(BT Execution Loop),启动主循环tree.tickOnce(),从根节点开始递归执行子节点

  • 执行更新目标condition节点, 执行 ComputePathToPose(Action 节点),执行 FollowPath(Action 节点),处理异常

1.x 资源文档:

  • 推荐中文教程/文章:
    • 古月居:ROS 2 行为树入门(搜索“行为树”)
    • CSDN 系列:BehaviorTree.CPP 源码解析(适合 C++ 开发者)
    • B站视频:《ROS2 行为树原理与实战》(搜索关键词)
  • 官方 GitHub:https://github.com/BehaviorTree/BehaviorTree.CPP
  • 官方文档(英文):https://www.behaviortree.dev/
    • https://github.com/ly0/BehaviorTree-RTThread(个人移植,无维护)
    • https://github.com/ixydo/rt-thread-bt-demo(基于 RT-Thread 4.0 + STM32F4)

相关新闻

  • 2025氨氮水质监测设备厂家有哪些,废水监测设备厂家有哪些
  • 2025年11月小红书代理商排名全览:基于多维度数据的中立评价
  • 2025年靠谱的西安水泵_西安水泵批发厂家实力及用户口碑最新推荐榜

最新新闻

  • 2026苏州钻石回收实测|国标4C定级,全城无套路靠谱门店变现指南 - 薛定谔的梨花猫
  • C语言宽字符处理:wmemcmp、wmemcpy、wprintf核心函数详解与实战
  • 多模态大语言模型LISA
  • 2026长沙回收百达翡丽手表门店分级指南,一线标杆店铺评级,区分正规与小作坊 - 名奢变现站
  • 如何通过WeChatMsg实现微信聊天记录的本地化解析与数据主权保护?
  • 告别GUI开发噩梦:用Dear ImGui在30分钟内为C++项目添加专业界面

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号