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;
75 auto targetAngle = goal_angle * M_PI / 180.0;
76 goal.pose.pose.position = currentPoseMsg.position;
78 q.setRPY(0, 0, targetAngle);
79 goal.pose.pose.orientation = tf2::toMsg(q);
84 if (odomTracker_ !=
nullptr)
100 "[" <<
getName() <<
"] current pose yaw: " << tf2::getYaw(currentPoseMsg.orientation));
103 "[" <<
getName() <<
"] goal pose yaw: " << tf2::getYaw(goal.pose.pose.orientation));
111 std::string nodename =
"/controller_server";
113 auto parameters_client =
114 std::make_shared<rclcpp::AsyncParametersClient>(this->
getNode(), nodename);
117 log,
"[" <<
getName() <<
"] using a parameter client to update some controller parameters: "
118 << nodename <<
". Waiting service.");
119 parameters_client->wait_for_service();
121 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] Service found: " << nodename <<
".");
123 std::string localPlannerName;
124 std::vector<rclcpp::Parameter> parameters;
126 rclcpp::Parameter yaw_goal_tolerance(
"goal_checker.yaw_goal_tolerance");
128 rclcpp::Parameter max_vel_theta, min_vel_theta;
134 if (isPureSpinningPlanner)
136 localPlannerName =
"PureSpinningLocalPlanner";
137 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_angular_z_speed");
138 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta");
140 else if (isRosBasePlanner)
142 localPlannerName =
"FollowPath";
143 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta");
144 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta");
152 auto fut = parameters_client->get_parameters(
153 {localPlannerName +
".yaw_goal_tolerance"},
154 [&](
auto futureParameters)
156 auto params = futureParameters.get();
163 yaw_goal_tolerance = rclcpp::Parameter(
"goal_checker.yaw_goal_tolerance", *
yawGoalTolerance);
164 parameters.push_back(yaw_goal_tolerance);
173 if (isRosBasePlanner)
176 auto fut = parameters_client->get_parameters(
177 {localPlannerName +
".max_vel_theta"},
178 [&](
auto futureParameters)
180 auto params = futureParameters.get();
188 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta", *
maxVelTheta);
189 min_vel_theta = rclcpp::Parameter(localPlannerName +
".min_vel_theta", -*
maxVelTheta);
190 parameters.push_back(max_vel_theta);
191 parameters.push_back(min_vel_theta);
194 log,
"[" <<
getName() <<
"] updating max vel theta local planner to: " << *
maxVelTheta
197 log,
"[" <<
getName() <<
"] updating min vel theta local planner to: " << -*
maxVelTheta
205 yaw_goal_tolerance = rclcpp::Parameter(
"goal_checker.yaw_goal_tolerance",
oldYawTolerance);
207 log,
"[" <<
getName() <<
"] restoring yaw tolerance local planner from: "
213 if (isRosBasePlanner)
215 max_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta",
oldMaxVelTheta);
216 min_vel_theta = rclcpp::Parameter(localPlannerName +
".max_vel_theta",
oldMinVelTheta);
219 parameters.push_back(max_vel_theta);
220 parameters.push_back(min_vel_theta);
222 log,
"[" <<
getName() <<
"] restoring max vel theta local planner from: " << *
maxVelTheta
225 log,
"[" <<
getName() <<
"] restoring min vel theta local planner from: " << -(*
maxVelTheta)
230 if (parameters.size())
232 std::stringstream ss;
233 ss <<
"Executing asynchronous request. Parameters to update: " << std::endl;
234 for (
auto & p : parameters)
236 ss << p.get_name() <<
" - " << p.value_to_string() << std::endl;
239 RCLCPP_INFO_STREAM(
getLogger(),
"[CbAbsoluteRotate] " << ss.str());
241 auto futureResults = parameters_client->set_parameters(parameters);
244 for (
auto & res : futureResults.get())
247 getLogger(),
"[" <<
getName() <<
"] parameter result: " << parameters[i].get_name() <<
"="
248 << parameters[i].as_string() <<
". Result: " << res.successful);
252 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] parameters updated");
256 RCLCPP_INFO_STREAM(log,
"[" <<
getName() <<
"] skipping parameters update");