pcl库中附带了各种预定义的点类型,这些数据类型足以支持在pcl中所实现的所有算法和方法,但是在某些情况下,在使用pcl点类型时希望定义新的点类型,比如在LIO-SAM中定义的PointXYZIRPYT(包括点云基本的坐标(x,y,z)和强度I,以及三个旋转角RPY和时间T)。因此,pcl提供了创建自定义点云类型的方法。
1.pcl常用点云类型
pcl中定义了大量的常用点类型,在定义自己的点类型之前,可以先了解现有定义点类型的创建原因。
PointXYZ:最常见的数据类型之一,因为仅表示3D xyz信息。例如,可以通过points[i].data[0]或者points[i].x访问第i个点x坐标。
//PointXYZ-Members: float x, y, z
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
PointXYZI:简单的坐标+强度的点云类型
//PointXYZI-Members: float x, y, z, intensity
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float intensity;
};
float data_c[4];
};
PointXYZRGBA:与PointXYZI类似,除了可以访问rgba打包成的std::uint32_t rgba,还可以单独访问rgba各个通道信息(红,绿,蓝和透明度)。
//PointXYZRGBA-Members: float x, y, z, std::uint32_t rgba
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
union
{
struct
{
std::uint8_t b;
std::uint8_t g;
std::uint8_t r;
std::uint8_t a;
};
float rgb;
};
std::uint32_t rgba;
};
PointXY:简单的二维结构
struct
{
float x;
float y;
};
InterestPoint:与PointXYZI类似,strength表示关键点强度的测量值。
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float strength;
};
float data_c[4];
};
PointXYZRGB:类似PointXYZRGBA
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
union{
struct{
float rgb;
};
float data_c[4];
};
Normal:由于pcl中对于法线的操作非常常见,所以定义了另一个常用的数据类型,Normal结构体表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值。
union{
float data_n[4];
float normal[3];
struct{
float normal_x;
float normal_y;
float normal_z;
}
};
union{
struct{
float curvature;
}
float data_c[4];
};
PointNormal:保存点的XYZ数据,以及其法线和曲率数据。
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
union{
float data_n[4];
float normal[3];
struct{
float normal_x;
float normal_y;
float normal_z;
}
};
union{
struct{
float curvature;
}
float data_c[4];
};
PointXYZRGBNormal:储存XYZ坐标,RGB颜色,以及点的法线和曲率。
union{
float data[4];
struct{
float x;
float y;
float z;
};
};
union{
float data_n[4];
float normal[3];
struct{
float normal_x;
float normal_y;
float normal_z;
}
};
union{
struct{
float rgb;
float curvature;
}
float data_c[4];
};
以及还有其他类型就不一一介绍,详情可见官网。
2.自定义点类型
1待更