Skip to content

Releases: BehaviorTree/BehaviorTree.CPP

4.1.1: bug fixes and SQLIte logger

30 Mar 09:39

Choose a tag to compare

I must admit that 4.1.0 was kind of a misfire.

Some important bugs were fixed since that release, and you should probably NOT use it.

Notable changes

  • ManualNode and dependency to ncurses . I am assuming that nobody uses that node. If you do... I am sorry? NCurses is a dependency I don't want to have.

  • New logger based on SQLite, that will allow users to log multiple runs in the same database. It is meant to be used with Groot2

  • Now substitution rules can be loaded from JSON at runtime (see tutorial 11)

  • Fixed issue #530

  • some header files (3rd party dependencies) moved from folder util to contrib

Release 4.1... getting ready for Groot2

18 Mar 18:49

Choose a tag to compare

New features / important changes

Identifying Nodes

  • The unique ID of the Nodes, i.e. TreeNode::UID(), is now deterministic and based on the Depth-first Traversal order (starting at 1).
  • Struct Tree::Subtree has now a unique human-readable identifier called tree_ID.
  • The Tree::Subtree::tree_ID is used to generate the TreeNode::fullPath(), which is also a uniquely identified string, that contains the hierarchy in the tree and the name of the Node.

A great way to get familiar with the new UID and fullPath is to look at Tutorial 10, where a TreeObserver is introduced too.

Tools to make debugging easier.

Version 4.1 introduces a new concept: node replacement. At deployment time, i.e. before the tree is instantiated, we can add "rules" to the BT factory to substitute certain Nodes with another implementations.

This is particularly useful when generating unit tests, i.e. when we want to substitute Nodes with dummy ones.

We provide a specific "dummy node" called TestNode that should cover the vast majority of the use cases.

Also, the TreeObserver is a great tool to create unit tests: it allows the user to check which Nodes have been ticked, and what they returned, in a non-intrusive way.

Dependencies and build

  • We removed the dependency from Boost, which was used only for its coroutine library. We use now minicoro. Boost is a "commodity" in Linux, but quite annoying for Windows users.

  • We now use conan to download dependencies in non-ROS builds.

Groot2 interface

We included the first, preliminary version of the Groot2Publisher, which can be used to communicate in real-time with Groot2 to do amazing things:

  • real-time visualization of the BT status
  • blackboard visualization
  • insert breakpoints in the tree and wait for "Continue" in Groot2
  • mocking of Nodes at run-time (force FAILURE or SUCCESS)
  • fault injection: make a node fail to trigger the execution of recovery branches.

Important bug fixes

  • #525 Pre-Condition : _skipIf NOT working with ReactiveSequence
  • #517 Halting the tree doesn't set the root node to idle
  • #515 "ReactiveSequence is not supposed to reach this point"
  • #514 Changed behavior of tickOnce
  • #507 _skipIf precondition does not work with SubTree
  • #506 Floating point values set by Script cause Floating point truncated
  • #505 'std::bad_alloc' when using Script node on Raspberry Pi
  • #492 Threads::Threads errors when building a project based on BT.CPP
  • #489 Port type mismatch between blackboard and subtree port

And probably others that I can't remember here

Lot of interesting stuff

23 May 08:23

Choose a tag to compare

Noteworthy changes:

  • A better way to include BTs from multiple files, either manually or using the <include> tag
  • Adding a new Tree::sleep() method (experimental) to create event-driven trees.
  • Example showing how to effectively use queues to do a "for-loop"
  • Bug fixes

Important changes

22 Mar 21:05

Choose a tag to compare

In this new release, there are many changes (including few that are breaking in API).

  • New Switch ControlNode.
  • Tree now provides two public methods: tickRoot() and haltTree()
  • CoroAction (coroutines) now need Boost.
  • most importantly, TreeNode::setStatus() is protected now!

The last change will be annoying for many people, but it is the only way to avoid nasty antipatterns.

Version 2.3.0: API change in BehaviorTreeFactory::registerBuilder

28 Nov 13:44

Choose a tag to compare

There are few bugs fixed since version 2.2.0 (see CHANGELOG).

Someone code may break because the signature of the method registerBuilder had to change since the manifest was not created nor added to the manifest list.

See commit 6181d87 for details.

Version 2.2: SimpleNodes + NodeParameters = ❤

20 Nov 10:32

Choose a tag to compare

This release includes a few changes that you can read in the CHANGELOG.rst.

The most notable is that SimpleActions, SimpleDecorators and SimpleConditions will not allow NodeParameters.
Check the tutorial T06 out to see a practical example of how this helps wrapping legacy code into a TreeNode.

Version 2.1: Change in directory structure

16 Nov 10:18

Choose a tag to compare

With the latest change in CMake to support the installation of the library, it became apparent that the include needed some refactoring.

This will break the code of people using the previous version, sorry :(

Bear with me

First beta of version 2.0

17 Oct 09:50

Choose a tag to compare

Pre-release

It has been a long journey, but we are ready to announce the preliminary version of BehaviorTree.CPP
2.0.

Enjoy