computing/perception/detection/fusion_tools/pixel_cloud_fusion

pixel_cloud_fusion.h定义图像和点云之间的坐标变换,定义了图像和点云同步方法,订阅了点云和图像的原始数据,输入点云和图像融合后的数据publish_fused_cloud_

pcl::PointXYZ ROSPixelCloudFusionApp::TransformPoint(const pcl::PointXYZ &in_point, const tf::StampedTransform &in_transform)  将单个点按照旋转矩阵转换坐标,输出

IntrinsicsCallback() 相机内参接收,相机内参存入到camera_instrinsics,畸变矩阵存入distortion_coefficients_,相机坐标系到世界坐标系变换参数存入fx_,fy_,cx_,cy_,将内参的订阅停止   .shutdown()

imagecallback() 接收图像数据的回调函数,先检查是否收到相机的内参以及畸变矩阵 ,将图像进行畸变校正,存入curent_frame_,坐标系及其行列数分别存入image_size_和image_frame_id_中

tf::StampedTransform ROSPixelCloudFusionApp::FindTransform(const std::string &in_target_frame, const std::string &in_source_frame) 查找源坐标系到目标坐标系的变换,有,则camera_lidar_tf_ok_=true,返回transform,否则camera_lidar_tf_ok_=false

InitializeROSIo(ros::NodeHandle &in_private_handle)初始化节点,分别从/points_raw , /image_rectified , /camera_info订阅三条消息

CloudCallback(const sensor_msgs::PointCloud2::ConstPtr &in_cloud_msg)订阅点云消息。1. 检测是否接收到图像2. 是否接收到坐标转换矩阵 3. 是否接收到相机内参。 根据transform将点云转换为像素。存入cam_cloud,projection_map中保存像素值和点云的键值对。在图像大小的范围内,遍历每一个projection_map,用点云的xyz和像素的颜色rgb生成一个pointxyzrgb点。最后通过/point_fused输出,输出的是一个pointxyzrgb点云

你可能感兴趣的:(computing/perception/detection/fusion_tools/pixel_cloud_fusion)