最近的项目中涉及机器人任务执行,考虑到直接写if-else虽然前期效率很高,但是随着逻辑复杂度的增加,最后的可读性和可维护性会较差。由于项目是基于Python的,因此研究了一下py_trees这个开源项目。
Why Behavior Tree?
个人总结BT的优势如下:
1. Model-Based. 基于一种模型的编程范式,在规则的约束下,不容易发生歧义,不会快速地随着问题的复杂度增加而陷入if-else的灾难中。
2. Reactive. 基于tick令牌的轮询运行机制,允许高优先级的事件打断正在运行的action。
3. Visualisation. 在设计上支持事件流的图形化,提高了逻辑的可读性和可维护性。
基本概念
基本概念不过多讲了,可以参看以下几篇文章:
py_trees快速实践
感觉pt_trees的Github和教程对初学者不是很友好,没有给出马上就能上手的代码片段。本文的快速实践路线如下:
1. 环境搭建
由于py_trees已经在PyPi上,可直接激活一个虚拟环境,然后下载即可:
:~$ conda activate base
:~$ pip install py_trees
2. 拷贝