276{
277 if (max_angular_z_speed_ == 0 || max_linear_x_speed_ == 0) return;
278
279 if (cmd_vel.angular.z == 0)
280 {
281 cmd_vel.linear.x = max_linear_x_speed_;
282 }
283 else
284 {
285 double kurvature = cmd_vel.linear.x / cmd_vel.angular.z;
286
287 double linearAuthority = fabs(cmd_vel.linear.x / max_linear_x_speed_);
288 double angularAuthority = fabs(cmd_vel.angular.z / max_angular_z_speed_);
289 if (linearAuthority < angularAuthority)
290 {
291
292 cmd_vel.linear.x = max_linear_x_speed_;
293 cmd_vel.angular.z = kurvature / max_linear_x_speed_;
294 RCLCPP_WARN_STREAM(
295 nh_->get_logger(), "k=" << kurvature << "lets go to maximum linear capacity: " << cmd_vel);
296 }
297 else
298 {
299
300 cmd_vel.angular.x = max_angular_z_speed_;
301 cmd_vel.linear.x = kurvature * max_angular_z_speed_;
302 RCLCPP_WARN_STREAM(nh_->get_logger(), "lets go to maximum angular capacity: " << cmd_vel);
303 }
304 }
305}