1818#include < string>
1919#include < memory>
2020
21+ #include < tuple>
22+
2123#include " tf2_ros/buffer.h"
2224#include " tf2_ros/transform_listener.h"
2325#include " tf2_ros/transform_broadcaster.h"
3133
3234#include " nav_msgs/msg/path.hpp"
3335#include " sensor_msgs/msg/point_cloud2.hpp"
36+ #include " sensor_msgs/msg/camera_info.hpp"
37+ #include " sensor_msgs/msg/image.hpp"
38+ #include " image_geometry/pinhole_camera_model.hpp"
39+
40+ #include " opencv2/opencv.hpp"
3441
3542#include " rclcpp/rclcpp.hpp"
3643
@@ -45,24 +52,41 @@ class GridmapUpdaterNode : public rclcpp::Node
4552 explicit GridmapUpdaterNode (const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
4653
4754private:
55+ void get_params ();
4856 void init_gridmap ();
4957 void reset_gridmap ();
5058 void update_gridmap (
5159 const pcl::PointCloud<pcl::PointXYZ> & pc_map,
52- const pcl::PointCloud<pcl::PointXYZ> & pc_robot);
60+ const pcl::PointCloud<pcl::PointXYZ> & pc_robot,
61+ const pcl::PointCloud<pcl::PointXYZ> & pc_camera);
5362 void publish_gridmap (const builtin_interfaces::msg::Time & stamp);
5463
5564 void init_colors ();
5665
5766 rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::SharedPtr pc_sub_;
5867 rclcpp::Subscription<nav_msgs::msg::Path>::SharedPtr path_sub_;
68+ rclcpp::Subscription<sensor_msgs::msg::CameraInfo>::SharedPtr subscription_info_;
69+ rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr subscription_img_;
5970 rclcpp::Publisher<grid_map_msgs::msg::GridMap>::SharedPtr gridmap_pub_;
71+ rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr img_pub_;
6072
6173 void pc_callback (sensor_msgs::msg::PointCloud2::UniquePtr pc_in);
6274 void path_callback (nav_msgs::msg::Path::UniquePtr path_in);
75+ void topic_callback_info (sensor_msgs::msg::CameraInfo::UniquePtr msg);
76+ void image_callback (sensor_msgs::msg::Image::UniquePtr msg);
77+
78+ std::tuple<float , int , int > get_point_color (pcl::PointXYZ point);
79+
80+ std::string map_frame_id_;
81+ std::string robot_frame_id_;
82+ std::string camera_frame_id_;
83+ std::string camera_info_topic_;
84+ std::string camera_topic_;
85+ std::string lidar_topic_;
86+ std::string path_topic_;
87+
88+ bool camera_info_received_ {false };
6389
64- std::string map_frame_id_ {" map" };
65- std::string robot_frame_id_ {" robot_base_link" };
6690 double resolution_gridmap_ {0.2 };
6791 double size_x_ {100.0 };
6892 double size_y_ {100.0 };
@@ -76,10 +100,15 @@ class GridmapUpdaterNode : public rclcpp::Node
76100 std::shared_ptr<grid_map::GridMap> gridmap_;
77101 Eigen::MatrixXf em_;
78102 Eigen::MatrixXf tm_;
103+ Eigen::MatrixXf cm_;
79104
80105 tf2_ros::Buffer tf_buffer_;
81106 tf2_ros::TransformListener tf_listener_;
82107
108+ std::shared_ptr<image_geometry::PinholeCameraModel> camera_model_;
109+
110+ cv::Mat image_rgb_raw_;
111+
83112 float color_unknown_;
84113 float color_free_;
85114 float color_obstacle_;
0 commit comments