这篇文章整理了常用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的版本不适配。