This is the recommended first BTEng program. It uses TreeBuilder to construct the
tree and TreeExecutor to run it.
Create quickstart.py:
from bteng import Blackboard, NodeStatus, TreeBuilder, TreeExecutor
bb = Blackboard.create("quickstart")
bb.set("battery_ok", True)
tree = (
TreeBuilder(blackboard=bb)
.tree_id("FirstTree")
.sequence("mission")
.condition("BatteryOK", lambda: bb.get("battery_ok", False))
.action("Navigate", lambda: NodeStatus.SUCCESS)
.end()
.build()
)
executor = TreeExecutor()
executor.set_tree(tree)
status = executor.tick_until_result(max_ticks=10)
print(status)
Run it:
python3 quickstart.py
Expected output:
NodeStatus.SUCCESS
The tree uses a Sequence, which means:
BatteryOK.BatteryOK succeeds, tick Navigate.SUCCESS only if both children succeed.If the condition fails, the action is not run:
bb.set("battery_ok", False)
Expected output:
NodeStatus.FAILURE
| Mistake | Fix |
|---|---|
Forgetting .end() |
Close every sequence, fallback, parallel, and decorator scope with .end() |
Starting with BehaviorTreeEngine |
Use TreeBuilder + TreeExecutor for new code |
| Reusing blackboard names across tests | Call Blackboard.reset("name") in test teardown |
| Confusing literals and blackboard keys | Use .literal("port", value) for static values and .map("port", "key") for blackboard lookup |
| Returning arbitrary objects from actions | Return NodeStatus.SUCCESS, NodeStatus.FAILURE, NodeStatus.RUNNING, or a boolean for simple inline nodes |
Next: Which API should I use?.