@@ -71,11 +71,11 @@ inline BT::NodeStatus RemovePassedGoals::tick()
7171 std::vector<nav2_msgs::msg::WaypointStatus> waypoint_statuses;
7272 auto waypoint_statuses_get_res = getInput (" input_waypoint_statuses" , waypoint_statuses);
7373 if (!waypoint_statuses_get_res) {
74- RCLCPP_WARN (node_->get_logger (), " Missing [input_waypoint_statuses] port input!" );
74+ RCLCPP_ERROR (node_->get_logger (), " Missing [input_waypoint_statuses] port input!" );
7575 }
7676
7777 double dist_to_goal;
78- while (goal_poses.goals .size () > 0 ) {
78+ while (goal_poses.goals .size () > 1 ) {
7979 dist_to_goal = euclidean_distance (goal_poses.goals [0 ].pose , current_pose.pose );
8080
8181 if (dist_to_goal > viapoint_achieved_radius_) {
@@ -86,25 +86,20 @@ inline BT::NodeStatus RemovePassedGoals::tick()
8686 if (waypoint_statuses_get_res) {
8787 auto cur_waypoint_index =
8888 find_next_matching_goal_in_waypoint_statuses (waypoint_statuses, goal_poses.goals [0 ]);
89- if (cur_waypoint_index ! = -1 ) {
90- waypoint_statuses[cur_waypoint_index]. waypoint_status =
91- nav2_msgs::msg::WaypointStatus::COMPLETED ;
89+ if (cur_waypoint_index = = -1 ) {
90+ RCLCPP_ERROR (node_-> get_logger (), " Failed to find matching goal in waypoint_statuses " );
91+ return BT::NodeStatus::FAILURE ;
9292 }
93- }
94-
95- // prevent from removing the last goal
96- if (goal_poses.goals .size () == 1 ) {
97- break ;
93+ waypoint_statuses[cur_waypoint_index].waypoint_status =
94+ nav2_msgs::msg::WaypointStatus::COMPLETED;
9895 }
9996
10097 goal_poses.goals .erase (goal_poses.goals .begin ());
10198 }
10299
103100 setOutput (" output_goals" , goal_poses);
104101 // set `waypoint_statuses` output
105- if (waypoint_statuses_get_res) {
106- setOutput (" output_waypoint_statuses" , waypoint_statuses);
107- }
102+ setOutput (" output_waypoint_statuses" , waypoint_statuses);
108103
109104 return BT::NodeStatus::SUCCESS;
110105}
0 commit comments