High-performance asynchronous behavior tree framework with behavior forest collaboration,
Project description
๐ ABTree
Asynchronous behavior tree framework built on Python asyncio, designed for intelligent decision systems with declarative programming paradigm
ไธญๆ | English
๐ Table of Contents
- โจ Core Features
- ๐ฌ Quick Start
- ๐ Documentation
- ๐ง Technology Stack
- ๐บ๏ธ Roadmap
- ๐ค Contributing
- ๐ License
โจ Core Features
| ๐ Async Engine | ๐ฏ Node System | ๐พ Data Management | ๐ฒ Behavior Forest |
|---|---|---|---|
| Based on asyncio High Performance Concurrency |
Rich Node Types Dynamic Registration |
Blackboard System Event Driven |
Multi-tree Collaboration Internal & External Communication |
โก Asynchronous Behavior Tree Engine
- High Performance Async Execution - Concurrent node scheduling based on Python asyncio
- Smart Tick Management - Automated execution cycle management and resource control
- Event Driven Architecture - Asynchronous event dispatcher supporting real-time response
- Memory Optimization - Efficient state management and garbage collection
๐ฏ Rich Node System
- Composite Nodes - Sequence, Selector, Parallel and other classic control flows
- Decorator Nodes - Inverter, Repeater, UntilSuccess and other behavior modifiers
- Action Nodes - Action, Log, Wait, SetBlackboard and other execution units
- Condition Nodes - Condition, CheckBlackboard, Compare and other judgment logic
- Dynamic Registration - Runtime node type registration and extension mechanism
๐พ Smart Data Management
- Blackboard System - Cross-node data sharing and state persistence
- Event Dispatcher - Asynchronous event listening, publishing and subscription mechanism
- State Management - Complete tracking of behavior tree execution state
- Data Validation - Type-safe data access and modification
๐ฒ Behavior Forest Collaboration
- Multi-tree Coordination - Multiple behavior trees working together as a forest
- Communication Modes - Pub/Sub, Req/Resp, Shared Blackboard, State Monitoring, Behavior Invocation, Task Board, External IO
- Forest Management - Centralized forest configuration and lifecycle management
- Performance Monitoring - Real-time performance analysis and optimization suggestions
๐ฌ Quick Start
๐ง Environment Setup
Development Environment Installation
For source code development, debugging, and contributing:
git clone https://github.com/xiongwc/abtree.git
cd abtree
pip install -e .
Production Environment Installation
For production deployment and daily use:
pip install abtree
๐ Basic Usage
๐ Method 1: Programmatic Building
import asyncio
from abtree import BehaviorTree, Sequence, Selector, Action, Condition
from abtree.core import Status
# Define action nodes
class OpenDoor(Action):
async def execute(self):
print("Opening door")
return Status.SUCCESS
class CloseDoor(Action):
async def execute(self):
print("Closing door")
return Status.SUCCESS
# Define condition nodes
class IsDoorOpen(Condition):
async def evaluate(self):
return self.blackboard.get("door_open", False)
# Build behavior tree
root = Selector("Robot Decision")
root.add_child(Sequence("Door Control Sequence"))
root.children[0].add_child(IsDoorOpen("Check Door Status"))
root.children[0].add_child(CloseDoor("Close Door"))
# Create behavior tree instance
tree = BehaviorTree()
tree.load_from_node(root)
# Execute
async def main():
blackboard = tree.blackboard
blackboard.set("door_open", True)
result = await tree.tick()
print(f"Execution result: {result}")
asyncio.run(main())
๐ Method 2: Declarative XML Configuration
import asyncio
from abtree import load_from_xml_string
# Declarative XML: Express behavior logic in a readable, structured format
xml_string = '''
<BehaviorTree name="Robot Decision">
<Sequence name="Door Control Sequence">
<CheckBlackboard name="Check Door Status" key="door_open" expected_value="true" />
<Log name="Close Door Log" message="Door detected open, preparing to close" />
<Wait name="Close Door Wait" duration="1.0" />
</Sequence>
</BehaviorTree>'''
# Load behavior tree from declarative XML configuration
tree = load_from_xml_string(xml_string)
# Execute
async def main():
blackboard = tree.blackboard
blackboard.set("door_open", True)
result = await tree.tick()
print(f"Execution result: {result}")
asyncio.run(main())
๐ฒ Behavior Forest Example
import asyncio
from abtree import (
BehaviorForest, ForestNode, ForestNodeType,
BehaviorTree, Sequence, Selector, Action, Condition
)
from abtree.core import Status
# Simple robot action node
class RobotAction(Action):
def __init__(self, name: str, action_type: str):
super().__init__(name)
self.action_type = action_type
async def execute(self):
print(f"Robot {self.action_type}")
if self.action_type == "cleaning":
self.blackboard.set("cleaning_needed", False)
return Status.SUCCESS
# Simple condition node
class SimpleCondition(Condition):
def __init__(self, name: str, key: str, default: bool = True):
super().__init__(name)
self.key = key
self.default = default
async def evaluate(self):
return self.blackboard.get(self.key, self.default)
def create_robot_tree(robot_id: str) -> BehaviorTree:
"""Create a simple robot behavior tree"""
root = Selector(f"Robot_{robot_id}")
# Cleaning sequence
cleaning_seq = Sequence("Cleaning")
cleaning_seq.add_child(SimpleCondition("Check Cleaning", "cleaning_needed"))
cleaning_seq.add_child(RobotAction("Clean", "cleaning"))
cleaning_seq.add_child(RobotAction("Navigate", "navigating"))
root.add_child(cleaning_seq)
tree = BehaviorTree()
tree.load_from_node(root)
return tree
async def main():
# Create behavior forest
forest = BehaviorForest("Robot Forest")
# Add robot nodes
for robot_id in ["R1", "R2", "R3"]:
tree = create_robot_tree(robot_id)
node = ForestNode(
name=f"Robot_{robot_id}",
tree=tree,
node_type=ForestNodeType.WORKER,
capabilities={"cleaning", "navigation"}
)
forest.add_node(node)
# Start forest
await forest.start()
# Execute ticks
for i in range(3):
results = await forest.tick()
print(f"Tick {i+1}: {results}")
await asyncio.sleep(0.5)
await forest.stop()
if __name__ == "__main__":
asyncio.run(main())
๐ Documentation
- ๐ Quick Start: examples/
- ๐ง API Reference: docs/api.md
- ๐ ๏ธ CLI Tools: cli/
- ๐งช Testing: tests/
๐ Project Structure
abtree/
โโโ abtree/ # ๐ฆ Core package
โ โโโ core/ # ๐ง Core functionality
โ โโโ engine/ # โ๏ธ Engine system
โ โโโ forest/ # ๐ฒ Behavior forest
โ โโโ nodes/ # ๐ฏ Node implementations
โ โโโ parser/ # ๐ Configuration parsing
โ โโโ registry/ # ๐ Node registration
โ โโโ utils/ # ๐ง Utilities
โโโ cli/ # ๐ฅ๏ธ Command line tools
โโโ docs/ # ๐ Documentation
โโโ examples/ # ๐ Example code
โโโ tests/ # ๐งช Test suite
โโโ scripts/ # ๐ Script tools
โโโ test_reports/ # ๐ Test reports
โโโ pyproject.toml # โ๏ธ Build and dependency configuration
๐ง Technology Stack
| Component | Technology | Version |
|---|---|---|
| Language | Python | 3.8+ |
| Async Framework | asyncio | Built-in |
| XML Processing | xml.etree | Built-in |
| Testing | pytest | 7.0+ |
| Type Checking | mypy | 1.0+ |
๐บ๏ธ Roadmap
- โ v0.1 - Core asynchronous behavior tree framework
- โ v0.2 - XML configuration support
- โ v0.3 - event dispatcher and blackboard optimization
- ๐ฏ v0.4 - Advanced node types
- ๐ค v0.5 - ROS2 integration support
๐ค Contributing
- Fork the project repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ Acknowledgments
Inspiration from BehaviorTree.CPP.
๐ License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abtree-0.3.12.tar.gz.
File metadata
- Download URL: abtree-0.3.12.tar.gz
- Upload date:
- Size: 106.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcd924236c5a3800235fd9a7f867fae13e3c0596c71b3b8daa645c2e63a909d5
|
|
| MD5 |
956546ba770c0a31eb34992b3d8691ec
|
|
| BLAKE2b-256 |
a690e63d34a37f37d41b2ae0d8f2a3db25e54584588b31947e143f00f9a42a92
|
File details
Details for the file abtree-0.3.12-py3-none-any.whl.
File metadata
- Download URL: abtree-0.3.12-py3-none-any.whl
- Upload date:
- Size: 82.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
718395fec934e37ff40b47aa5e79135badf26926b37a3565408e216a4d91a615
|
|
| MD5 |
a28bf34605ebd42af1ec317f7cf69b45
|
|
| BLAKE2b-256 |
828885c26d446933e79035246c9266257ecd93230a0ea167c5a4084a4c954b89
|