@@ -120,12 +120,11 @@ PlannerServer::on_configure(const rclcpp_lifecycle::State & state)
120120 if (expected_planner_frequency > 0 ) {
121121 max_planner_duration_ = 1 / expected_planner_frequency;
122122 } else {
123- max_planner_duration_ = 0.0 ;
124-
125123 RCLCPP_WARN (
126124 get_logger (),
127- " The expected planner frequency parameter is %.4f Hz. The value has to be greater"
128- " than 0.0 to turn on displaying warning messages" , expected_planner_frequency);
125+ " The expected planner frequency parameter is %.4f Hz. The value should to be greater"
126+ " than 0.0 to turn on duration overrrun warning messages" , expected_planner_frequency);
127+ max_planner_duration_ = 0.0 ;
129128 }
130129
131130 // Initialize pubs & subs
@@ -230,7 +229,6 @@ PlannerServer::computePlan()
230229
231230 geometry_msgs::msg::PoseStamped start;
232231 if (!costmap_ros_->getRobotPose (start)) {
233- RCLCPP_ERROR (this ->get_logger (), " Could not get robot pose" );
234232 action_server_->terminate_current ();
235233 return ;
236234 }
@@ -240,30 +238,7 @@ PlannerServer::computePlan()
240238 goal = action_server_->accept_pending_goal ();
241239 }
242240
243- RCLCPP_DEBUG (
244- get_logger (), " Attempting to a find path from (%.2f, %.2f) to "
245- " (%.2f, %.2f)." , start.pose .position .x , start.pose .position .y ,
246- goal->pose .pose .position .x , goal->pose .pose .position .y );
247-
248- if (planners_.find (goal->planner_id ) != planners_.end ()) {
249- result->path = planners_[goal->planner_id ]->createPlan (start, goal->pose );
250- } else {
251- if (planners_.size () == 1 && goal->planner_id .empty ()) {
252- if (!single_planner_warning_given_) {
253- single_planner_warning_given_ = true ;
254- RCLCPP_WARN (
255- get_logger (), " No planners specified in action call. "
256- " Server will use only plugin %s in server."
257- " This warning will appear once." , planner_ids_concat_.c_str ());
258- }
259- result->path = planners_[planners_.begin ()->first ]->createPlan (start, goal->pose );
260- } else {
261- RCLCPP_ERROR (
262- get_logger (), " planner %s is not a valid planner. "
263- " Planner names are: %s" , goal->planner_id .c_str (),
264- planner_ids_concat_.c_str ());
265- }
266- }
241+ result->path = getPlan (start, goal->pose , goal->planner_id );
267242
268243 if (result->path .poses .size () == 0 ) {
269244 RCLCPP_WARN (
@@ -281,7 +256,6 @@ PlannerServer::computePlan()
281256 goal->pose .pose .position .y );
282257
283258 // Publish the plan for visualization purposes
284- RCLCPP_DEBUG (get_logger (), " Publishing the valid path" );
285259 publishPlan (result->path );
286260
287261 auto cycle_duration = steady_clock_.now () - start_time;
@@ -295,8 +269,6 @@ PlannerServer::computePlan()
295269 }
296270
297271 action_server_->succeeded_current (result);
298-
299- return ;
300272 } catch (std::exception & ex) {
301273 RCLCPP_WARN (
302274 get_logger (), " %s plugin failed to plan calculation to (%.2f, %.2f): \" %s\" " ,
@@ -305,15 +277,50 @@ PlannerServer::computePlan()
305277 // TODO(orduno): provide information about fail error to parent task,
306278 // for example: couldn't get costmap update
307279 action_server_->terminate_current ();
308- return ;
309280 }
310281}
311282
283+ nav_msgs::msg::Path
284+ PlannerServer::getPlan (
285+ const geometry_msgs::msg::PoseStamped & start,
286+ const geometry_msgs::msg::PoseStamped & goal,
287+ const std::string & planner_id)
288+ {
289+ RCLCPP_DEBUG (
290+ get_logger (), " Attempting to a find path from (%.2f, %.2f) to "
291+ " (%.2f, %.2f)." , start.pose .position .x , start.pose .position .y ,
292+ goal.pose .position .x , goal.pose .position .y );
293+
294+ if (planners_.find (planner_id) != planners_.end ()) {
295+ return planners_[planner_id]->createPlan (start, goal);
296+ } else {
297+ if (planners_.size () == 1 && planner_id.empty ()) {
298+ RCLCPP_WARN_ONCE (
299+ get_logger (), " No planners specified in action call. "
300+ " Server will use only plugin %s in server."
301+ " This warning will appear once." , planner_ids_concat_.c_str ());
302+ return planners_[planners_.begin ()->first ]->createPlan (start, goal);
303+ } else {
304+ RCLCPP_ERROR (
305+ get_logger (), " planner %s is not a valid planner. "
306+ " Planner names are: %s" , planner_id.c_str (),
307+ planner_ids_concat_.c_str ());
308+ }
309+ }
310+
311+ return nav_msgs::msg::Path ();
312+ }
313+
312314void
313315PlannerServer::publishPlan (const nav_msgs::msg::Path & path)
314316{
315317 auto msg = std::make_unique<nav_msgs::msg::Path>(path);
316- plan_publisher_->publish (std::move (msg));
318+ if (
319+ plan_publisher_->is_activated () &&
320+ this ->count_subscribers (plan_publisher_->get_topic_name ()) > 0 )
321+ {
322+ plan_publisher_->publish (std::move (msg));
323+ }
317324}
318325
319326} // namespace nav2_planner
0 commit comments