类 Subtree
BT::Tree
有一个成员是 std::vector< Subtree::Ptr > subtrees
。类BT::Tree::Subtree
的成员函数如下:1
2
3
4
5
6
7Blackboard::Ptr blackboard
std::string instance_name
std::vector< TreeNode::Ptr > nodes
std::string tree_ID
instance_name
的结果:1
2
3subA::5
subB::16
subB::16/SubC::20
其中SubC
是子树SubB
的子树。
tree_ID
是把instance_name
的数字去掉了。
emitStateChanged
TreeNode::emitStateChanged()
是 TreeNode
类中的一个方法。它用于发出信号,告知树节点的状态已发生变化。此方法对于在行为树中启用响应式和异步行为至关重要。当节点状态发生变化(例如,从running
变为成功或失败)时,系统会调用 emitStateChanged()
来通知树,并可能触发进一步的操作或更新。 类似Qt中的信号和槽的机制。
StdCoutLogger
StdCoutLogger
继承 StatusChangeLogger
。这个类可以在终端里打印出行为树的日志,相当于Groot Pro的弱化版,可以用来看节点的状态变化,勉强算一个调试工具。
一般这样用,在createTree
之后,tick
之前。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17auto tree = factory.createTree("main", maintree_bb);
BT::StdCoutLogger cout_logger(tree);
// cout_logger.setEnabled(false);
while (true)
{
try
{
tree.tickOnce();
}
catch (BT::RuntimeError &error)
{
printf("behavior tree tick Runtime Error: %s \n",
error.what());
break;
}
tree.sleep(std::chrono::milliseconds(100));
}
这样会直接打印日志,另外有两个常用函数:
void setEnabled(bool enabled) 相当于打印日志的开关,结合参数会很有用
void enableTransitionToIdle(bool enable)