50 RCLCPP_INFO_STREAM(
getLogger(),
"[CbAbsoluteRotate] Absolute yaw Angle:" << goal_angle);
72 nav2_msgs::action::NavigateToPose::Goal goal;
73 goal.pose.header.frame_id = referenceFrame;
76 auto targetAngle = goal_angle * M_PI / 180.0;
77 goal.pose.pose.position = currentPoseMsg.position;
79 q.setRPY(0, 0, targetAngle);
80 goal.pose.pose.orientation = tf2::toMsg(q);
85 if (odomTracker_ !=
nullptr)
101 "[" <<
getName() <<
"] current pose yaw: " << tf2::getYaw(currentPoseMsg.orientation));
104 "[" <<
getName() <<
"] goal pose yaw: " << tf2::getYaw(goal.pose.pose.orientation));
112 std::string nodename =
"/controller_server";
114 auto parameters_client =
115 std::make_shared<rclcpp::AsyncParametersClient>(this->
getNode(), nodename);
118 log,
"[" <<
getName() <<
"] using a parameter client to update some controller parameters: "
119 << nodename <<
". Waiting service.");
120 parameters_client->wait_for_service();
122 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] Service found: " << nodename <<
".");
124 std::string localPlannerName;
125 std::vector<rclcpp::Parameter> parameters;
128 rclcpp::Parameter yaw_goal_tolerance(
"goal_checker.yaw_goal_tolerance");
130 rclcpp::Parameter max_vel_theta, min_vel_theta;
136 if (isPureSpinningPlanner)
138 localPlannerName =
"PureSpinningLocalPlanner";
139 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_angular_z_speed");
140 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta");
142 else if (isRosBasePlanner)
144 localPlannerName =
"FollowPath";
145 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta");
146 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta");
154 auto fut = parameters_client->get_parameters(
155 {localPlannerName +
".yaw_goal_tolerance"},
156 [&](
auto futureParameters)
158 auto params = futureParameters.get();
165 yaw_goal_tolerance = rclcpp::Parameter(
"goal_checker.yaw_goal_tolerance", *
yawGoalTolerance);
166 parameters.push_back(yaw_goal_tolerance);
175 if (isRosBasePlanner)
181 auto fut = parameters_client->get_parameters(
182 {localPlannerName +
".max_vel_theta"},
183 [&](
auto futureParameters)
185 auto params = futureParameters.get();
193 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta", *
maxVelTheta);
194 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta", -*
maxVelTheta);
195 parameters.push_back(max_vel_theta);
196 parameters.push_back(min_vel_theta);
199 log,
"[" <<
getName() <<
"] updating max vel theta local planner to: " << *
maxVelTheta
202 log,
"[" <<
getName() <<
"] updating min vel theta local planner to: " << -*
maxVelTheta
210 yaw_goal_tolerance = rclcpp::Parameter(
"goal_checker.yaw_goal_tolerance",
oldYawTolerance);
212 log,
"[" <<
getName() <<
"] restoring yaw tolerance local planner from: "
218 if (isRosBasePlanner)
220 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta",
oldMaxVelTheta);
221 min_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta",
oldMinVelTheta);
224 parameters.push_back(max_vel_theta);
225 parameters.push_back(min_vel_theta);
227 log,
"[" <<
getName() <<
"] restoring max vel theta local planner from: " << *
maxVelTheta
230 log,
"[" <<
getName() <<
"] restoring min vel theta local planner from: " << -(*
maxVelTheta)
235 if (parameters.size())
237 std::stringstream ss;
238 ss <<
"Executing asynchronous request. Parameters to update: " << std::endl;
239 for (
auto & p : parameters)
241 ss << p.get_name() <<
" - " << p.value_to_string() << std::endl;
244 RCLCPP_INFO_STREAM(
getLogger(),
"[CbAbsoluteRotate] " << ss.str());
246 auto futureResults = parameters_client->set_parameters(parameters);
249 for (
auto & res : futureResults.get())
252 getLogger(),
"[" <<
getName() <<
"] parameter result: " << parameters[i].get_name() <<
"="
253 << parameters[i].as_string() <<
". Result: " << res.successful);
257 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] parameters updated");
261 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] skipping parameters update");