Nav2 Navigation Stack - lyrical  lyrical
ROS 2 Navigation Stack
collision_detector_node.hpp
1 // Copyright (c) 2022 Samsung R&D Institute Russia
2 // Copyright (c) 2023 Pixel Robotics GmbH
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef NAV2_COLLISION_MONITOR__COLLISION_DETECTOR_NODE_HPP_
17 #define NAV2_COLLISION_MONITOR__COLLISION_DETECTOR_NODE_HPP_
18 
19 #include <string>
20 #include <vector>
21 #include <memory>
22 #include <unordered_map>
23 
24 #include "rclcpp/rclcpp.hpp"
25 
26 #include "tf2/time.hpp"
27 
28 #include "nav2_ros_common/lifecycle_node.hpp"
29 #include "nav2_ros_common/tf2_factories.hpp"
30 #include "nav2_msgs/msg/collision_detector_state.hpp"
31 #include "visualization_msgs/msg/marker_array.hpp"
32 
33 #include "nav2_collision_monitor/types.hpp"
34 #include "nav2_collision_monitor/polygon.hpp"
35 #include "nav2_collision_monitor/circle.hpp"
36 #include "nav2_collision_monitor/velocity_polygon.hpp"
37 #include "nav2_collision_monitor/source.hpp"
38 #include "nav2_collision_monitor/scan.hpp"
39 #include "nav2_collision_monitor/pointcloud.hpp"
40 #include "nav2_collision_monitor/range.hpp"
41 #include "nav2_collision_monitor/polygon_source.hpp"
43 
44 namespace nav2_collision_monitor
45 {
46 
51 {
52 public:
57  explicit CollisionDetector(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
62 
63 protected:
70  nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State & state) override;
76  nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State & state) override;
82  nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State & state) override;
88  nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State & state) override;
94  nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State & state) override;
95 
96 protected:
101  bool getParameters();
108  bool configurePolygons(
109  const std::string & base_frame_id,
110  const tf2::Duration & transform_tolerance);
122  bool configureSources(
123  const std::string & base_frame_id,
124  const std::string & odom_frame_id,
125  const tf2::Duration & transform_tolerance,
126  const rclcpp::Duration & source_timeout,
127  const bool base_shift_correction);
128 
132  void process();
133 
137  void publishVisualizations() const;
138 
145  const std::unordered_map<std::string, std::vector<Point>> & all_triggering_points);
146 
147  // ----- Variables -----
148 
150  nav2::TransformBuffer::SharedPtr tf_buffer_;
152  nav2::TransformListener::SharedPtr tf_listener_;
153 
155  std::vector<std::shared_ptr<Polygon>> polygons_;
157  std::vector<std::shared_ptr<Source>> sources_;
158 
160  nav2::Publisher<nav2_msgs::msg::CollisionDetectorState>::SharedPtr
163  nav2::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr
166  nav2::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr
169  rclcpp::TimerBase::SharedPtr timer_;
170 
172  double frequency_;
176  std::string base_frame_id_;
177 }; // class CollisionDetector
178 
179 } // namespace nav2_collision_monitor
180 
181 #endif // NAV2_COLLISION_MONITOR__COLLISION_DETECTOR_NODE_HPP_
A lifecycle node wrapper to enable common Nav2 needs such as manipulating parameters.
nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
: Activates LifecyclePublishers, polygons and main processor, creates bond connection
nav2::TransformBuffer::SharedPtr tf_buffer_
TF buffer.
nav2::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr collision_points_marker_pub_
Collision points marker publisher.
bool getParameters()
Supporting routine obtaining all ROS-parameters.
nav2::TransformListener::SharedPtr tf_listener_
TF listener.
bool configureSources(const std::string &base_frame_id, const std::string &odom_frame_id, const tf2::Duration &transform_tolerance, const rclcpp::Duration &source_timeout, const bool base_shift_correction)
Supporting routine creating and configuring all data sources.
nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
Called in shutdown state.
void publishTriggeringPoints(const std::unordered_map< std::string, std::vector< Point >> &all_triggering_points)
Publishes the points inside each detected polygon as markers, bucketed by polygon name and per-point ...
nav2::Publisher< nav2_msgs::msg::CollisionDetectorState >::SharedPtr state_pub_
collision monitor state publisher
~CollisionDetector()
Destructor for the nav2_collision_monitor::CollisionDetector.
nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
: Resets all subscribers/publishers, polygons/data sources arrays
std::vector< std::shared_ptr< Source > > sources_
Data sources array.
void publishVisualizations() const
Publishes all visualization topics (polygons and exclusion zones).
bool configurePolygons(const std::string &base_frame_id, const tf2::Duration &transform_tolerance)
Supporting routine creating and configuring all polygons.
rclcpp::TimerBase::SharedPtr timer_
timer that runs actions
nav2::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr triggering_points_pub_
Triggering points marker publisher (points inside each detected polygon)
nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
: Deactivates LifecyclePublishers, polygons and main processor, destroys bond connection
nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
: Initializes and obtains ROS-parameters, creates main subscribers and publishers,...
std::vector< std::shared_ptr< Polygon > > polygons_
Polygons array.
CollisionDetector(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
Constructor for the nav2_collision_monitor::CollisionDetector.
bool collision_points_marker_3d_
Whether to include z in the collision_points_marker.
Observation source that converts a Nav2 costmap topic into 2D points for Collision Monitor.