-
Notifications
You must be signed in to change notification settings - Fork 762
Description
I am a robotics researcher from USA and in a recent internship, we have been extensively using BehaviorTree.CPP v3.8 for orchestrate a variety of autonomy and robot navigation related tasks. This backdrop leads to the following feature request
Feature Proposal
Nav2, a popular open-source project from OpenNavigation is known for adding a number of useful Control, Action and Decorator nodes. Some of the most useful ones are PipelineSequence
, RecoveryNode
and RateController
Some autonomy related projects may have constraints of not using ROS 2 ecosystem. Without ROS 2 and by extension Nav2, these useful nodes become inaccessible natively from BehaviorTree.CPP.
Proposed Solution
I propose to open a PR for v3.8
branch that backports a number Nav2 nodes as native BehaviorTree.CPP nodes.
From what I have found out so far, the implementation of these nodes may have minimal dependency on the actual Nav2 stack. An example: pipeline_sequence.hpp
In my opinion, the following nodes may be most suitable for application across various domains
Control nodes
- PipelineSequence: reticks preceding child nodes that return
SUCCESS
. - RecoveryNode: Two child node that only returns
SUCCESS
if and only if left child is successful. - NoneblockingSequence: NonblockingSequence ticks all children until one fails, re-ticking running/successful ones, and returns SUCCESS only if all succeed.
Decorator nodes
- Rate Controller: "Controls the ticking of its child node at a constant frequency. The tick rate is an exposed port"
Additional Context
Why v3.8
? I have recently worked with a number of robots from notable robotics companies who are still using ROS 2 Humble and the humble branch of Nav2. As far as I know, BehaviorTree.CPP v3.8 is the version supported by Nav2 Humble.