BehaviorTree行为树-机器人及自动驾驶

摘要:

行为树是一种模块化、层次化的决策框架,广泛用于机器人及自动驾驶系统。它通过树状结构组织任务节点,实现清晰的任务编排与动态响应,显著提升了复杂场景下的决策可读性、可维护性与可靠性。在自动驾驶中,行为树高效协调感知、规划与控制模块,是实现安全、智能驾驶的关键技术之一

1、基本概念

与有限状态机不同,行为树是由层次节点构成的树状结构,用于控制"任务"的执行流程。更适用于复杂行为决策的贯序动作,与FSM和HFSM相比优缺点:

特性 行为树 有限状态机 分层状态机
核心思想 模块化的任务执行与条件检查,通过树形结构组织。 系统在任何时刻处于一个确定状态,事件触发状态间转换。 FSM的扩展,状态可包含子状态,形成层次以复用逻辑。
可读性与可维护性 优点:极高。树形结构清晰直观,模块化强,易于增删、复用节点。 缺点:低。当状态和转换增多时,会变成难以维护的"蜘蛛网"。 中等。优于普通FSM,层次化减少了转换复杂度,但大型系统仍可能混乱。
模块化与复用性 优点:极强。节点(如条件、动作、子树)是天然模块,可灵活组合与复用。 缺点:极弱。状态和转换逻辑紧耦合,复用性差。 中等。通过子状态复用部分逻辑,但整体转换网络依然僵硬。
动态响应与反应性 优点:优异。通过高频率的从根节点向下遍历,能持续监控条件变化,即时响应外部事件。 缺点:较差。依赖特定事件触发转换,对未建模的事件不响应,容易出现状态"停滞"。 中等。与FSM类似,依赖事件驱动,但可通过层次设计部分提升响应能力。
设计复杂度 优点:低。适合复杂、需要频繁调整的逻辑,设计过程直观(搭积木)。 优点:低。适合状态少、流程固定的简单逻辑。 中等。适合中等复杂度逻辑,能用层次简化设计,但仍有状态爆炸风险。
运行时效率 潜在缺点:可能较低。每帧遍历可能带来开销,需通过缓存、异步等优化。 优点:高。仅需处理当前状态的逻辑和输入事件,效率稳定。 优点:高。与FSM类似,仅处理当前活跃状态链。
适用场景 机器人、游戏AI、自动驾驶等需要高模块化、高反应性、逻辑复杂的动态决策系统。 简单控制器、UI流程、协议解析等状态明确、转换固定的场景。 嵌入式系统、复杂UI、中等规模游戏AI等需要结构化状态但逻辑相对固定的场景。

但是大多数开发场景是HFSM结合BehaviorTree组合使用,才能更灵活的实现复杂逻辑,实现框架逻辑上的优势互补

tick

一个时钟周期,也就是一个运行周期,一个名为"tick"的信号被发送到树的根部,并通过树传播,直到到达一个叶子节点。

节点状态 NodeStatus

cpp 复制代码
enum class NodeStatus
{
  IDLE = 0,
  RUNNING = 1,
  SUCCESS = 2,
  FAILURE = 3,
  SKIPPED = 4,
};

节点在一次tick周期中执行完一定会返回一个节点状态,节点枚举如上:一般返回RUNNING SUCCESS FAILURE三种状态,IDLE也可能

节点分类

ActionNode

2、BehaviorTree.CPP源码编译

github源码下载地址:

https://github.com/BehaviorTree/BehaviorTree.CPP

使用cmake编译时候会依赖zmq(负责和Groot开发)、sql(日志)以及gtest (单元测试),如果这些需要的话需要在本地进行安装,本文只是测试不需要这些,所以在cmakelsit中进行修改

这三个都给改成OFF就不会有依赖

然后命令行操作如下:

bash 复制代码
mkdir build_release
cmake -S . -B build_release -DCMAKE_INSTALL_PREFIX=/home/qhr/Downloads/behavier
cmake --build build_release --parallel
cmake --install build_release --prefix /home/qhr/Downloads/behavier

/home/qhr/Downloads/behavier这个是编译产物的存放路径,大家可以根据自己的条件进行修改生成的产物上图,至此测试需要的依赖头和库已经编译出来

相关推荐
QXWZ_IA几秒前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
java_logo2 分钟前
Docker 部署 ReMe:轻松搭建 AI Agent 记忆管理平台
人工智能·docker·容器·ai agent·轩辕镜像·reme·agentscope-ai
硅谷秋水20 分钟前
从VLM规划器到机器人智能体:面向依赖历史信息的操控任务自演化框架
人工智能·机器学习·语言模型·机器人
西安小哥27 分钟前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
Vex2une27 分钟前
AI 渲染正在重写游戏美术的账本:提效、外包与新的门槛
人工智能·aigc·游戏美术·神经渲染·dlss 5·ai 渲染·游戏开发门槛
LabVIEW开发1 小时前
AI 如何接进 LabVIEW:链路怎么搭、边界在哪、还差什么
人工智能·驱动开发·labview
liferecords1 小时前
不训练一个参数,把图像编辑器变成视频编辑器:EditVid 的局部-全局拆解术
人工智能·llm·aigc·多模态
装不满的克莱因瓶1 小时前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
挖掘狂人2 小时前
程序员转型抉择:转 Agent 开发还是转全栈?一份基于招聘市场的冷静分析
人工智能·程序员·agent
墨林陌2 小时前
AI 热点日报(2026-11-10):英伟达AI Day首尔开幕,苹果重回市值第一,黄仁勋遭免职调查
人工智能