35 #ifndef DWB_PLUGINS__KINEMATIC_PARAMETERS_HPP_
36 #define DWB_PLUGINS__KINEMATIC_PARAMETERS_HPP_
43 #include "nav2_ros_common/lifecycle_node.hpp"
44 #include "rclcpp/logger.hpp"
45 #include "rclcpp/node_interfaces/node_parameters_interface.hpp"
46 #include "rclcpp/parameter.hpp"
59 inline double getMinX() {
return min_vel_x_;}
60 inline double getMaxX() {
return max_vel_x_;}
61 inline double getAccX() {
return acc_lim_x_;}
62 inline double getDecelX() {
return decel_lim_x_;}
64 inline double getMinY() {
return min_vel_y_;}
65 inline double getMaxY() {
return max_vel_y_;}
66 inline double getAccY() {
return acc_lim_y_;}
67 inline double getDecelY() {
return decel_lim_y_;}
69 inline double getMinSpeedXY() {
return min_speed_xy_;}
70 inline double getMaxSpeedXY() {
return max_speed_xy_;}
72 inline double getMinTheta() {
return -max_vel_theta_;}
73 inline double getMaxTheta() {
return max_vel_theta_;}
74 inline double getAccTheta() {
return acc_lim_theta_;}
75 inline double getDecelTheta() {
return decel_lim_theta_;}
76 inline double getMinSpeedTheta() {
return min_speed_theta_;}
78 inline double getMinSpeedXY_SQ() {
return min_speed_xy_sq_;}
79 inline double getMaxSpeedXY_SQ() {
return max_speed_xy_sq_;}
94 double vmag_sq = x * x + y * y;
95 if (max_speed_xy_ >= 0.0 &&
96 vmag_sq > max_speed_xy_sq_ + std::numeric_limits<float>::epsilon())
101 min_speed_xy_ >= 0.0 && vmag_sq + std::numeric_limits<float>::epsilon() < min_speed_xy_sq_ &&
102 min_speed_theta_ >= 0.0 &&
103 fabs(theta) + std::numeric_limits<float>::epsilon() < min_speed_theta_)
107 if (vmag_sq == 0.0 && theta == 0.0) {
return false;}
113 double min_vel_x_{0};
114 double min_vel_y_{0};
115 double max_vel_x_{0};
116 double max_vel_y_{0};
117 double base_max_vel_x_{0};
118 double base_max_vel_y_{0};
119 double max_vel_theta_{0};
120 double base_max_vel_theta_{0};
121 double min_speed_xy_{0};
122 double max_speed_xy_{0};
123 double base_max_speed_xy_{0};
124 double min_speed_theta_{0};
125 double acc_lim_x_{0};
126 double acc_lim_y_{0};
127 double acc_lim_theta_{0};
128 double decel_lim_x_{0};
129 double decel_lim_y_{0};
130 double decel_lim_theta_{0};
133 double min_speed_xy_sq_{0};
134 double max_speed_xy_sq_{0};
146 void initialize(
const nav2::LifecycleNode::SharedPtr & nh,
const std::string & plugin_name);
153 if (ptr ==
nullptr) {
154 throw std::runtime_error(
"Can't call KinematicsHandler::getKinematics().");
159 void setSpeedLimit(
const double & speed_limit,
const bool & percentage);
161 using Ptr = std::shared_ptr<KinematicsHandler>;
164 nav2::LifecycleNode::WeakPtr node_;
165 rclcpp::Logger logger_{rclcpp::get_logger(
"DWBController")};
166 std::atomic<KinematicParameters *> kinematics_;
169 rclcpp::node_interfaces::PostSetParametersCallbackHandle::SharedPtr post_set_params_handler_;
170 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr on_set_params_handler_;
180 const std::vector<rclcpp::Parameter> & parameters);
190 std::string plugin_name_;
A class managing the representation of the robot's kinematics.
void updateParametersCallback(const std::vector< rclcpp::Parameter > ¶meters)
Apply parameter updates after validation This callback is executed when parameters have been successf...
rcl_interfaces::msg::SetParametersResult validateParameterUpdatesCallback(const std::vector< rclcpp::Parameter > ¶meters)
Validate incoming parameter updates before applying them. This callback is triggered when one or more...
A struct containing one representation of the robot's kinematics.
bool isValidSpeed(double x, double y, double theta)
Check to see whether the combined x/y/theta velocities are valid.