BehaviorTree
Core Library to create and execute Behavior Trees
Loading...
Searching...
No Matches
BT::ReactiveSequence Class Reference

The ReactiveSequence is similar to a ParallelNode. All the children are ticked from first to last: More...

#include <reactive_sequence.h>

Inheritance diagram for BT::ReactiveSequence:
Collaboration diagram for BT::ReactiveSequence:

Public Member Functions

 ReactiveSequence (const std::string &name)
 
- Public Member Functions inherited from BT::ControlNode
 ControlNode (const std::string &name, const NodeConfig &config)
 
 ControlNode (const ControlNode &)=delete
 
ControlNodeoperator= (const ControlNode &)=delete
 
 ControlNode (ControlNode &&)=delete
 
ControlNodeoperator= (ControlNode &&)=delete
 
void addChild (TreeNode *child)
 The method used to add nodes to the children vector.
 
size_t childrenCount () const
 
const std::vector< TreeNode * > & children () const
 
const TreeNodechild (size_t index) const
 
virtual void halt () override
 
void haltChildren ()
 same as resetChildren()
 
void haltChildren (size_t first)
 
void haltChild (size_t i)
 
virtual NodeType type () const override final
 
void resetChildren ()
 
- Public Member Functions inherited from BT::TreeNode
 TreeNode (std::string name, NodeConfig config)
 TreeNode main constructor.
 
 TreeNode (const TreeNode &other)=delete
 
TreeNodeoperator= (const TreeNode &other)=delete
 
 TreeNode (TreeNode &&other) noexcept
 
TreeNodeoperator= (TreeNode &&other) noexcept
 
virtual BT::NodeStatus executeTick ()
 The method that should be used to invoke tick() and setStatus();.
 
void haltNode ()
 
bool isHalted () const
 
NodeStatus status () const
 
const std::string & name () const
 Name of the instance, not the type.
 
BT::NodeStatus waitValidStatus ()
 
virtual NodeType type () const =0
 
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.
 
void setPreTickFunction (PreTickCallback callback)
 
void setPostTickFunction (PostTickCallback callback)
 
void setTickMonitorCallback (TickMonitorCallback callback)
 
uint16_t UID () const
 
const std::string & fullPath () const
 
const std::string & registrationName () const
 registrationName is the ID used by BehaviorTreeFactory to create an instance.
 
const NodeConfigconfig () const
 
template<typename T >
Result getInput (const std::string &key, T &destination) const
 
template<typename T >
Expected< TimestampgetInputStamped (const std::string &key, T &destination) const
 getInputStamped is similar to getInput(dey, destination), but it returns also the Timestamp object, that can be used to check if a value was updated and when.
 
template<typename T >
Expected< T > getInput (const std::string &key) const
 
template<typename T >
Expected< StampedValue< T > > getInputStamped (const std::string &key) const
 
template<typename T >
Result setOutput (const std::string &key, const T &value)
 setOutput modifies the content of an Output port
 
AnyPtrLocked getLockedPortContent (const std::string &key)
 getLockedPortContent should be used when:
 
StringView getRawPortValue (const std::string &key) const
 
void emitWakeUpSignal ()
 Notify that the tree should be ticked again()
 
bool requiresWakeUp () const
 

Static Public Member Functions

static void EnableException (bool enable)
 
- Static Public Member Functions inherited from BT::TreeNode
static bool isBlackboardPointer (StringView str, StringView *stripped_pointer=nullptr)
 Check a string and return true if it matches the pattern: {...}.
 
static StringView stripBlackboardPointer (StringView str)
 
static Expected< StringView > getRemappedKey (StringView port_name, StringView remapped_port)
 
template<class DerivedT , typename... ExtraArgs>
static std::unique_ptr< TreeNodeInstantiate (const std::string &name, const NodeConfig &config, ExtraArgs... args)
 

Additional Inherited Members

- Public Types inherited from BT::TreeNode
typedef std::shared_ptr< TreeNodePtr
 
using StatusChangeSignal = Signal< TimePoint, const TreeNode &, NodeStatus, NodeStatus >
 
using StatusChangeSubscriber = StatusChangeSignal::Subscriber
 
using StatusChangeCallback = StatusChangeSignal::CallableFunction
 
using PreTickCallback = std::function< NodeStatus(TreeNode &)>
 
using PostTickCallback = std::function< NodeStatus(TreeNode &, NodeStatus)>
 
using TickMonitorCallback = std::function< void(TreeNode &, NodeStatus, std::chrono::microseconds)>
 
- Protected Types inherited from BT::TreeNode
using PreScripts = std::array< ScriptFunction, size_t(PreCond::COUNT_)>
 
using PostScripts = std::array< ScriptFunction, size_t(PostCond::COUNT_)>
 
- Protected Member Functions inherited from BT::TreeNode
NodeConfigconfig ()
 
virtual BT::NodeStatus tick ()=0
 Method to be implemented by the user.
 
void resetStatus ()
 Set the status to IDLE.
 
void setRegistrationID (StringView ID)
 
void setWakeUpInstance (std::shared_ptr< WakeUpSignal > instance)
 
void modifyPortsRemapping (const PortsRemapping &new_remapping)
 
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!
 
PreScripts & preConditionsScripts ()
 
PostScripts & postConditionsScripts ()
 
template<typename T >
parseString (const std::string &str) const
 
- Protected Attributes inherited from BT::ControlNode
std::vector< TreeNode * > children_nodes_
 

Detailed Description

The ReactiveSequence is similar to a ParallelNode. All the children are ticked from first to last:

  • If a child returns RUNNING, halt the remaining siblings in the sequence and return RUNNING.
  • If a child returns SUCCESS, tick the next sibling.
  • If a child returns FAILURE, stop and return FAILURE.

If all the children return SUCCESS, this node returns SUCCESS.

IMPORTANT: to work properly, this node should not have more than a single asynchronous child.

Member Function Documentation

◆ EnableException()

static void BT::ReactiveSequence::EnableException ( bool  enable)
static

A ReactiveSequence is not supposed to have more than a single anychronous node; if it does an exception is thrown. You can disabled that check, if you know what you are doing.


The documentation for this class was generated from the following file: