Nav2 Navigation Stack - lyrical  lyrical
ROS 2 Navigation Stack
vector_object_server.hpp
1 // Copyright (c) 2023 Samsung R&D Institute Russia
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_MAP_SERVER__VECTOR_OBJECT_SERVER_HPP_
16 #define NAV2_MAP_SERVER__VECTOR_OBJECT_SERVER_HPP_
17 
18 #include <memory>
19 #include <string>
20 #include <vector>
21 
22 #include "rclcpp/rclcpp.hpp"
23 #include "nav_msgs/msg/occupancy_grid.hpp"
24 
25 #include "nav2_ros_common/tf2_factories.hpp"
26 
27 #include "nav2_msgs/srv/add_shapes.hpp"
28 #include "nav2_msgs/srv/remove_shapes.hpp"
29 #include "nav2_msgs/srv/get_shapes.hpp"
30 #include "nav2_ros_common/lifecycle_node.hpp"
31 
32 #include "nav2_map_server/vector_object_utils.hpp"
33 #include "nav2_map_server/vector_object_shapes.hpp"
34 
35 namespace nav2_map_server
36 {
37 
40 {
41 public:
46  explicit VectorObjectServer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
47 
48 protected:
55  nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State & state) override;
61  nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State & state) override;
67  nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State & state) override;
73  nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State & state) override;
79  nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State & state) override;
80 
85  bool obtainParams();
86 
92  std::vector<std::shared_ptr<Shape>>::iterator findShape(const unsigned char * uuid);
93 
99 
108  void getMapBoundaries(double & min_x, double & min_y, double & max_x, double & max_y) const;
109 
118  void updateMap(
119  const double & min_x, const double & min_y, const double & max_x, const double & max_y);
120 
124  void putVectorObjectsOnMap();
125 
129  void publishMap();
130 
135  void processMap();
136 
141  void switchMapUpdate();
142 
152  void addShapesCallback(
153  const std::shared_ptr<rmw_request_id_t> request_header,
154  const std::shared_ptr<nav2_msgs::srv::AddShapes::Request> request,
155  std::shared_ptr<nav2_msgs::srv::AddShapes::Response> response);
156 
164  void getShapesCallback(
165  const std::shared_ptr<rmw_request_id_t> request_header,
166  const std::shared_ptr<nav2_msgs::srv::GetShapes::Request> request,
167  std::shared_ptr<nav2_msgs::srv::GetShapes::Response> response);
168 
177  const std::shared_ptr<rmw_request_id_t> request_header,
178  const std::shared_ptr<nav2_msgs::srv::RemoveShapes::Request> request,
179  std::shared_ptr<nav2_msgs::srv::RemoveShapes::Response> response);
180 
181 protected:
183  nav2::TransformBuffer::SharedPtr tf_buffer_;
185  nav2::TransformListener::SharedPtr tf_listener_;
186 
188  std::vector<std::shared_ptr<Shape>> shapes_;
189 
191  double resolution_;
195  OverlayType overlay_type_;
196 
198  nav_msgs::msg::OccupancyGrid::SharedPtr map_;
200  double process_map_;
201 
203  std::string global_frame_id_;
209 
213  rclcpp::TimerBase::SharedPtr map_timer_;
214 
216  nav2::ServiceServer<nav2_msgs::srv::AddShapes>::SharedPtr add_shapes_service_;
218  nav2::ServiceServer<nav2_msgs::srv::GetShapes>::SharedPtr get_shapes_service_;
220  nav2::ServiceServer<nav2_msgs::srv::RemoveShapes>::SharedPtr remove_shapes_service_;
221 
223  std::string map_topic_;
225  nav2::Publisher<nav_msgs::msg::OccupancyGrid>::SharedPtr map_pub_;
226 };
227 
228 } // namespace nav2_map_server
229 
230 #endif // NAV2_MAP_SERVER__VECTOR_OBJECT_SERVER_HPP_
A lifecycle node wrapper to enable common Nav2 needs such as manipulating parameters.
void addShapesCallback(const std::shared_ptr< rmw_request_id_t > request_header, const std::shared_ptr< nav2_msgs::srv::AddShapes::Request > request, std::shared_ptr< nav2_msgs::srv::AddShapes::Response > response)
Callback for AddShapes service call. Reads all input vector objects from service request,...
void switchMapUpdate()
If map to be update dynamically, creates map processing timer, otherwise process map once.
void publishMap()
Publishes output map.
nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
: Resets all services, publishers, map and TF-s
double process_map_
Whether to process and publish map.
nav2::ServiceServer< nav2_msgs::srv::GetShapes >::SharedPtr get_shapes_service_
GetShapes service.
VectorObjectServer(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
Constructor for the VectorObjectServer.
bool transformVectorObjects()
Transform all vector shapes from their local frame to output map frame.
void processMap()
Calculates new map sizes, updates map, processes all vector objects on it and publishes output map on...
std::vector< std::shared_ptr< Shape > > shapes_
All shapes vector.
double update_frequency_
Frequency to dynamically update/publish the map (if necessary)
int8_t default_value_
Default value the output map to be filled with.
void removeShapesCallback(const std::shared_ptr< rmw_request_id_t > request_header, const std::shared_ptr< nav2_msgs::srv::RemoveShapes::Request > request, std::shared_ptr< nav2_msgs::srv::RemoveShapes::Response > response)
Callback for RemoveShapes service call. Try to remove requested vector objects and switches map proce...
std::vector< std::shared_ptr< Shape > >::iterator findShape(const unsigned char *uuid)
Finds the shape with given UUID.
double resolution_
Output map resolution.
nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
: Activates output map publisher and creates bond connection
bool enforce_global_frame_id_
If true, disables TF listener and requires all incoming shapes to have frame_id empty or equal to glo...
nav2::Publisher< nav_msgs::msg::OccupancyGrid >::SharedPtr map_pub_
Output map publisher.
nav_msgs::msg::OccupancyGrid::SharedPtr map_
Output map with vector objects on it.
void putVectorObjectsOnMap()
Processes all vector objects on raster output map.
double transform_tolerance_
Transform tolerance.
std::string global_frame_id_
Frame of output map.
std::string map_topic_
@beirf Topic name where the output map to be published to
nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
Called in shutdown state.
rclcpp::TimerBase::SharedPtr map_timer_
Map update timer.
void getMapBoundaries(double &min_x, double &min_y, double &max_x, double &max_y) const
Obtains map boundaries to place all vector objects inside.
void getShapesCallback(const std::shared_ptr< rmw_request_id_t > request_header, const std::shared_ptr< nav2_msgs::srv::GetShapes::Request > request, std::shared_ptr< nav2_msgs::srv::GetShapes::Response > response)
Callback for GetShapes service call. Gets all shapes and returns them to the service response.
nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
: Deactivates map publisher and timer (if any), destroys bond connection
nav2::ServiceServer< nav2_msgs::srv::AddShapes >::SharedPtr add_shapes_service_
AddShapes service.
nav2::TransformListener::SharedPtr tf_listener_
TF listener.
nav2::TransformBuffer::SharedPtr tf_buffer_
TF buffer.
void updateMap(const double &min_x, const double &min_y, const double &max_x, const double &max_y)
Creates or updates existing map with required sizes and fills it with default value.
nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
: Initializes TF buffer/listener, obtains ROS-parameters, creates incoming services,...
OverlayType overlay_type_
@Overlay Type of overlay of vector objects on the map
bool obtainParams()
Supporting routine obtaining all ROS-parameters.
nav2::ServiceServer< nav2_msgs::srv::RemoveShapes >::SharedPtr remove_shapes_service_
RemoveShapes service.