Ros点云格式转换总结
三种格式:
sensor_msgs::PointCloud
sensor_msgs::PointCloud2
pcl::PointCloud<T>
其中,PointCloud2和pcl::PointCloud可以相互转换,PointCloud和PointCloud2可以相互转换,PointCloud和pcl::PointCloud的转换需要使用PointCloud2中转。
PointCloud⟺PointCloud2⟺pcl::PointCloud<T>PointCloud \Longleftrightarrow PointCloud2 \Longleftrightarrow pcl::PointCloud<T>PointCloud⟺PointCloud2⟺pcl::PointCloud<T>
PointCloud2 to PointCloud
#include "sensor_msgs/point_cloud_conversion.h"
static inline bool convertPointCloud2ToPointCloud (
const sensor_msgs::PointCloud2 &input, sensor_msgs::PointCloud &output);
PointCloud to PointCloud2
#include "sensor_msgs/point_cloud_conversion.h"
static inline bool convertPointCloudToPointCloud2 (
const sensor_msgs::PointCloud &input, sensor_msgs::PointCloud2 &output)
pcl::PointCloud< T > to PointCloud2
#include "pcl_conversions/pcl_conversions.h"
template<typename T>
void toROSMsg(const pcl::PointCloud<T> &pcl_cloud, sensor_msgs::PointCloud2 &cloud)
{
pcl::PCLPointCloud2 pcl_pc2;
pcl::toPCLPointCloud2(pcl_cloud, pcl_pc2);
pcl_conversions::moveFromPCL(pcl_pc2, cloud);
}
PointCloud2 to pcl::PointCloud< T >
#include "pcl_conversions/pcl_conversions.h"
template<typename T>
void fromROSMsg(const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud<T> &pcl_cloud)
{
pcl::PCLPointCloud2 pcl_pc2;
pcl_conversions::toPCL(cloud, pcl_pc2);
pcl::fromPCLPointCloud2(pcl_pc2, pcl_cloud);
}