BT2:行为树的基本知识点

 大家好,欢迎大家关注我的知乎专栏慢慢悠悠小马车​​​​​​​


xml文件

行为树按照xml文件格式来设计、书写和保存,如BehaviorTree.CPP/examples/t03_generic_ports.cpp中这样定义了一棵行为树:


     
        
            
            
            
            
        
     

图形化后如下图,表示依次执行4个action node。 

BT2:行为树的基本知识点_第1张图片

 而定义行为树的xml文件,使用createTreeFromText()/createTreeFromFile()加载进来。函数定义在BehaviorTree.CPP/include/behaviortree_cpp_v3/bt_factory.h,声明如下。这时会调用树中各nodes的构造函数。

Tree createTreeFromText(const std::string& text,
                        Blackboard::Ptr blackboard = Blackboard::create());

Tree createTreeFromFile(const std::string& file_path,
                        Blackboard::Ptr blackboard = Blackboard::create());

使用方法如下:

BehaviorTreeFactory factory;
auto tree = factory.createTreeFromText(xml_text);
tree.tickRoot();

tick()

类似于数据结构中“tree”的概念,行为树是控制任务执行流程的分层节点树一个称为“ tick ”的信号,由开发者发送到树的根部并在树的节点中传播,直到它到达树的底部——叶节点。接收到tick信号的节点会执行它的回调,即被设定的该节点的任务,然后向上返回执行的结果。在大多数开源库中,该结果有且只有3种:成功完成SUCCESS,执行失败FAILURE,正在执行RUNNING。

节点种类

BT2:行为树的基本知识点_第2张图片

行为树主要有4种节点,其中的ControlNode和DecoratorNode常由库实现,而ConditionNode和ActionNode需开发者自行实现,即定义何种情况执行何种行为。

  • ControlNode:控制节点,有至少1个子节点,负责控制执行流程;可以细分成非常多的种类。
  • DecoratorNode:装饰节点,有且仅有1个子节点,负责重复执行子节点,或更改子节点的返回结果。
  • ConditionNode:条件节点,没有子节点,需要由开发者实现,不可以返回RUNNING,必须atomic and synchronous,负责任务执行的判断条件,不应该改变系统的状态。
  • ActionNode:动作节点,没有子节点,需要由开发者实现,负责执行具体任务。有同步和异步之分。

你可能感兴趣的:(行为树,行为树,机器人,决策,状态机,自动驾驶)