Nav2 Navigation Stack - rolling  main
ROS 2 Navigation Stack
rerouting_service.hpp
1 // Copyright (c) 2025 Open Navigation LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef NAV2_ROUTE__PLUGINS__ROUTE_OPERATIONS__REROUTING_SERVICE_HPP_
16 #define NAV2_ROUTE__PLUGINS__ROUTE_OPERATIONS__REROUTING_SERVICE_HPP_
17 
18 #include <memory>
19 #include <string>
20 
21 #include "rclcpp/rclcpp.hpp"
22 #include "rclcpp_lifecycle/lifecycle_node.hpp"
23 #include "nav2_route/interfaces/route_operation.hpp"
24 #include "nav2_ros_common/node_utils.hpp"
25 #include "std_srvs/srv/trigger.hpp"
26 #include "nav2_ros_common/service_server.hpp"
27 
28 namespace nav2_route
29 {
30 
36 {
37 public:
41  ReroutingService() = default;
42 
46  virtual ~ReroutingService() = default;
47 
51  void configure(
52  const nav2::LifecycleNode::SharedPtr node,
53  std::shared_ptr<nav2_costmap_2d::CostmapSubscriber> costmap_subscriber,
54  const std::string & name) override;
55 
60  std::string getName() override {return name_;}
61 
67  RouteOperationType processType() override {return RouteOperationType::ON_QUERY;}
68 
81  NodePtr node,
82  EdgePtr edge_entered,
83  EdgePtr edge_exited,
84  const Route & route,
85  const geometry_msgs::msg::PoseStamped & curr_pose,
86  const Metadata * mdata = nullptr) override;
87 
93  void serviceCb(
94  const std::shared_ptr<rmw_request_id_t> request_header,
95  const std::shared_ptr<std_srvs::srv::Trigger::Request> request,
96  std::shared_ptr<std_srvs::srv::Trigger::Response> response);
97 
98 protected:
99  std::string name_;
100  std::atomic_bool reroute_;
101  rclcpp::Logger logger_{rclcpp::get_logger("ReroutingService")};
102  typename nav2::ServiceServer<std_srvs::srv::Trigger>::SharedPtr service_;
103 };
104 
105 } // namespace nav2_route
106 
107 #endif // NAV2_ROUTE__PLUGINS__ROUTE_OPERATIONS__REROUTING_SERVICE_HPP_
A route operation to process requests from an external server for rerouting.
void serviceCb(const std::shared_ptr< rmw_request_id_t > request_header, const std::shared_ptr< std_srvs::srv::Trigger::Request > request, std::shared_ptr< std_srvs::srv::Trigger::Response > response)
Service callback to trigger a reroute externally.
ReroutingService()=default
Constructor.
virtual ~ReroutingService()=default
destructor
RouteOperationType processType() override
Indication that the adjust speed limit route operation is performed on all state changes.
void configure(const nav2::LifecycleNode::SharedPtr node, std::shared_ptr< nav2_costmap_2d::CostmapSubscriber > costmap_subscriber, const std::string &name) override
Configure.
OperationResult perform(NodePtr node, EdgePtr edge_entered, EdgePtr edge_exited, const Route &route, const geometry_msgs::msg::PoseStamped &curr_pose, const Metadata *mdata=nullptr) override
The main speed limit operation to adjust the maximum speed of the vehicle.
std::string getName() override
Get name of the plugin for parameter scope mapping.
A plugin interface to perform an operation while tracking the route such as triggered from the graph ...
An object representing edges between nodes.
Definition: types.hpp:134
An object to store arbitrary metadata regarding nodes from the graph file.
Definition: types.hpp:35
An object to store the nodes in the graph file.
Definition: types.hpp:183
a struct to hold return from an operation
An ordered set of nodes and edges corresponding to the planned route.
Definition: types.hpp:211