行为树是ros2比较大的改动地方之一,替代了之前ros1中的状态机。行为树和状态机之前的差异这里不在做赘述,感兴趣的可以搜索相关的资料。
常见的行为树(bt)框架有C++版本的BehaviorTree.CPP库,和python版本的py_tree库。看个人喜好,因为我工作中写逻辑框架的时候需要快速实现并且可视化下框架结构后用于小组讨论,所以我在项目的初期甚至整个项目中也都是使用py_trees。
使用命令行安装
sudo apt install ros-foxy-py-trees # 树结构包
sudo apt install ros-foxy-py-trees-ros-viewer # 查看树的结构脚本文件
行为树概念大致分为:
1. 行为 behavior;
2. 生命周期;
3. 黑板(blackboard);
4. 可视化行为树;
· 其中behavior算是框架中的最小粒度,一切操作逻辑和流程都可以使用behavior来描述(我是这么理解的)。
· 生命周期,py_tree中的生命周期其实已经涵在行为树中,理解生命周期中的每个节点对于行为树什么时候启动什么时候终止有很大的帮助,因此需要将生命周期概念和行为树放一起。
实际使用中自定义的behavior基本上会遇到以下7个状态(后面详细说明什么时候触发这些状态)
__init__
setup()
initialise()
tick()