(为免误导,特免责声明如下:本文所有内容,只是基于个人当前理解和实际做法,后面亦会有更正和修订,但任何版本都不免有个人能力有限、理解有误或者工作环境不同的状况,故文中内容仅供参考。任何人都可以借鉴或者直接使用代码片段,但对任何直接引用或者借鉴产生的技术问题等后果,作者不承担任何责任。)
从外部写读写黑板
- 通过tree.rootBlackboard()获取黑板指针,通过该指针操作黑板,但根目录的黑板不会传导到子树,即子树有自己的黑板,没法自动的读写根树的黑板,需要做重映射(重映射也不难,只需要在xml中添加等号连接)。
(已验证可用,只是语法有点不同,需要加类模板)
BT::BehaviorTreeFactory factory;
// node
factory.registerNodeType<PickUpObject>("PickUpObject");
auto tree = factory.createTreeFromFile(tree_path);
// initialize some values before ticking the tree's root
auto blackboard = tree.rootBlackboard();
blackboard->set("key", "value");
tree.tickRoot();
- 用xml脚本
SetBlackboard (version 3.X) 或者 Script (version 4.X)
在简单节点中使用端口
(已验证可用)
factory.registerSimpleAction("GetInitialLocation",
[this](BT::TreeNode& self) -> BT::NodeStatus {
self.setOutput<std::string>("location", this->getInitialLocation());
return BT::NodeStatus::SUCCESS;
}, {
BT::OutputPort<std::string>("location")
});