Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
humble

Package Summary

Tags No category tags.
Version 2.2.3
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version release/2.2.x
Last Updated 2023-02-08
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

Py Trees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases] [Developers]


About

PyTrees is a python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics. Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2023-01-28] The [2.2.x Release][new-2.2.x] is out! Sequences and Selectors with AND without memory.
  • [2023-01-28] Get Started with py_trees in under 5mins.
  • [2023-01-28] This is now a poetry project with configuration governed by pyproject.toml.
    • The vestigial setup.py is only to assist distribution where PEP-517 is not yet well supported.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x] [![0.7.x][docs-0.7.x-image]][docs-0.7.x] [![0.6.x][docs-0.6.x-image]][docs-0.6.x]

Getting Started

You can get started on CodeSpaces (with no mismatched environment issues and in under 5mins) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py38 py310 format check mypy38 mypy310
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py38
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.2.x 2.1.x 2.0.x 1.2.x 0.7.x 0.6.x
Sources [![devel][sources-devel-image]][sources-devel] [![2.1.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x] [![0.7.x][sources-0.7.x-image]][sources-0.7.x] [![0.6.x][sources-0.6.x-image]][sources-0.6.x]
Compatibility [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 2.7][python27-image]][python27-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

Forthcoming

  • ...

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

  • [behaviours, decorators] behaviours.Count -> behaviours.StatusQueue + decorators.Count (new), #376
  • [behaviours] StatusSequence -> StatusQueue, #372
  • [behaviours, decorators, composites] abstract base classes, #375
  • [composites] use explicit composite arguments, #370

The latter is a theme adopted more liberally across (most) of the py_trees library. As this library has grown, it's become apparent that being explicit about passing arguments to constructors is more important than the convenience of eliminating a few characters. Not only does it prevent bugs, it eases refactoring and greatly improves readability of the code. In fact, you'll save time in the long run.

``` python

This:

parallel = py_trees.composite.Parallel(

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
jazzy

Package Summary

Tags No category tags.
Version 2.3.0
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version devel
Last Updated 2025-06-19
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Sebastian Castro

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

PyTrees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases]


About

PyTrees is a Python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics.

Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators, and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2025-01-11] Support for Python 3.12 was added, and Python 3.8 was dropped.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]

Getting Started

You can get started on Codespaces (with no mismatched environment issues and in under 5 minutes) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py310 py312 format check mypy310 mypy312
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py310
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.3.x - Support for Python 3.12 was added, and Python 3.8 was dropped.
  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.3.x 2.2.x 2.1.x 2.0.x 1.2.x  
Sources [![devel][sources-devel-image]][sources-devel] [![2.3.x][sources-2.3.x-image]][sources-2.3.x] [![2.2.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x]  
Compatibility [![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.8][python38-image]][python38-docs]
[![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

2.3.0 (2025-01-11)

  • [code] Fix CI and update to latest Ubuntu/Python versions (#454)
  • [behaviours] Shorten line in docstring (#450)
  • [docs] add ticking tree
  • [composites] Reduce circulation when the parallel node policy is SuccessOnOne (#440)
  • [docs] fix make target (#430)
  • [composites] use typing.Sequence for children argument (#436)
  • Improve timing of tick_tock() and allow stopping on terminal state (#444)
  • [vscode] update extensions, set spell checking to UK
  • [behaviours] add ProbabilisticBehaviour(Behaviour)
  • [readme] consolidate development instructions
  • [code] remove unused import
  • [vscode] recommend extensions, especially devcontainers
  • Contributors: Daniel Stonier, Efe Mert Demir, Nino Walker, Sebastian Castro, gitpushoriginmaster, wanfeng

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
kilted

Package Summary

Tags No category tags.
Version 2.3.0
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version devel
Last Updated 2025-06-19
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Sebastian Castro

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

PyTrees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases]


About

PyTrees is a Python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics.

Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators, and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2025-01-11] Support for Python 3.12 was added, and Python 3.8 was dropped.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]

Getting Started

You can get started on Codespaces (with no mismatched environment issues and in under 5 minutes) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py310 py312 format check mypy310 mypy312
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py310
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.3.x - Support for Python 3.12 was added, and Python 3.8 was dropped.
  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.3.x 2.2.x 2.1.x 2.0.x 1.2.x  
Sources [![devel][sources-devel-image]][sources-devel] [![2.3.x][sources-2.3.x-image]][sources-2.3.x] [![2.2.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x]  
Compatibility [![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.8][python38-image]][python38-docs]
[![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

2.3.0 (2025-01-11)

  • [code] Fix CI and update to latest Ubuntu/Python versions (#454)
  • [behaviours] Shorten line in docstring (#450)
  • [docs] add ticking tree
  • [composites] Reduce circulation when the parallel node policy is SuccessOnOne (#440)
  • [docs] fix make target (#430)
  • [composites] use typing.Sequence for children argument (#436)
  • Improve timing of tick_tock() and allow stopping on terminal state (#444)
  • [vscode] update extensions, set spell checking to UK
  • [behaviours] add ProbabilisticBehaviour(Behaviour)
  • [readme] consolidate development instructions
  • [code] remove unused import
  • [vscode] recommend extensions, especially devcontainers
  • Contributors: Daniel Stonier, Efe Mert Demir, Nino Walker, Sebastian Castro, gitpushoriginmaster, wanfeng

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

File truncated at 100 lines see the full file

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
rolling

Package Summary

Tags No category tags.
Version 2.3.0
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version devel
Last Updated 2025-06-19
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Sebastian Castro

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

PyTrees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases]


About

PyTrees is a Python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics.

Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators, and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2025-01-11] Support for Python 3.12 was added, and Python 3.8 was dropped.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]

Getting Started

You can get started on Codespaces (with no mismatched environment issues and in under 5 minutes) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py310 py312 format check mypy310 mypy312
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py310
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.3.x - Support for Python 3.12 was added, and Python 3.8 was dropped.
  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.3.x 2.2.x 2.1.x 2.0.x 1.2.x  
Sources [![devel][sources-devel-image]][sources-devel] [![2.3.x][sources-2.3.x-image]][sources-2.3.x] [![2.2.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x]  
Compatibility [![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.8][python38-image]][python38-docs]
[![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

2.3.0 (2025-01-11)

  • [code] Fix CI and update to latest Ubuntu/Python versions (#454)
  • [behaviours] Shorten line in docstring (#450)
  • [docs] add ticking tree
  • [composites] Reduce circulation when the parallel node policy is SuccessOnOne (#440)
  • [docs] fix make target (#430)
  • [composites] use typing.Sequence for children argument (#436)
  • Improve timing of tick_tock() and allow stopping on terminal state (#444)
  • [vscode] update extensions, set spell checking to UK
  • [behaviours] add ProbabilisticBehaviour(Behaviour)
  • [readme] consolidate development instructions
  • [code] remove unused import
  • [vscode] recommend extensions, especially devcontainers
  • Contributors: Daniel Stonier, Efe Mert Demir, Nino Walker, Sebastian Castro, gitpushoriginmaster, wanfeng

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

File truncated at 100 lines see the full file

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

No version for distro github showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
humble

Package Summary

Tags No category tags.
Version 2.2.3
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version release/2.2.x
Last Updated 2023-02-08
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

Py Trees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases] [Developers]


About

PyTrees is a python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics. Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2023-01-28] The [2.2.x Release][new-2.2.x] is out! Sequences and Selectors with AND without memory.
  • [2023-01-28] Get Started with py_trees in under 5mins.
  • [2023-01-28] This is now a poetry project with configuration governed by pyproject.toml.
    • The vestigial setup.py is only to assist distribution where PEP-517 is not yet well supported.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x] [![0.7.x][docs-0.7.x-image]][docs-0.7.x] [![0.6.x][docs-0.6.x-image]][docs-0.6.x]

Getting Started

You can get started on CodeSpaces (with no mismatched environment issues and in under 5mins) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py38 py310 format check mypy38 mypy310
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py38
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.2.x 2.1.x 2.0.x 1.2.x 0.7.x 0.6.x
Sources [![devel][sources-devel-image]][sources-devel] [![2.1.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x] [![0.7.x][sources-0.7.x-image]][sources-0.7.x] [![0.6.x][sources-0.6.x-image]][sources-0.6.x]
Compatibility [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 2.7][python27-image]][python27-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

Forthcoming

  • ...

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

  • [behaviours, decorators] behaviours.Count -> behaviours.StatusQueue + decorators.Count (new), #376
  • [behaviours] StatusSequence -> StatusQueue, #372
  • [behaviours, decorators, composites] abstract base classes, #375
  • [composites] use explicit composite arguments, #370

The latter is a theme adopted more liberally across (most) of the py_trees library. As this library has grown, it's become apparent that being explicit about passing arguments to constructors is more important than the convenience of eliminating a few characters. Not only does it prevent bugs, it eases refactoring and greatly improves readability of the code. In fact, you'll save time in the long run.

``` python

This:

parallel = py_trees.composite.Parallel(

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
humble

Package Summary

Tags No category tags.
Version 2.2.3
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version release/2.2.x
Last Updated 2023-02-08
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

Py Trees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases] [Developers]


About

PyTrees is a python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics. Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2023-01-28] The [2.2.x Release][new-2.2.x] is out! Sequences and Selectors with AND without memory.
  • [2023-01-28] Get Started with py_trees in under 5mins.
  • [2023-01-28] This is now a poetry project with configuration governed by pyproject.toml.
    • The vestigial setup.py is only to assist distribution where PEP-517 is not yet well supported.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x] [![0.7.x][docs-0.7.x-image]][docs-0.7.x] [![0.6.x][docs-0.6.x-image]][docs-0.6.x]

Getting Started

You can get started on CodeSpaces (with no mismatched environment issues and in under 5mins) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.8) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py38 py310 format check mypy38 mypy310
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py38
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.2.x 2.1.x 2.0.x 1.2.x 0.7.x 0.6.x
Sources [![devel][sources-devel-image]][sources-devel] [![2.1.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x] [![0.7.x][sources-0.7.x-image]][sources-0.7.x] [![0.6.x][sources-0.6.x-image]][sources-0.6.x]
Compatibility [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.10][python310-image]][python310-docs] [![Python 3.8][python38-image]][python38-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 2.7][python27-image]][python27-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

Forthcoming

  • ...

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

  • [behaviours, decorators] behaviours.Count -> behaviours.StatusQueue + decorators.Count (new), #376
  • [behaviours] StatusSequence -> StatusQueue, #372
  • [behaviours, decorators, composites] abstract base classes, #375
  • [composites] use explicit composite arguments, #370

The latter is a theme adopted more liberally across (most) of the py_trees library. As this library has grown, it's become apparent that being explicit about passing arguments to constructors is more important than the convenience of eliminating a few characters. Not only does it prevent bugs, it eases refactoring and greatly improves readability of the code. In fact, you'll save time in the long run.

``` python

This:

parallel = py_trees.composite.Parallel(

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
iron

Package Summary

Tags No category tags.
Version 2.3.0
License BSD
Build type AMENT_PYTHON
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version devel
Last Updated 2025-06-19
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Sebastian Castro

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

PyTrees

[About] [What’s New?] [Documentation] [Getting Started] [Next Steps] [Releases]


About

PyTrees is a Python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics.

Brief feature list:

  • Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
  • Blackboards for data sharing.
  • A useful library of behaviours, decorators, and idioms.
  • Serialise to a dot graph or render to ascii/unicode in a terminal.
  • Tested on Linux and Mac (YMMV with Windows).

What’s New?

  • [2025-01-11] Support for Python 3.12 was added, and Python 3.8 was dropped.

Documentation

[![devel][docs-devel-image]][docs-devel] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]

Getting Started

You can get started on Codespaces (with no mismatched environment issues and in under 5 minutes) [1]:

  1. Fork the project to your personal account
  2. Click on Code -> Codespaces -> + Create a Codespace
  3. Enter the Terminal
# Install Dependencies
(docker) zen@py_trees:/workspaces/py_trees$ poetry install

# Explore the demos
(docker) zen@py_trees:/workspaces/py_trees$ poetry shell
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-<tab>-<tab>
py-trees-demo-action-behaviour            py-trees-demo-context-switching           py-trees-demo-logging
py-trees-demo-behaviour-lifecycle         py-trees-demo-display-modes               py-trees-demo-pick-up-where-you-left-off
py-trees-demo-blackboard                  py-trees-demo-dot-graphs                  py-trees-demo-selector
py-trees-demo-blackboard-namespaces       py-trees-demo-either-or                   py-trees-demo-sequence
py-trees-demo-blackboard-remappings       py-trees-demo-eternal-guard               py-trees-demo-tree-stewardship
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ py-trees-demo-blackboard
...
(py-trees-py3.10) (docker) zen@py_trees:/workspaces/py_trees$ exit

# Hack some Code

# Run the Formatter, Tests, Linters and Mypy
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -l
py310 py312 format check mypy310 mypy312
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e format
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e py310
...
(docker) zen@py_trees:/workspaces/py_trees$ poetry run tox -e check
...

# Contribute a PR!
# https://github.com/splintered-reality/py_trees/blob/devel/CONTRIBUTING.md

[1] All of the above will, of course, work in a local environment if you have poetry installed. If you’re using VSCode you don’t even need that, just reopen the project in the devcontainer and be froody.

Next Steps

On PyPi:

Examples:

  • ReadTheDocs - PyTrees ROS Tutorials - significantly more edifying than the demos, these incrementally walk through the process of building a decision making layer for a robot. These use ROS2 (sparsely), but merely browsing should be enlightening regardless.

Visualisation:

  • py_trees_js - a javascript library for building your own runtime visualisation tool

Robotics:

Releases

  • 2.3.x - Support for Python 3.12 was added, and Python 3.8 was dropped.
  • 2.2.x - Selectors, Sequences with and without memory. Improved testing and style/type checking.
  • 2.1.x - Chooser deprecated. API housekeeping.
  • 2.0.x - Blackboards V2!
  • 1.2.x - Trees can now shutdown cleanly. StatusToBlackboard and EternalGuard, Visitors get finalise().
  • 1.1.x - Fixes for setup, tick-tock, viz.
  • 1.0.x - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
  • 0.y.x - First open source pre-releases.
  Devel 2.3.x 2.2.x 2.1.x 2.0.x 1.2.x  
Sources [![devel][sources-devel-image]][sources-devel] [![2.3.x][sources-2.3.x-image]][sources-2.3.x] [![2.2.x][sources-2.2.x-image]][sources-2.2.x] [![2.1.x][sources-2.1.x-image]][sources-2.1.x] [![2.0.x][sources-2.0.x-image]][sources-2.0.x] [![1.2.x][sources-1.2.x-image]][sources-1.2.x]  
Compatibility [![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.12][python312-image]][python312-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.10][python310-image]][python310-docs]
[![Python 3.8][python38-image]][python38-docs]
[![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs] [![Python 3.6][python36-image]][python36-docs]

File truncated at 100 lines see the full file

CHANGELOG

Release Notes

2.3.0 (2025-01-11)

  • [code] Fix CI and update to latest Ubuntu/Python versions (#454)
  • [behaviours] Shorten line in docstring (#450)
  • [docs] add ticking tree
  • [composites] Reduce circulation when the parallel node policy is SuccessOnOne (#440)
  • [docs] fix make target (#430)
  • [composites] use typing.Sequence for children argument (#436)
  • Improve timing of tick_tock() and allow stopping on terminal state (#444)
  • [vscode] update extensions, set spell checking to UK
  • [behaviours] add ProbabilisticBehaviour(Behaviour)
  • [readme] consolidate development instructions
  • [code] remove unused import
  • [vscode] recommend extensions, especially devcontainers
  • Contributors: Daniel Stonier, Efe Mert Demir, Nino Walker, Sebastian Castro, gitpushoriginmaster, wanfeng

2.2.3 (2023-02-08)

  • [decorators] a passthrough for debugging and visualisation, #407

2.2.2 (2023-01-28)

  • [docs] 2.2.x release documentation, bugfix for graphviz on read-the-docs, #400

2.2.1 (2023-01-28)

  • [tox] format with black, usort and fix flake8 warnings, #397
  • [docs] sphinx 1.4 -> 5.3, #391

2.2.x (2023-01-23) - Sequences and Selectors with and without Memory!

Headline Feature

  • [composites] sequences and selectors with and without memory (previously experimental in 2.1.6)

This can become confusing, so pay attention and let's define some terminology:

Without Memory - ticking starts with the **first** child
With Memory - ticking attempts to start with the **current** child

Whether the current child exists or not, the composite will always follow the logic above. The only bearing that the current child has on proceedings is in what happens next. Without memory, if the current child is reached, it will tick it without re-initialising it since it is already RUNNING (all other children are not RUNNING and subsequently will be re-initialised). With memory, if no current child is found on that first tick, it will fall back to starting with the first child.

Previously Selectors operated without memory and Sequences with memory. Now both composites support both paradigms. Not only does this bring a pleasing symmetry to the universe that his noodliness would approve of, but it does unlock several practical use cases that previously required rather complex idioms (combinations of behaviours / subtrees).

Refer to the Eternal Guard Demo for an example of a practically useful idiom with two Sequences, one with and the other without memory.

Other New Features

  • [decorators] Repeat and Retry, #371
  • [devenv] much improved development environment, comprehensive formatting, linting, type-checking and testing
    • [poetry] setuptools -> poetry, #389
    • [common] remove viral ramifications of Any from ComparisonExpression, #386
    • [tests] it's mypy now, by the time this ends, it'll be someone else's py , #380
    • [tests] use tox, flake8 in prem-merge #354
    • [tests] switch from deprecating nose to pytest, #350

Breaking API

File truncated at 100 lines see the full file

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Name Deps
py_trees_ros

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
melodic

Package Summary

Tags No category tags.
Version 0.6.9
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version release/0.6.x
Last Updated 2021-01-10
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Naveed Usmani

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

Py Trees

This is a python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics. Brief feature list:

  • Sequence, Selector, Parallel and Chooser composites
  • Blackboards for data sharing
  • Python generators for smarter ticking over the tree graph
  • Python decorators for enabling meta behaviours
  • Render trees to dot graphs or visualise with ascii graphs on stdout

Detailed api reference and demo instructions can be found in the sphinx documentation for the package. There is also the py_trees_ros package which includes additional modules and documentation for using py_trees with ROS.

Sources, Builds & Docs

Devel Melodic Kinetic  
devel-Sources 0.6.x-Sources 0.5.x-Sources  
devel-Status melodic-Status kinetic-Status  
devel-Docs 0.6.x-Docs 0.5.x-Docs  

Getting Started

Installation

From ppa on Ubuntu/Xenial

sudo apt install python-py-trees

From pypi:

pip install py_trees

Or in a sandboxed ROS Kinetic environment (coming soon):

sudo apt install ros-kinetic-py-trees

Development

You can develop in either a virtualenv (python style):

# python 2
source ./virtualenv.bash
# python 3
source ./virtualenv3.bash

or in a catkin environment alongside other ROS py-trees packages:

  • https://github.com/stonier/repos_index/blob/devel/kinetic/py_trees.repos
CHANGELOG

Changelog

Forthcoming

0.6.9 (2021-01-10)

  • [docs] fix some warnings
  • [decorators] setting the child's parent as the decorator

0.6.7 (2019-02-13)

  • [decorators] default option for collapsing decorators (resolves py_trees_ros bug)

0.6.6 (2019-02-13)

[decorators] new-style decorators can be found in py_trees.decorators [decorators] new-style decorators now stop their running child on completion (SUCCESS||FAILURE) [meta] behaviours from functions can now automagically generate names

0.6.5 (2018-09-19)

  • Inverters bugfix - pick up missing feedback messages
  • Eliminate costly blackboard variable check feedback message

0.6.4 (2018-09-19)

  • Ascii tree bugfix - replace awkward newlines with spaces

0.6.3 (2018-09-04)

  • Parallels bugfix - don't send own status to running children, invalidate them instead

0.6.2 (2018-08-31)

  • Oneshot bugfix - react to priority interrupts correctly

0.6.1 (2018-08-20)

  • Oneshot bugfix - no longer permanently modifies the original class

0.6.0 (2018-05-15)

  • Python 2/3 compatibility

0.5.10 (2017-06-17)

  • [meta] add children monkeypatching for composite imposters
  • [blackboard] check for nested variables in WaitForBlackboard

0.5.9 (2017-03-25)

  • [docs] bugfix image links and rewrite the motivation

0.5.8 (2017-03-19)

  • [infra] setup.py tests_require, not test_require

0.5.7 (2017-03-01)

  • [infra] update maintainer email

0.5.5 (2017-03-01)

  • [docs] many minor doc updates
  • [meta] bugfix so that imposter now ticks over composite children
  • [trees] method for getting the tip of the tree
  • [programs] py-trees-render program added

0.5.4 (2017-02-22)

  • [infra] handle pypi/catkin conflicts with install_requires

0.5.2 (2017-02-22)

  • [docs] disable colour when building
  • [docs] sidebar headings
  • [docs] dont require project installation

0.5.1 (2017-02-21)

  • [infra] pypi package enabled

0.5.0 (2017-02-21)

  • [ros] components moved to py_trees_ros
  • [timeout] bugfix to ensure timeout decorator initialises properly
  • [docs] rolled over with napolean style
  • [docs] sphinx documentation updated
  • [imposter] make sure tip() drills down into composites
  • [demos] re-organised into modules

0.4.0 (2017-01-13)

  • [trees] add pre/post handlers after setup, just in case setup fails
  • [introspection] do parent lookups so you can crawl back up a tree
  • [blackboard] permit init of subscriber2blackboard behaviours

File truncated at 100 lines see the full file

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange

Package symbol

py_trees package from py_trees repo

py_trees

ROS Distro
noetic

Package Summary

Tags No category tags.
Version 0.7.6
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Description Python implementation of behaviour trees.
Checkout URI https://github.com/splintered-reality/py_trees.git
VCS Type git
VCS Version release/0.7.x
Last Updated 2021-01-10
Dev Status MAINTAINED
Released RELEASED
Tags python robotics behaviour-trees
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Pythonic implementation of behaviour trees.

Additional Links

Maintainers

  • Daniel Stonier
  • Naveed Usmani

Authors

  • Daniel Stonier
  • Michal Staniaszek
  • Naveed Usmani

Py Trees

This is a python implementation of behaviour trees designed to facilitate the rapid development of medium sized decision making engines for use in fields like robotics. Brief feature list:

  • Sequence, Selector, Parallel and Chooser composites
  • Blackboards for data sharing
  • Python generators for smarter ticking over the tree graph
  • Python decorators for enabling meta behaviours
  • Render trees to dot graphs or visualise with ascii graphs on stdout

Detailed api reference and demo instructions can be found in the sphinx documentation for the package. There is also the py_trees_ros package which includes additional modules and documentation for using py_trees with ROS.

Sources, Builds & Docs

Devel Melodic Kinetic  
devel-Sources 0.6.x-Sources 0.5.x-Sources  
devel-Status melodic-Status kinetic-Status  
devel-Docs 0.6.x-Docs 0.5.x-Docs  

Getting Started

Installation

From ppa on Ubuntu/Xenial

sudo apt install python-py-trees

From pypi:

pip install py_trees

Or in a sandboxed ROS Kinetic environment (coming soon):

sudo apt install ros-kinetic-py-trees

Development

You can develop in either a virtualenv (python style):

source ./venv.bash

or in a catkin environment alongside other ROS py-trees packages:

  • https://github.com/stonier/repos_index/blob/devel/kinetic/py_trees.repos
CHANGELOG

Changelog

Forthcoming

  • ...

0.7.6 (2021-01-10)

  • [infra] skipping archived 0.7.4 and 0.7.5 versions that were dropped in favour of a push to 1.0.x

0.7.4 (2021-01-10)

  • [decorators] setting the child's parent as the decorator

0.7.3 (202019-08-02)

  • [infra] fix cmake version, zip_safe build warnings for catkin

0.7.2 (202019-08-02)

  • [docs] fix some warnings

0.7.1 (202019-07-28)

  • [infra] scripts using python3

0.7.0 (202019-07-28)

  • [infra] python3 ROS environment support (if using virtualenvs, was already python3 compatible)

0.6.7 (2019-02-13)

  • [decorators] default option for collapsing decorators (resolves py_trees_ros bug)

0.6.6 (2019-02-13)

[decorators] new-style decorators can be found in py_trees.decorators [decorators] new-style decorators now stop their running child on completion (SUCCESS||FAILURE) [meta] behaviours from functions can now automagically generate names

0.6.5 (2018-09-19)

  • Inverters bugfix - pick up missing feedback messages
  • Eliminate costly blackboard variable check feedback message

0.6.4 (2018-09-19)

  • Ascii tree bugfix - replace awkward newlines with spaces

0.6.3 (2018-09-04)

  • Parallels bugfix - don't send own status to running children, invalidate them instead

0.6.2 (2018-08-31)

  • Oneshot bugfix - react to priority interrupts correctly

0.6.1 (2018-08-20)

  • Oneshot bugfix - no longer permanently modifies the original class

0.6.0 (2018-05-15)

  • Python 2/3 compatibility

0.5.10 (2017-06-17)

  • [meta] add children monkeypatching for composite imposters
  • [blackboard] check for nested variables in WaitForBlackboard

0.5.9 (2017-03-25)

  • [docs] bugfix image links and rewrite the motivation

0.5.8 (2017-03-19)

  • [infra] setup.py tests_require, not test_require

0.5.7 (2017-03-01)

  • [infra] update maintainer email

0.5.5 (2017-03-01)

  • [docs] many minor doc updates
  • [meta] bugfix so that imposter now ticks over composite children
  • [trees] method for getting the tip of the tree
  • [programs] py-trees-render program added

0.5.4 (2017-02-22)

  • [infra] handle pypi/catkin conflicts with install_requires

0.5.2 (2017-02-22)

File truncated at 100 lines see the full file

Package Dependencies

Deps Name
catkin
python3-enum34

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged py_trees at Robotics Stack Exchange