17 #include "nav2_behavior_tree/plugins/control/round_robin_node.hpp"
19 namespace nav2_behavior_tree
23 : BT::ControlNode::ControlNode(name, {})
28 const std::string & name,
29 const BT::NodeConfiguration & config)
30 : BT::ControlNode(name, config)
36 const auto num_children = children_nodes_.size();
38 setStatus(BT::NodeStatus::RUNNING);
40 while (num_failed_children_ < num_children) {
41 TreeNode * child_node = children_nodes_[current_child_idx_];
42 const BT::NodeStatus child_status = child_node->executeTick();
44 switch (child_status) {
45 case BT::NodeStatus::SUCCESS:
48 if (++current_child_idx_ >= num_children) {
49 current_child_idx_ = 0;
51 num_failed_children_ = 0;
52 ControlNode::haltChildren();
53 return BT::NodeStatus::SUCCESS;
56 case BT::NodeStatus::FAILURE:
58 if (++current_child_idx_ >= num_children) {
59 current_child_idx_ = 0;
61 num_failed_children_++;
65 case BT::NodeStatus::RUNNING:
67 return BT::NodeStatus::RUNNING;
72 throw BT::LogicError(
"Invalid status return from BT node");
78 return BT::NodeStatus::FAILURE;
84 current_child_idx_ = 0;
85 num_failed_children_ = 0;
90 BT_REGISTER_NODES(factory)
Type of sequence node that ticks children in a round-robin fashion.
void halt() override
The other (optional) override required by a BT action to reset node state.
BT::NodeStatus tick() override
The main override required by a BT action.
RoundRobinNode(const std::string &name)
A constructor for nav2_behavior_tree::RoundRobinNode.