38 #ifndef NAV2_COSTMAP_2D__COSTMAP_2D_ROS_HPP_
39 #define NAV2_COSTMAP_2D__COSTMAP_2D_ROS_HPP_
46 #include "geometry_msgs/msg/polygon.h"
47 #include "geometry_msgs/msg/polygon_stamped.h"
48 #include "nav2_costmap_2d/costmap_2d_publisher.hpp"
49 #include "nav2_costmap_2d/footprint.hpp"
50 #include "nav2_costmap_2d/clear_costmap_service.hpp"
51 #include "nav2_costmap_2d/layered_costmap.hpp"
52 #include "nav2_costmap_2d/layer.hpp"
53 #include "nav2_util/lifecycle_node.hpp"
54 #include "pluginlib/class_loader.hpp"
55 #include "tf2/convert.h"
56 #include "tf2/LinearMath/Transform.h"
57 #include "tf2_ros/buffer.h"
58 #include "tf2_ros/transform_listener.h"
60 #include "tf2/transform_datatypes.h"
62 #pragma GCC diagnostic push
63 #pragma GCC diagnostic ignored "-Wpedantic"
64 #include "tf2/utils.h"
65 #pragma GCC diagnostic pop
80 Costmap2DROS(
const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
96 const std::string & name,
97 const std::string & parent_namespace,
98 const std::string & local_namespace);
108 nav2_util::CallbackReturn
on_configure(
const rclcpp_lifecycle::State & state)
override;
113 nav2_util::CallbackReturn
on_activate(
const rclcpp_lifecycle::State & state)
override;
118 nav2_util::CallbackReturn
on_deactivate(
const rclcpp_lifecycle::State & state)
override;
123 nav2_util::CallbackReturn
on_cleanup(
const rclcpp_lifecycle::State & state)
override;
128 nav2_util::CallbackReturn
on_shutdown(
const rclcpp_lifecycle::State & state)
override;
144 get_logger(),
"Running Nav2 LifecycleNode rcl preshutdown (%s)",
187 return layered_costmap_->isCurrent();
195 bool getRobotPose(geometry_msgs::msg::PoseStamped & global_pose);
204 const geometry_msgs::msg::PoseStamped & input_pose,
205 geometry_msgs::msg::PoseStamped & transformed_pose);
226 return layered_costmap_->getCostmap();
252 return layered_costmap_.get();
271 return padded_footprint_;
283 return unpadded_footprint_;
316 std::shared_ptr<tf2_ros::Buffer> getTfBuffer() {
return tf_buffer_;}
336 rclcpp_lifecycle::LifecyclePublisher<geometry_msgs::msg::PolygonStamped>::SharedPtr
338 std::unique_ptr<Costmap2DPublisher> costmap_publisher_{
nullptr};
340 rclcpp::Subscription<geometry_msgs::msg::Polygon>::SharedPtr footprint_sub_;
341 rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_sub_;
344 rclcpp::CallbackGroup::SharedPtr callback_group_;
345 rclcpp::executors::SingleThreadedExecutor::SharedPtr executor_;
346 std::unique_ptr<nav2_util::NodeThread> executor_thread_;
349 std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
350 std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
352 std::unique_ptr<LayeredCostmap> layered_costmap_{
nullptr};
354 std::string parent_namespace_;
360 bool map_update_thread_shutdown_{
false};
361 std::atomic<bool> stop_updates_{
false};
362 std::atomic<bool> initialized_{
false};
363 std::atomic<bool> stopped_{
true};
364 std::mutex _dynamic_parameter_mutex;
366 rclcpp::Time last_publish_{0, 0, RCL_ROS_TIME};
367 rclcpp::Duration publish_cycle_{1, 0};
368 pluginlib::ClassLoader<Layer> plugin_loader_{
"nav2_costmap_2d",
"nav2_costmap_2d::Layer"};
374 bool always_send_full_costmap_{
false};
375 std::string footprint_;
376 float footprint_padding_{0};
378 int map_height_meters_{0};
379 double map_publish_frequency_{0};
380 double map_update_frequency_{0};
381 int map_width_meters_{0};
384 std::vector<std::string> default_plugins_;
385 std::vector<std::string> default_types_;
386 std::vector<std::string> plugin_names_;
387 std::vector<std::string> plugin_types_;
388 std::vector<std::string> filter_names_;
389 std::vector<std::string> filter_types_;
390 double resolution_{0};
392 double robot_radius_;
394 bool track_unknown_space_{
false};
400 bool use_radius_{
false};
401 std::vector<geometry_msgs::msg::Point> unpadded_footprint_;
402 std::vector<geometry_msgs::msg::Point> padded_footprint_;
404 std::unique_ptr<ClearCostmapService> clear_costmap_service_;
407 OnSetParametersCallbackHandle::SharedPtr dyn_params_handler;
413 rcl_interfaces::msg::SetParametersResult
A ROS wrapper for a 2D Costmap. Handles subscribing to topics that provide observations about obstacl...
Costmap2DROS(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
Constructor for the wrapper.
void mapUpdateLoop(double frequency)
Function on timer for costmap update.
nav2_util::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
Activate node.
void getOrientedFootprint(std::vector< geometry_msgs::msg::Point > &oriented_footprint)
Build the oriented footprint of the robot at the robot's current pose.
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(std::vector< rclcpp::Parameter > parameters)
Callback executed when a paramter change is detected.
bool getRobotPose(geometry_msgs::msg::PoseStamped &global_pose)
Get the pose of the robot in the global frame of the costmap.
void getParameters()
Get parameters for node.
geometry_msgs::msg::Polygon getRobotFootprintPolygon()
Returns the current padded footprint as a geometry_msgs::msg::Polygon.
void pause()
Stops the costmap from updating, but sensor data still comes in over the wire.
bool getUseRadius()
Get the costmap's use_radius_ parameter, corresponding to whether the footprint for the robot is a ci...
void setRobotFootprintPolygon(const geometry_msgs::msg::Polygon::SharedPtr footprint)
Set the footprint of the robot to be the given polygon, padded by footprint_padding.
nav2_util::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
shutdown node
std::string getName() const
Returns costmap name.
~Costmap2DROS()
A destructor.
double transform_tolerance_
The timeout before transform errors.
bool rolling_window_
Whether to use a rolling window version of the costmap.
LayeredCostmap * getLayeredCostmap()
Get the layered costmap object used in the node.
void on_rcl_preshutdown() override
as a child-LifecycleNode : Costmap2DROS may be launched by another Lifecycle Node as a composed modul...
void resume()
Resumes costmap updates.
void updateMap()
Update the map with the layered costmap / plugins.
nav2_util::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
Deactivate node.
std::string getBaseFrameID()
Returns the local frame of the costmap.
nav2_util::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
Configure node.
std::vector< geometry_msgs::msg::Point > getRobotFootprint()
Return the current footprint of the robot as a vector of points.
void setRobotFootprint(const std::vector< geometry_msgs::msg::Point > &points)
Set the footprint of the robot to be the given set of points, padded by footprint_padding.
void resetLayers()
Reset each individual layer.
bool transformPoseToGlobalFrame(const geometry_msgs::msg::PoseStamped &input_pose, geometry_msgs::msg::PoseStamped &transformed_pose)
Transform the input_pose in the global frame of the costmap.
std::string global_frame_
The global frame for the costmap.
std::string getGlobalFrameID()
Returns the global frame of the costmap.
void start()
Subscribes to sensor topics if necessary and starts costmap updates, can be called to restart the cos...
void stop()
Stops costmap updates and unsubscribes from sensor topics.
std::string robot_base_frame_
The frame_id of the robot base.
bool isCurrent()
Same as getLayeredCostmap()->isCurrent().
double getTransformTolerance() const
Returns the delay in transform (tf) data that is tolerable in seconds.
nav2_util::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
Cleanup node.
double getRobotRadius()
Get the costmap's robot_radius_ parameter, corresponding to raidus of the robot footprint when it is ...
std::unique_ptr< std::thread > map_update_thread_
A thread for updating the map.
Costmap2D * getCostmap()
Return a pointer to the "master" costmap which receives updates from all the layers.
std::vector< geometry_msgs::msg::Point > getUnpaddedRobotFootprint()
Return the current unpadded footprint of the robot as a vector of points.
bool is_lifecycle_follower_
whether is a child-LifecycleNode or an independent node
A 2D costmap provides a mapping between points in the world and their associated "costs".
Instantiates different layer plugins and aggregates them into one score.
A lifecycle node wrapper to enable common Nav2 needs such as manipulating parameters.
void destroyBond()
Destroy bond connection to lifecycle manager.
geometry_msgs::msg::Polygon toPolygon(std::vector< geometry_msgs::msg::Point > pts)
Convert vector of Points to Polygon msg.