62 const std::string & joint_name,
const rclcpp::Node::SharedPtr & node,
JointLimits & limits)
64 const std::string param_base_name =
"joint_limits." + joint_name;
68 !node->has_parameter(param_base_name +
".has_position_limits") &&
69 !node->has_parameter(param_base_name +
".min_position") &&
70 !node->has_parameter(param_base_name +
".max_position") &&
71 !node->has_parameter(param_base_name +
".has_velocity_limits") &&
72 !node->has_parameter(param_base_name +
".min_velocity") &&
73 !node->has_parameter(param_base_name +
".max_velocity") &&
74 !node->has_parameter(param_base_name +
".has_acceleration_limits") &&
75 !node->has_parameter(param_base_name +
".max_acceleration") &&
76 !node->has_parameter(param_base_name +
".has_jerk_limits") &&
77 !node->has_parameter(param_base_name +
".max_jerk") &&
78 !node->has_parameter(param_base_name +
".has_effort_limits") &&
79 !node->has_parameter(param_base_name +
".max_effort") &&
80 !node->has_parameter(param_base_name +
".angle_wraparound") &&
81 !node->has_parameter(param_base_name +
".has_soft_limits") &&
82 !node->has_parameter(param_base_name +
".k_position") &&
83 !node->has_parameter(param_base_name +
".k_velocity") &&
84 !node->has_parameter(param_base_name +
".soft_lower_limit") &&
85 !node->has_parameter(param_base_name +
".soft_upper_limit"))
89 "No joint limits specification found for joint '%s' in the parameter server "
90 "(node: %s param name: %s).",
91 joint_name.c_str(), node->get_name(), param_base_name.c_str());
95 catch (
const std::exception & ex)
97 RCLCPP_ERROR(node->get_logger(),
"%s", ex.what());
102 bool has_position_limits =
false;
103 if (node->get_parameter(param_base_name +
".has_position_limits", has_position_limits))
105 if (!has_position_limits)
107 limits.has_position_limits =
false;
109 double min_pos, max_pos;
111 has_position_limits && node->get_parameter(param_base_name +
".min_position", min_pos) &&
112 node->get_parameter(param_base_name +
".max_position", max_pos))
114 limits.has_position_limits =
true;
115 limits.min_position = min_pos;
116 limits.max_position = max_pos;
119 bool angle_wraparound;
121 !has_position_limits &&
122 node->get_parameter(param_base_name +
".angle_wraparound", angle_wraparound))
124 limits.angle_wraparound = angle_wraparound;
129 bool has_velocity_limits =
false;
130 if (node->get_parameter(param_base_name +
".has_velocity_limits", has_velocity_limits))
132 if (!has_velocity_limits)
134 limits.has_velocity_limits =
false;
137 if (has_velocity_limits && node->get_parameter(param_base_name +
".max_velocity", max_vel))
139 limits.has_velocity_limits =
true;
140 limits.max_velocity = max_vel;
145 bool has_acceleration_limits =
false;
146 if (node->get_parameter(param_base_name +
".has_acceleration_limits", has_acceleration_limits))
148 if (!has_acceleration_limits)
150 limits.has_acceleration_limits =
false;
154 has_acceleration_limits &&
155 node->get_parameter(param_base_name +
".max_acceleration", max_acc))
157 limits.has_acceleration_limits =
true;
158 limits.max_acceleration = max_acc;
163 bool has_jerk_limits =
false;
164 if (node->get_parameter(param_base_name +
".has_jerk_limits", has_jerk_limits))
166 if (!has_jerk_limits)
168 limits.has_jerk_limits =
false;
171 if (has_jerk_limits && node->get_parameter(param_base_name +
".max_jerk", max_jerk))
173 limits.has_jerk_limits =
true;
174 limits.max_jerk = max_jerk;
179 bool has_effort_limits =
false;
180 if (node->get_parameter(param_base_name +
".has_effort_limits", has_effort_limits))
182 if (!has_effort_limits)
184 limits.has_effort_limits =
false;
187 if (has_effort_limits && node->get_parameter(param_base_name +
".max_effort", max_effort))
189 limits.has_effort_limits =
true;
190 limits.max_effort = max_effort;
220 const std::string & joint_name,
const rclcpp::Node::SharedPtr & node,
223 const std::string param_base_name =
"joint_limits." + joint_name;
227 !node->has_parameter(param_base_name +
".has_soft_limits") &&
228 !node->has_parameter(param_base_name +
".k_velocity") &&
229 !node->has_parameter(param_base_name +
".k_position") &&
230 !node->has_parameter(param_base_name +
".soft_lower_limit") &&
231 !node->has_parameter(param_base_name +
".soft_upper_limit"))
235 "No soft joint limits specification found for joint '%s' in the parameter server "
236 "(node: %s param name: %s).",
237 joint_name.c_str(), node->get_name(), param_base_name.c_str());
241 catch (
const std::exception & ex)
243 RCLCPP_ERROR(node->get_logger(),
"%s", ex.what());
248 bool has_soft_limits;
249 if (node->get_parameter(param_base_name +
".has_soft_limits", has_soft_limits))
252 has_soft_limits && node->has_parameter(param_base_name +
".k_position") &&
253 node->has_parameter(param_base_name +
".k_velocity") &&
254 node->has_parameter(param_base_name +
".soft_lower_limit") &&
255 node->has_parameter(param_base_name +
".soft_upper_limit"))
257 node->get_parameter(param_base_name +
".k_position", soft_limits.k_position);
258 node->get_parameter(param_base_name +
".k_velocity", soft_limits.k_velocity);
259 node->get_parameter(param_base_name +
".soft_lower_limit", soft_limits.min_position);
260 node->get_parameter(param_base_name +
".soft_upper_limit", soft_limits.max_position);