行为树BehaviorTree学习记录6_文档里没有的

本文介绍了如何在行为树中通过`tree.rootBlackboard()`获取黑板指针进行操作,强调了子树独立黑板的特性。还讨论了XML脚本设置黑板、简单节点使用端口的方法,以及tickWhileRunning()等控制行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(为免误导,特免责声明如下:本文所有内容,只是基于个人当前理解和实际做法,后面亦会有更正和修订,但任何版本都不免有个人能力有限、理解有误或者工作环境不同的状况,故文中内容仅供参考。任何人都可以借鉴或者直接使用代码片段,但对任何直接引用或者借鉴产生的技术问题等后果,作者不承担任何责任。)

从外部写读写黑板

  • 通过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")
});

tickWhileRunning() vs tickOnce() vs tickExactlyOnce ()

config的使用方法

### BehaviorTree 4.6 的相关信息 目前并未提供直接针对 BehaviorTree 4.6 版本的具体文档或更新日志引用。然而,可以基于常见的版本发布惯例以及行为树框架的一般特性进行推测和说明。 #### 行为树框架概述 Behavior Tree 是一种用于实现复杂决策逻辑的结构化方法,在游戏开发、机器人控制以及其他自动化领域广泛应用。其核心理念在于通过节点组合构建一棵树形结构,从而定义一系列可执行的行为模式[^3]。 #### 更新日志与文档的重要性 通常情况下,软件库或框架的新版本会附带详细的 Release Notes 或 Changelog 文件,这些文件记录了新功能引入、API 变更及已修复问题等内容。对于 HALCON 这样的工具而言,其不兼容性主要体现在二进制层面而非语言接口上[^1];而像 Swagger 中使用的 `@ApiResponse` 注解,则更多关注于 API 文档隐藏机制及其便捷性[^2]。因此,假设 BehaviorTree 4.6 遵循类似的实践标准: - **新增功能**:可能包括新的节点类型支持(例如装饰器节点优化)、性能改进或是调试辅助工具增强。 - **变更内容**:部分现有函数签名可能会调整以适应更广泛的使用场景。 - **错误修正**:解决先前版本中存在的稳定性或功能性缺陷。 以下是 Python 实现的一个简单行为树例子作为参考: ```python class Node: def execute(self): raise NotImplementedError() class Sequence(Node): def __init__(self, children): self.children = children def execute(self): for child in self.children: result = child.execute() if not result: return False return True class Action(Node): def __init__(self, name): self.name = name def execute(self): print(f"Executing {self.name}") return True tree = Sequence([Action("Task A"), Action("Task B")]) print(tree.execute()) ``` 尽管上述代码片段并非特指 BehaviorTree 4.6,但它展示了如何利用类继承创建基本的行为树架构[^3]。 #### 推荐行动方案 建议访问官方 GitHub 存储库或其他权威资源站点查询确切的 BehaviorTree 4.6 发布详情。如果无法找到具体资料,考虑联系开发者社区获进一步指导。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值