The SubTreeNode is a way to wrap an entire Subtree, creating a separated BlackBoard. If you want to have data flow through ports, you need to explicitly remap the ports. More...
#include <subtree_node.h>
Public Member Functions | |
void | setSubtreeID (const std::string &ID) |
const std::string & | subtreeID () const |
SubTreeNode (const std::string &name, const NodeConfig &config) | |
virtual BT::NodeStatus | tick () override |
Method to be implemented by the user. More... | |
virtual NodeType | type () const override final |
virtual | ~SubTreeNode () override=default |
Public Member Functions inherited from BT::DecoratorNode | |
TreeNode * | child () |
const TreeNode * | child () const |
DecoratorNode (const std::string &name, const NodeConfig &config) | |
NodeStatus | executeTick () override |
The method that should be used to invoke tick() and setStatus();. More... | |
virtual void | halt () override |
The method used to interrupt the execution of this node. More... | |
void | haltChild () |
Same as resetChild() More... | |
void | resetChild () |
void | setChild (TreeNode *child) |
virtual | ~DecoratorNode () override=default |
Public Member Functions inherited from BT::TreeNode | |
const NodeConfig & | config () const |
void | emitWakeUpSignal () |
Notify that the tree should be ticked again() More... | |
const std::string & | fullPath () const |
template<typename T > | |
Expected< T > | getInput (const std::string &key) const |
template<typename T > | |
Result | getInput (const std::string &key, T &destination) const |
template<typename T > | |
Expected< StampedValue< T > > | getInputStamped (const std::string &key) const |
template<typename T > | |
Expected< Timestamp > | getInputStamped (const std::string &key, T &destination) const |
getInputStamped is similar to getInput(dey, destination), but it returne also the Timestamp object, that can be used to check if a value was updated and when. More... | |
AnyPtrLocked | getLockedPortContent (const std::string &key) |
getLockedPortContent should be used when: More... | |
StringView | getRawPortValue (const std::string &key) const |
void | haltNode () |
bool | isHalted () const |
const std::string & | name () const |
Name of the instance, not the type. More... | |
TreeNode & | operator= (const TreeNode &other)=delete |
TreeNode & | operator= (TreeNode &&other) noexcept |
const std::string & | registrationName () const |
registrationName is the ID used by BehaviorTreeFactory to create an instance. More... | |
bool | requiresWakeUp () const |
template<typename T > | |
Result | setOutput (const std::string &key, const T &value) |
setOutput modifies the content of an Output port More... | |
void | setPostTickFunction (PostTickCallback callback) |
void | setPreTickFunction (PreTickCallback callback) |
void | setTickMonitorCallback (TickMonitorCallback callback) |
NodeStatus | status () const |
StatusChangeSubscriber | subscribeToStatusChange (StatusChangeCallback callback) |
subscribeToStatusChange is used to attach a callback to a status change. When StatusChangeSubscriber goes out of scope (it is a shared_ptr) the callback is unsubscribed automatically. More... | |
TreeNode (const TreeNode &other)=delete | |
TreeNode (std::string name, NodeConfig config) | |
TreeNode main constructor. More... | |
TreeNode (TreeNode &&other) noexcept | |
uint16_t | UID () const |
BT::NodeStatus | waitValidStatus () |
virtual | ~TreeNode () |
Static Public Member Functions | |
static PortsList | providedPorts () |
Static Public Member Functions inherited from BT::TreeNode | |
static Expected< StringView > | getRemappedKey (StringView port_name, StringView remapped_port) |
template<class DerivedT , typename... ExtraArgs> | |
static std::unique_ptr< TreeNode > | Instantiate (const std::string &name, const NodeConfig &config, ExtraArgs... args) |
static bool | isBlackboardPointer (StringView str, StringView *stripped_pointer=nullptr) |
Check a string and return true if it matches the pattern: {...}. More... | |
static StringView | stripBlackboardPointer (StringView str) |
Private Attributes | |
std::string | subtree_id_ |
Additional Inherited Members | |
Public Types inherited from BT::TreeNode | |
using | PostTickCallback = std::function< NodeStatus(TreeNode &, NodeStatus)> |
using | PreTickCallback = std::function< NodeStatus(TreeNode &)> |
typedef std::shared_ptr< TreeNode > | Ptr |
using | StatusChangeCallback = StatusChangeSignal::CallableFunction |
using | StatusChangeSignal = Signal< TimePoint, const TreeNode &, NodeStatus, NodeStatus > |
using | StatusChangeSubscriber = StatusChangeSignal::Subscriber |
using | TickMonitorCallback = std::function< void(TreeNode &, NodeStatus, std::chrono::microseconds)> |
Protected Types inherited from BT::TreeNode | |
using | PostScripts = std::array< ScriptFunction, size_t(PostCond::COUNT_)> |
using | PreScripts = std::array< ScriptFunction, size_t(PreCond::COUNT_)> |
Protected Member Functions inherited from BT::TreeNode | |
NodeConfig & | config () |
void | modifyPortsRemapping (const PortsRemapping &new_remapping) |
template<typename T > | |
T | parseString (const std::string &str) const |
PostScripts & | postConditionsScripts () |
PreScripts & | preConditionsScripts () |
void | resetStatus () |
Set the status to IDLE. More... | |
void | setRegistrationID (StringView ID) |
void | setStatus (NodeStatus new_status) |
setStatus changes the status of the node. it will throw if you try to change the status to IDLE, because your parent node should do that, not the user! More... | |
void | setWakeUpInstance (std::shared_ptr< WakeUpSignal > instance) |
Protected Attributes inherited from BT::DecoratorNode | |
TreeNode * | child_node_ |
The SubTreeNode is a way to wrap an entire Subtree, creating a separated BlackBoard. If you want to have data flow through ports, you need to explicitly remap the ports.
NOTE: autoremap will exclude all the ports which name start with underscore ''
Consider this example:
<root main_tree_to_execute = "MainTree" >
<BehaviorTree ID="MainTree"> <Sequence> <Script code="myParam='Hello'" /> <SubTree ID="Talk" param="{myParam}" /> <SubTree ID="Talk" param="World" /> <Script code="param='Auto remapped'" /> <SubTree ID="Talk" _autoremap="1" /> </Sequence> </BehaviorTree> <BehaviorTree ID="Talk"> <SaySomething message="{param}" /> </BehaviorTree>
</root>
You may notice three different approaches to remapping:
1) Subtree: "{param}" -> Parent: "{myParam}" -> Value: "Hello" Classical remapping from one port to another, but you need to use the syntax {myParam} to say that you are remapping the another port.
2) Subtree: "{param}" -> Value: "World" syntax without {}, in this case param directly point to the string "World".
3) Subtree: "{param}" -> Parent: "{parent}" Setting to true (or 1) the attribute "_autoremap", we are automatically remapping each port. Useful to avoid boilerplate.
Definition at line 52 of file subtree_node.h.
BT::SubTreeNode::SubTreeNode | ( | const std::string & | name, |
const NodeConfig & | config | ||
) |
Definition at line 3 of file subtree_node.cpp.
|
overridevirtualdefault |
|
static |
Definition at line 9 of file subtree_node.cpp.
|
inline |
Definition at line 61 of file subtree_node.h.
|
inline |
Definition at line 66 of file subtree_node.h.
|
overridevirtual |
Method to be implemented by the user.
Implements BT::TreeNode.
Definition at line 20 of file subtree_node.cpp.
|
inlinefinaloverridevirtual |
Reimplemented from BT::DecoratorNode.
Definition at line 72 of file subtree_node.h.
|
private |
Definition at line 78 of file subtree_node.h.