Skip to content
/ abtree Public

Asynchronous behavior tree framework with behavior forest collaboration,built on Python asyncio for multi-agent systems and autonomous decision-making.

License

Notifications You must be signed in to change notification settings

xiongwc/abtree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

72 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ 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 & 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

πŸ“ 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

  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

About

Asynchronous behavior tree framework with behavior forest collaboration,built on Python asyncio for multi-agent systems and autonomous decision-making.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages