16 #ifndef NAV2_BEHAVIOR_TREE__PLUGINS__DECORATOR__SPEED_CONTROLLER_HPP_
17 #define NAV2_BEHAVIOR_TREE__PLUGINS__DECORATOR__SPEED_CONTROLLER_HPP_
24 #include "nav_msgs/msg/odometry.hpp"
25 #include "nav2_util/odometry_utils.hpp"
27 #include "behaviortree_cpp/decorator_node.h"
28 #include "behaviortree_cpp/json_export.h"
29 #include "nav2_behavior_tree/bt_utils.hpp"
30 #include "nav2_behavior_tree/json_utils.hpp"
32 namespace nav2_behavior_tree
56 const std::string & name,
57 const BT::NodeConfiguration & conf);
66 BT::RegisterJsonDefinition<geometry_msgs::msg::PoseStamped>();
67 BT::RegisterJsonDefinition<std::vector<geometry_msgs::msg::PoseStamped>>();
70 BT::InputPort<double>(
"min_rate", 0.1,
"Minimum rate"),
71 BT::InputPort<double>(
"max_rate", 1.0,
"Maximum rate"),
72 BT::InputPort<double>(
"min_speed", 0.0,
"Minimum speed"),
73 BT::InputPort<double>(
"max_speed", 0.5,
"Maximum speed"),
74 BT::InputPort<std::vector<geometry_msgs::msg::PoseStamped>>(
75 "goals",
"Vector of navigation goals"),
76 BT::InputPort<geometry_msgs::msg::PoseStamped>(
77 "goal",
"Navigation goal"),
86 BT::NodeStatus tick()
override;
92 inline double getScaledRate(
const double & speed)
96 (((speed - min_speed_) / d_speed_) * d_rate_) + min_rate_,
97 max_rate_), min_rate_);
103 inline void updatePeriod()
105 auto velocity = odom_smoother_->getTwist();
106 double speed = std::hypot(velocity.linear.x, velocity.linear.y);
107 double rate = getScaledRate(speed);
108 period_ = 1.0 / rate;
111 rclcpp::Node::SharedPtr node_;
117 std::shared_ptr<nav2_util::OdomSmoother> odom_smoother_;
135 geometry_msgs::msg::PoseStamped goal_;
136 std::vector<geometry_msgs::msg::PoseStamped> goals_;
A BT::DecoratorNode that ticks its child every at a rate proportional to the speed of the robot....
static BT::PortsList providedPorts()
Creates list of BT ports.
SpeedController(const std::string &name, const BT::NodeConfiguration &conf)
A constructor for nav2_behavior_tree::SpeedController.