@@ -13,6 +13,7 @@ Brief feature list:
1313* Behaviours, Decorators, Sequences, Selectors, Parallels and BehaviourTree.
1414* Blackboards for data sharing.
1515* A useful library of behaviours, decorators, and idioms.
16+ * A more abstract ports API and XML parser for declarative behavior definitions.
1617* Serialise to a dot graph or render to ascii/unicode in a terminal.
1718* Tested on Linux and Mac (YMMV with Windows).
1819
@@ -26,7 +27,7 @@ Brief feature list:
2627
2728## Documentation
2829
29- [ ![ devel] [ docs-devel-image ]] [ docs-devel ] [ ![ 2.4 .x] [ docs-2.4 .x-image ]] [ docs-2.4 .x ] [ ![ 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 ]
30+ [ ![ devel] [ docs-devel-image ]] [ docs-devel ] [ ![ 2.5 .x] [ docs-2.5 .x-image ]] [ docs-2.5 .x ] [ ![ 2.4 .x] [ docs-2.4 .x-image ]] [ docs-2.4 .x ] [ ![ 2.3 .x] [ docs-2.3 .x-image ]] [ docs-2.3 .x ] [ ![ 2.2 .x] [ docs-2.2 .x-image ]] [ docs-2.2 .x ]
3031
3132## Getting Started
3233
@@ -75,7 +76,7 @@ Visualisation:
7576* [ py_trees_js] ( https://github.com/splintered-reality/py_trees_js ) - a javascript library for building your own runtime visualisation tool
7677
7778Robotics:
78- * [ py_trees_ros] ( https://github.com/splintered-reality/py_trees_ros ) - a tree manager and behaviours designed for use specifically with ` ROS2 `
79+ * [ py_trees_ros] ( https://github.com/splintered-reality/py_trees_ros ) - a tree manager and behaviours designed for use specifically with ` ROS 2 `
7980* [ py_trees_ros_viewer] ( https://github.com/splintered-reality/py_trees_ros_viewer ) - a ` Qt/ROS 2 ` implementation of ` py_trees_js `
8081
8182## Maintainers
@@ -91,6 +92,7 @@ Contributors are welcome to add themselves here in future PRs.
9192
9293## Releases
9394
95+ * ` 2.5.x ` - New Ports API with XML file parsing, modernized dev environment with ` uv ` , support Python 3.14.
9496* ` 2.4.x ` - New ForEach decorator, new CompareBlackboardVariables behaviour, and callables in comparison expressions.
9597* ` 2.3.x ` - Support for Python 3.12 was added, and Python 3.8 was dropped.
9698* ` 2.2.x ` - Selectors, Sequences with and without memory. Improved testing and style/type checking.
@@ -101,92 +103,63 @@ Contributors are welcome to add themselves here in future PRs.
101103* ` 1.0.x ` - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
102104* ` 0.y.x ` - First open source pre-releases.
103105
104- | | Devel | 2.4 .x | 2.3 .x | 2.2 .x | 2.1.x | 2.0 .x |
105- | :---:| :---:| :---:| :---:| :---:| :---:| :---: |
106- | Sources | [ ![ devel] [ sources-devel-image ]] [ sources-devel ] | [ ![ 2.4 .x] [ sources-2.4 .x-image ]] [ sources-2.4 .x ] | [ ![ 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 ] |
107- | Compatibility | [ ![ Python 3.12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.10 ] [ python310 -image]] [ python310 -docs] <br />[ ![ 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] |
108- | CI | [ ![ devel-Status] [ devel-build-status-image ]] [ devel-build-status ] | [ ![ 2.4.x-Status] [ 2.4.x-build-status-image ]] [ 2.4.x-build-status ] | [ ![ 2.3.x-Status] [ 2.3.x-build-status-image ]] [ 2.3.x-build-status ] | [ ![ 2.2.x-Status] [ 2.2.x-build-status-image ]] [ 2.2.x-build-status ] | - | - | - | - |
109- | Documentation | [ ![ devel-Docs] [ rtd-devel-image ]] [ docs-devel ] | [ ![ 2.4 .x-Docs] [ rtd-2.4 .x-image ]] [ docs-2.4 .x ] | [ ![ 2.3 .x-Docs] [ rtd-2.3 .x-image ]] [ docs-2.3 .x ] | [ ![ 2.2 .x-Docs] [ rtd-2.2 .x-image ]] [ docs-2.2 .x ] | [ ![ 2.1 .x-Docs] [ rtd-2.1.x-image ]] [ docs-2.1.x ] | [ ![ 2.0.x-Docs ] [ rtd-2.0.x- image]] [ docs-2.0 .x ] |
106+ | | Devel | 2.5 .x | 2.4 .x | 2.3 .x | 2.2 .x |
107+ | :---:| :---:| :---:| :---:| :---:| :---:|
108+ | Sources | [ ![ devel] [ sources-devel-image ]] [ sources-devel ] | [ ![ 2.5 .x] [ sources-2.5 .x-image ]] [ sources-2.5 .x ] | [ ![ 2.4 .x] [ sources-2.4 .x-image ]] [ sources-2.4 .x ] | [ ![ 2.3 .x] [ sources-2.3 .x-image ]] [ sources-2.3 .x ] | [ ![ 2.2.x ] [ sources-2.2.x- image ]] [ sources-2.2 .x ] |
109+ | Compatibility | [ ![ Python 3.14 ] [ python314-image ]] [ python314-docs ] < br /> [ ![ Python 3. 12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.14 ] [ python314-image ]] [ python314-docs ] < br /> [ ![ Python 3. 12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.12] [ python312-image ]] [ python312-docs ] <br />[ ![ Python 3.10] [ python310-image ]] [ python310-docs ] | [ ![ Python 3.12 ] [ python312 -image]] [ python312 -docs] <br />[ ![ Python 3.10 ] [ python310 -image]] [ python310 -docs] | [ ![ Python 3.10 ] [ python310 -image]] [ python310 -docs] < br /> [ ![ Python 3.8 ] [ python38 -image]] [ python38 -docs] |
110+ | CI | [ ![ devel-Status] [ devel-build-status-image ]] [ devel-build-status ] | [ ![ 2.5.x-Status ] [ 2.5.x-build-status-image ]] [ 2.5.x-build-status ] | [ ![ 2. 4.x-Status] [ 2.4.x-build-status-image ]] [ 2.4.x-build-status ] | [ ![ 2.3.x-Status] [ 2.3.x-build-status-image ]] [ 2.3.x-build-status ] | [ ![ 2.2.x-Status] [ 2.2.x-build-status-image ]] [ 2.2.x-build-status ] |
111+ | Documentation | [ ![ devel-Docs] [ rtd-devel-image ]] [ docs-devel ] | [ ![ 2.5 .x-Docs] [ rtd-2.5 .x-image ]] [ docs-2.5 .x ] | [ ![ 2.4 .x-Docs] [ rtd-2.4 .x-image ]] [ docs-2.4 .x ] | [ ![ 2.3 .x-Docs] [ rtd-2.3 .x-image ]] [ docs-2.3 .x ] | [ ![ 2.2 .x-Docs] [ rtd-2.2.x- image ]] [ docs-2.2 .x ] |
110112
111113
112114[ license-image ] : https://img.shields.io/badge/License-BSD%203--Clause-orange.svg?style=plastic
113115[ license ] : LICENSE
114116
117+ [ python314-image ] : https://img.shields.io/badge/python-3.14-green.svg?style=plastic
118+ [ python314-docs ] : https://docs.python.org/3.14/
115119[ python312-image ] : https://img.shields.io/badge/python-3.12-green.svg?style=plastic
116120[ python312-docs ] : https://docs.python.org/3.12/
117121[ python310-image ] : https://img.shields.io/badge/python-3.10-green.svg?style=plastic
118122[ python310-docs ] : https://docs.python.org/3.10/
119123[ python38-image ] : https://img.shields.io/badge/python-3.8-green.svg?style=plastic
120124[ python38-docs ] : https://docs.python.org/3.8/
121- [ python36-image ] : https://img.shields.io/badge/python-3.6-green.svg?style=plastic
122- [ python36-docs ] : https://docs.python.org/3.6/
123125
124126[ devel-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg
125127[ devel-build-status ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
126- [ 2.4.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg??branch=release/2.4.x
128+ [ 2.5.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?branch=release/2.5.x
129+ [ 2.5.x-build-status ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
130+ [ 2.4.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?branch=release/2.4.x
127131[ 2.4.x-build-status ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
128- [ 2.3.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?? branch=release/2.3.x
132+ [ 2.3.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?branch=release/2.3.x
129133[ 2.3.x-build-status ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
130- [ 2.2.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?? branch=release/2.2.x
134+ [ 2.2.x-build-status-image ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg?branch=release/2.2.x
131135[ 2.2.x-build-status ] : https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
132136
133137[ docs-devel ] : http://py-trees.readthedocs.io/
138+ [ docs-2.5.x ] : http://py-trees.readthedocs.io/en/release-2.5.x/
134139[ docs-2.4.x ] : http://py-trees.readthedocs.io/en/release-2.4.x/
135140[ docs-2.3.x ] : http://py-trees.readthedocs.io/en/release-2.3.x/
136141[ docs-2.2.x ] : http://py-trees.readthedocs.io/en/release-2.2.x/
137- [ docs-2.1.x ] : http://py-trees.readthedocs.io/en/release-2.1.x/
138- [ docs-2.0.x ] : http://py-trees.readthedocs.io/en/release-2.0.x/
139- [ docs-1.3.x ] : http://py-trees.readthedocs.io/en/release-1.3.x/
140- [ docs-1.2.x ] : http://py-trees.readthedocs.io/en/release-1.2.x/
141- [ docs-0.7.x ] : http://py-trees.readthedocs.io/en/release-0.7.x/
142- [ docs-0.6.x ] : http://py-trees.readthedocs.io/en/release-0.6.x/
143- [ docs-0.5.x ] : http://docs.ros.org/kinetic/api/py_trees/html/
144142
145143[ docs-devel-image ] : http://img.shields.io/badge/docs-devel-brightgreen.svg?style=plastic
144+ [ docs-2.5.x-image ] : http://img.shields.io/badge/docs-2.5.x-brightgreen.svg?style=plastic
146145[ docs-2.4.x-image ] : http://img.shields.io/badge/docs-2.4.x-brightgreen.svg?style=plastic
147146[ docs-2.3.x-image ] : http://img.shields.io/badge/docs-2.3.x-brightgreen.svg?style=plastic
148147[ docs-2.2.x-image ] : http://img.shields.io/badge/docs-2.2.x-brightgreen.svg?style=plastic
149- [ docs-2.1.x-image ] : http://img.shields.io/badge/docs-2.1.x-brightgreen.svg?style=plastic
150- [ docs-2.0.x-image ] : http://img.shields.io/badge/docs-2.0.x-brightgreen.svg?style=plastic
151- [ docs-1.3.x-image ] : http://img.shields.io/badge/docs-1.3.x-brightgreen.svg?style=plastic
152- [ docs-1.2.x-image ] : http://img.shields.io/badge/docs-1.2.x-brightgreen.svg?style=plastic
153- [ docs-0.7.x-image ] : http://img.shields.io/badge/docs-0.7.x-brightgreen.svg?style=plastic
154- [ docs-0.6.x-image ] : http://img.shields.io/badge/docs-0.6.x-brightgreen.svg?style=plastic
155- [ docs-0.5.x-image ] : http://img.shields.io/badge/docs-0.5.x-brightgreen.svg?style=plastic
156148
157149[ rtd-devel-image ] : https://readthedocs.org/projects/py-trees/badge/?version=devel&style=plastic
150+ [ rtd-2.5.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.5.x&style=plastic
158151[ rtd-2.4.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.4.x&style=plastic
159152[ rtd-2.3.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.3.x&style=plastic
160153[ rtd-2.2.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.2.x&style=plastic
161- [ rtd-2.1.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.1.x&style=plastic
162- [ rtd-2.0.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-2.0.x&style=plastic
163- [ rtd-1.3.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-1.3.x&style=plastic
164- [ rtd-1.2.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-1.2.x&style=plastic
165- [ rtd-0.7.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-0.7.x&style=plastic
166- [ rtd-0.6.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-0.6.x&style=plastic
167- [ rtd-0.5.x-image ] : https://readthedocs.org/projects/py-trees/badge/?version=release-0.5.x&style=plastic
168- [ not-available-docs-image ] : http://img.shields.io/badge/docs-n/a-yellow.svg?style=plastic
169154
170155[ sources-devel ] : https://github.com/splintered-reality/py_trees/tree/devel
156+ [ sources-2.5.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.5.x
171157[ sources-2.4.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.4.x
172158[ sources-2.3.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.3.x
173159[ sources-2.2.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.2.x
174- [ sources-2.1.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.1.x
175- [ sources-2.0.x ] : https://github.com/splintered-reality/py_trees/tree/release/2.0.x
176- [ sources-1.3.x ] : https://github.com/splintered-reality/py_trees/tree/release/1.3.x
177- [ sources-1.2.x ] : https://github.com/splintered-reality/py_trees/tree/release/1.2.x
178- [ sources-0.7.x ] : https://github.com/splintered-reality/py_trees/tree/release/0.7.x
179- [ sources-0.6.x ] : https://github.com/splintered-reality/py_trees/tree/release/0.6.x
180- [ sources-0.5.x ] : https://github.com/splintered-reality/py_trees/tree/release/0.5.x
181160
182161[ sources-devel-image ] : http://img.shields.io/badge/sources-devel-blue.svg?style=plastic
162+ [ sources-2.5.x-image ] : http://img.shields.io/badge/sources-2.5.x-blue.svg?style=plastic
183163[ sources-2.4.x-image ] : http://img.shields.io/badge/sources-2.4.x-blue.svg?style=plastic
184164[ sources-2.3.x-image ] : http://img.shields.io/badge/sources-2.3.x-blue.svg?style=plastic
185165[ sources-2.2.x-image ] : http://img.shields.io/badge/sources-2.2.x-blue.svg?style=plastic
186- [ sources-2.1.x-image ] : http://img.shields.io/badge/sources-2.1.x-blue.svg?style=plastic
187- [ sources-2.0.x-image ] : http://img.shields.io/badge/sources-2.0.x-blue.svg?style=plastic
188- [ sources-1.3.x-image ] : http://img.shields.io/badge/sources-1.3.x-blue.svg?style=plastic
189- [ sources-1.2.x-image ] : http://img.shields.io/badge/sources-1.2.x-blue.svg?style=plastic
190- [ sources-0.7.x-image ] : http://img.shields.io/badge/sources-0.7.x-blue.svg?style=plastic
191- [ sources-0.6.x-image ] : http://img.shields.io/badge/sources-0.6.x-blue.svg?style=plastic
192- [ sources-0.5.x-image ] : http://img.shields.io/badge/sources-0.5.x-blue.svg?style=plastic
0 commit comments