Skip to main content

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

PythonLicense StarsForks

ไธญๆ–‡ | English


๐Ÿ“‘ Table of Contents


โœจ 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 Communication Modes

โšก 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 system 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 System - 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
  • 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_tree_from_string

# Declarative XML: Express behavior logic in a readable, structured format
xml_string = '''<BehaviorTree name="Robot Decision">
    <Selector 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>
    </Selector>
</BehaviorTree>'''

# Load behavior tree from declarative XML configuration
tree = load_tree_from_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

๐Ÿ“ 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+

๐Ÿ“‹ Code Standards

  • Follow PEP 8 coding standards
  • Use Google style docstrings
  • Add type annotations for all functions
  • Write unit tests for key functionality

๐Ÿ—บ๏ธ Roadmap

  • โœ… v0.1 - Core asynchronous behavior tree framework
  • โœ… v0.2 - XML configuration support
  • โœ… v0.3 - Event system and blackboard optimization
  • ๐ŸŽฏ v0.4 - Advanced node types

๐Ÿค Contributing

  1. Fork the project repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ™ Acknowledgments

Inspiration from BehaviorTree.CPP.


๐Ÿ“œ License

This project is licensed under the MIT License.


โญ If this project helps you, please give us a Star to support development! โญ

GitHub DiscussionsGitHub IssuesGitHub Pull Requests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abtree-0.3.6.tar.gz (79.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

abtree-0.3.6-py3-none-any.whl (76.6 kB view details)

Uploaded Python 3

File details

Details for the file abtree-0.3.6.tar.gz.

File metadata

  • Download URL: abtree-0.3.6.tar.gz
  • Upload date:
  • Size: 79.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for abtree-0.3.6.tar.gz
Algorithm Hash digest
SHA256 b7073361c2f0b54d56226251060d14f50481c2e5e034646140029fa2332e3d22
MD5 03619bee6cf5f0c4959dbf477de028eb
BLAKE2b-256 67f3c76ab793a272334ae124eace4bef1363315348e6b6d7821a7116ed4cc8e9

See more details on using hashes here.

File details

Details for the file abtree-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: abtree-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 76.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for abtree-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b15457f9197c2ff0b47b20ebcc1cc03d556051c94dab78cf9e4145b62965dca7
MD5 519052f75933c583142480ee55be11b9
BLAKE2b-256 bcabdc901f9b45d5ecf5c63381347a1fbbe19d2a4d9747f0a0bdc0cb450fbcb9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page