18 #include "nav2_behavior_tree/plugins/decorator/rate_controller.hpp"
20 namespace nav2_behavior_tree
24 const std::string & name,
25 const BT::NodeConfiguration & conf)
26 : BT::DecoratorNode(name, conf),
34 BT::NodeStatus RateController::tick()
36 if (status() == BT::NodeStatus::IDLE) {
39 start_ = std::chrono::high_resolution_clock::now();
43 setStatus(BT::NodeStatus::RUNNING);
46 auto now = std::chrono::high_resolution_clock::now();
47 auto elapsed = now - start_;
50 typedef std::chrono::duration<float> float_seconds;
51 auto seconds = std::chrono::duration_cast<float_seconds>(elapsed);
56 if (first_time_ || (child_node_->status() == BT::NodeStatus::RUNNING) ||
57 seconds.count() >= period_)
60 const BT::NodeStatus child_state = child_node_->executeTick();
62 switch (child_state) {
63 case BT::NodeStatus::RUNNING:
64 return BT::NodeStatus::RUNNING;
66 case BT::NodeStatus::SUCCESS:
67 start_ = std::chrono::high_resolution_clock::now();
68 return BT::NodeStatus::SUCCESS;
70 case BT::NodeStatus::FAILURE:
72 return BT::NodeStatus::FAILURE;
81 #include "behaviortree_cpp_v3/bt_factory.h"
82 BT_REGISTER_NODES(factory)
A BT::DecoratorNode that ticks its child at a specified rate.
RateController(const std::string &name, const BT::NodeConfiguration &conf)
A constructor for nav2_behavior_tree::RateController.