这篇文章整理了常用PCL函数(用途、参数的意义,必要时也会列出该函数所在的头文件)以及一些其它关于PCL库的知识。

一、基础知识

1. data()

2

三、位姿变换

#include <pcl/common/transforms.h> //主要内容为:表示位姿的几种方法之间的转换
//cloud_in和cloud_out为::Ptr点云指针; Matrix4f=Affine3f
void pcl::transformPointCloud(const *cloud_in, *cloud_out, const Eigen::Matrix4f  & transform)
2. pcl/common/eigen.h

4×4变换矩阵 transformation Eigen::Affine3f 仿射矩阵 –> pos和rpy 位置和角度 6D位姿 ;输入和输出参数为float

#include <pcl/common/eigen.h>

// 精度可能存在问题
pcl::getTranslationAndEulerAngles(imuOdomAffineLast, x, y, z, roll, pitch, yaw);

// 输入和输出参数为float
Eigen::Affine3f lastPoseInMapAff = pcl::getTransformation(x, y, z, roll, pitch, yaw);

四、匹配和配准

1. ndt.h
setTransformationEpsilon(ndt_epsilon_); // the transformation epsilon in order for an optimization to be considered as having converged to the final solution.
setStepSize(ndt_step_size_); // Set the newton line search maximum step length.
setResolution(ndt_resolution_); // Set the voxel grid resolution.
getFitnessScore	(	double 	max_range = std::numeric_limits<double>::max()	); // Obtain the Euclidean fitness score (e.g., mean of squared distances from the source to the target)
2. pcl/kdtree/kdtree_flann.h
#include <pcl/kdtree/kdtree_flann.h>
// max_nn: num of returned points, if max_nn==0, return all.
kdtreeSurroundingKeyPoses->radiusSearch(point, radius, k_indices, k_sqr_distances,	max_nn);

pcl::moveFromROSMsg(currentCloudMsg, *laserCloudIn);
3. pcl/registration/icp.h
#include <pcl/registration/icp.h>
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
pcl::PointCloud<pcl::PointXYZ>::Ptr loopSourceCorner;
icp.setInputSource(loopSourceCorner); //注意输入的点云的数据类型为Ptr

五、文件处理

1. 加载文件
#include <pcl/io/pcd_io.h>
//temFilePath包含文件名和后缀;thisCornerCloud为::Ptr点云指针;
pcl::io::loadPCDFile(temFilePath, *thisCornerCloud);


2

末、Q&A

1.

运行pcl_viewer时提示错误segment fault(core dump)。可能是因为驱动安装有问题,或者pcl的版本不适配。