行为树
Behavior TreeBT常用用树形结构组织动作和条件、决定机器人下一步做什么的任务编排方式。
行为树是组织机器人或游戏角色在多个任务之间切换的一种结构。它先在游戏业流行(2005 年 Damian Isla 在 GDC 讲《光环 2》的 AI 后被广泛采用),后来进入机器人领域。根节点周期性向下发 tick 信号,每个节点返回成功、失败或运行中。叶子是动作节点(如「抓杯子」)和条件节点(如「杯子在视野里吗」);顺序节点从左到右执行子节点,有一个失败就返回失败;回退(选择)节点从左到右尝试,有一个成功就返回成功,适合写「先试 A,不行再做补救 B」。与有限状态机相比,它不必为每对状态写跳转,增删子树更方便。ROS 2 导航框架 Nav2 就用行为树编排导航与恢复动作,常用 C++ 库是 BehaviorTree.CPP。
例子送水机器人的根节点是顺序节点:「导航到桌边」→「检测杯子」→ 回退节点(先「抓杯子」,失败则「调整位置后重抓」)→「递给用户」;某一步返回运行中,下一次 tick 就继续执行这一步。
- 也叫
- Behaviour Tree、行为树框架
- 相关
- 有限状态机、BehaviorTree.CPP(C++ 行为树库)、Nav2、任务规划、原子技能、失败恢复
- 来源
- Wikipedia: Behavior tree (artificial intelligence, robotics and control)
Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction (arXiv 1709.00084)
ros-navigation/navigation2 README