35 #ifndef DWB_PLUGINS__KINEMATIC_PARAMETERS_HPP_
36 #define DWB_PLUGINS__KINEMATIC_PARAMETERS_HPP_
43 #include "nav2_util/lifecycle_node.hpp"
44 #include "rclcpp/rclcpp.hpp"
57 inline double getMinX() {
return min_vel_x_;}
58 inline double getMaxX() {
return max_vel_x_;}
59 inline double getAccX() {
return acc_lim_x_;}
60 inline double getDecelX() {
return decel_lim_x_;}
62 inline double getMinY() {
return min_vel_y_;}
63 inline double getMaxY() {
return max_vel_y_;}
64 inline double getAccY() {
return acc_lim_y_;}
65 inline double getDecelY() {
return decel_lim_y_;}
67 inline double getMinSpeedXY() {
return min_speed_xy_;}
68 inline double getMaxSpeedXY() {
return max_speed_xy_;}
70 inline double getMinTheta() {
return -max_vel_theta_;}
71 inline double getMaxTheta() {
return max_vel_theta_;}
72 inline double getAccTheta() {
return acc_lim_theta_;}
73 inline double getDecelTheta() {
return decel_lim_theta_;}
74 inline double getMinSpeedTheta() {
return min_speed_theta_;}
76 inline double getMinSpeedXY_SQ() {
return min_speed_xy_sq_;}
77 inline double getMaxSpeedXY_SQ() {
return max_speed_xy_sq_;}
92 double vmag_sq = x * x + y * y;
93 if (max_speed_xy_ >= 0.0 &&
94 vmag_sq > max_speed_xy_sq_ + std::numeric_limits<float>::epsilon())
99 min_speed_xy_ >= 0.0 && vmag_sq + std::numeric_limits<float>::epsilon() < min_speed_xy_sq_ &&
100 min_speed_theta_ >= 0.0 &&
101 fabs(theta) + std::numeric_limits<float>::epsilon() < min_speed_theta_)
105 if (vmag_sq == 0.0 && theta == 0.0) {
return false;}
111 double min_vel_x_{0};
112 double min_vel_y_{0};
113 double max_vel_x_{0};
114 double max_vel_y_{0};
115 double base_max_vel_x_{0};
116 double base_max_vel_y_{0};
117 double max_vel_theta_{0};
118 double base_max_vel_theta_{0};
119 double min_speed_xy_{0};
120 double max_speed_xy_{0};
121 double base_max_speed_xy_{0};
122 double min_speed_theta_{0};
123 double acc_lim_x_{0};
124 double acc_lim_y_{0};
125 double acc_lim_theta_{0};
126 double decel_lim_x_{0};
127 double decel_lim_y_{0};
128 double decel_lim_theta_{0};
131 double min_speed_xy_sq_{0};
132 double max_speed_xy_sq_{0};
144 void initialize(
const nav2_util::LifecycleNode::SharedPtr & nh,
const std::string & plugin_name);
148 void setSpeedLimit(
const double & speed_limit,
const bool & percentage);
150 using Ptr = std::shared_ptr<KinematicsHandler>;
153 nav2_util::LifecycleNode::WeakPtr node_;
154 std::atomic<KinematicParameters *> kinematics_;
157 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler_;
163 std::vector<rclcpp::Parameter> parameters);
165 std::string plugin_name_;
A class managing the representation of the robot's kinematics.
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(std::vector< rclcpp::Parameter > parameters)
Callback executed when a paramter change is detected.
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.