Go to the documentation of this file.00001 #include <hector_elevation_msgs/ElevationMapMetaData.h>
00002 #include <hector_elevation_msgs/ElevationGrid.h>
00003
00004 #include <std_msgs/String.h>
00005 #include <nav_msgs/OccupancyGrid.h>
00006 #include <nav_msgs/MapMetaData.h>
00007
00008 #include <ros/ros.h>
00009
00010 #include <opencv/cv.h>
00011 #include <opencv/highgui.h>
00012
00013 #include <cv_bridge/cv_bridge.h>
00014
00015 #include "pcl/point_types.h"
00016 #include <pcl/filters/crop_box.h>
00017 #include "pcl_ros/point_cloud.h"
00018 #include <pcl_ros/transforms.h>
00019
00020 #include <hector_map_tools/HectorMapTools.h>
00021
00022 #include <tf/transform_listener.h>
00023
00024 #include <dynamic_reconfigure/server.h>
00025 #include <hector_costmap/CostMapCalculationConfig.h>
00026
00027
00028 class CostMapCalculation{
00029
00030 public:
00032 CostMapCalculation();
00033
00035 ~CostMapCalculation();
00036
00038
00041 void updateMapParamsCallback(const nav_msgs::MapMetaData& map_meta_data);
00042
00044
00047 void callbackElevationMap(const hector_elevation_msgs::ElevationGridConstPtr& elevation_map_msg);
00048
00050
00053 void callbackPointCloud(const sensor_msgs::PointCloud2ConstPtr &cloud_msg);
00054
00056
00059 void callbackGridMap(const nav_msgs::OccupancyGridConstPtr& grid_map_msg);
00060
00062
00065 void sysMessageCallback(const std_msgs::String& string);
00066
00068
00072 void dynRecParamCallback(hector_costmap::CostMapCalculationConfig &config, uint32_t level);
00073
00075
00078 void timerCallback(const ros::TimerEvent& event);
00079
00080 private:
00081 ros::NodeHandle nHandle;
00082 ros::NodeHandle pnHandle;
00083
00084 ros::Publisher pub_cost_map;
00085 ros::Publisher pub_cloud_slice;
00086
00087 ros::Subscriber sub_elevation_map;
00088 ros::Subscriber sub_grid_map;
00089 ros::Subscriber sub_point_cloud;
00090 ros::Subscriber sub_sysMessage;
00091 ros::Subscriber sub_map_info;
00092
00093 dynamic_reconfigure::Server<hector_costmap::CostMapCalculationConfig> dyn_rec_server_;
00094
00095 tf::TransformListener listener;
00096
00097 ros::Timer timer;
00098
00099 HectorMapTools::CoordinateTransformer<float> world_map_transform;
00100
00101 double update_radius_world, initial_free_cells_radius;
00102 double grid_res_z;
00103 int elevation_zero_level;
00104 double max_delta_elevation;
00105 bool use_elevation_map, use_grid_map, use_cloud_map, received_grid_map, received_elevation_map, received_point_cloud, allow_elevation_map_to_clear_occupied_cells;
00106 int max_clear_size;
00107 double costmap_pub_freq;
00108 double slize_min_height, slize_max_height;
00109
00110 pcl::PointCloud<pcl::PointXYZ>::Ptr sliced_cloud;
00111 nav_msgs::OccupancyGridConstPtr grid_map_msg_;
00112
00113 nav_msgs::OccupancyGrid cost_map, elevation_cost_map, cloud_cost_map;
00114
00115 cv::Mat grid_map_, elevation_map_, elevation_map_filtered,elevation_cost_map_;
00116
00117 std::string cost_map_topic, elevation_map_topic, grid_map_topic, point_cloud_topic, sys_msg_topic;
00118 std::string map_frame_id,local_transform_frame_id;
00119
00120 Eigen::Vector2i min_index, max_index;
00121
00123
00127 bool calculateCostMap(char map_level);
00128
00130
00135 bool computeWindowIndices(ros::Time time,double update_radius);
00136 };
00137