环境:Windows11+PCL1.13.1+visual studio 2022
PCL安装及配置
- 在
https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.13.1
上下载安装包PCL-1.13.0-AllInOne-msvc2022-win64.exe,下载完成后运行,根据提示进行安装。 - 双击3rdParty\OpenNI2目录下的OpenNI-Windows-x64-2.2.msi文件进行OpenNI 2.2SDK的安装,安装位置置于PCL 1.13.0\3rdParty\OpenNI2
- 环境变量配置
- 新建系统变量PCL_ROOT,其值为点云库PCL1.13.1的根路径
- 编辑系统变量Path,增加如下值:
%PCL_ROOT%\bin %PCL_ROOT%\3rdParty\VTK\bin %PCL_ROOT%\3rdParty\FLANN\bin %PCL_ROOT%\3rdParty\OpenNI2\Redist %PCL_ROOT%\3rdParty\Boost\lib %PCL_ROOT%\3rdParty\Qhull\bin %PCL_ROOT%\3rdParty\OpenNI2\Tools
- 将以下的pdb文件放置到PCL 1.13.0\bin目录下
开发环境的测试
这里使用依赖静态库的方式进行PCL开发环境的测试,当然也可以使用依赖动态库的方式。
- 打开visual studio2022,新建一个控制台项目
- 如果项目在Debug模式下运行,则右击新建的项目=》属性=》调试,在环境中添加如下内容:
PATH=E:\developTools\PCL\PCL 1.13.0\\bin;E:\developTools\PCL\PCL 1.13.0\\3rdParty\FLANN\bin;E:\developTools\PCL\PCL 1.13.0\\3rdParty\VTK\bin;E:\developTools\PCL\PCL 1.13.0\\3rdParty\OpenNI2\Tools
- 关闭SDL检查
- 将符合模式更改为否
- 添加项目属性表:
- 打开属性管理器:视图=》其他窗口=》属性管理器
- 右击Debug | x64=》添加新项目属性表,其名称为PLC1.13.1.props
- 添加完后,双击新添加的PLC1.13.1.props,VC++目录=》包含目录。在包含目录中添加如下内容
E:\developTools\PCL\PCL 1.13.0\3rdParty\VTK\include\vtk-9.2 E:\developTools\PCL\PCL 1.13.0\3rdParty\Qhull\include E:\developTools\PCL\PCL 1.13.0\3rdParty\OpenNI2\Include E:\developTools\PCL\PCL 1.13.0\3rdParty\FLANN\include E:\developTools\PCL\PCL 1.13.0\3rdParty\Eigen\eigen3 E:\developTools\PCL\PCL 1.13.0\3rdParty\Boost\include\boost-1_80 E:\developTools\PCL\PCL 1.13.0\include\pcl-1.13
- VC++目录=》库目录,进行添加库目录:
E:\developTools\PCL\PCL 1.13.0\3rdParty\VTK\lib E:\developTools\PCL\PCL 1.13.0\3rdParty\Qhull\lib E:\developTools\PCL\PCL 1.13.0\3rdParty\OpenNI2\Lib E:\developTools\PCL\PCL 1.13.0\3rdParty\Boost\lib E:\developTools\PCL\PCL 1.13.0\3rdParty\FLANN\lib E:\developTools\PCL\PCL 1.13.0\lib
- C/C++=》预处理器,进行预处理器定义设置
BOOST_USE_WINDOWS_H NOMINMAX _CRT_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS _SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING
- 链接器=》输入=》附加依赖项,进行添加附加依赖项
- Debug模式如下:
pcl_commond.lib pcl_featuresd.lib pcl_filtersd.lib pcl_iod.lib pcl_io_plyd.lib pcl_kdtreed.lib pcl_keypointsd.lib pcl_mld.lib pcl_octreed.lib pcl_outofcored.lib pcl_peopled.lib pcl_recognitiond.lib pcl_registrationd.lib pcl_sample_consensusd.lib pcl_searchd.lib pcl_segmentationd.lib pcl_stereod.lib pcl_surfaced.lib pcl_trackingd.lib pcl_visualizationd.lib libboost_atomic-vc143-mt-gd-x64-1_80.lib libboost_bzip2-vc143-mt-gd-x64-1_80.lib libboost_chrono-vc143-mt-gd-x64-1_80.lib libboost_container-vc143-mt-gd-x64-1_80.lib libboost_context-vc143-mt-gd-x64-1_80.lib libboost_contract-vc143-mt-gd-x64-1_80.lib libboost_coroutine-vc143-mt-gd-x64-1_80.lib libboost_date_time-vc143-mt-gd-x64-1_80.lib libboost_exception-vc143-mt-gd-x64-1_80.lib libboost_filesystem-vc143-mt-gd-x64-1_80.lib libboost_graph-vc143-mt-gd-x64-1_80.lib libboost_graph_parallel-vc143-mt-gd-x64-1_80.lib libboost_iostreams-vc143-mt-gd-x64-1_80.lib libboost_json-vc143-mt-gd-x64-1_80.lib libboost_locale-vc143-mt-gd-x64-1_80.lib libboost_log-vc143-mt-gd-x64-1_80.lib libboost_log_setup-vc143-mt-gd-x64-1_80.lib libboost_math_c99-vc143-mt-gd-x64-1_80.lib libboost_math_c99f-vc143-mt-gd-x64-1_80.lib libboost_math_c99l-vc143-mt-gd-x64-1_80.lib libboost_math_tr1-vc143-mt-gd-x64-1_80.lib libboost_math_tr1f-vc143-mt-gd-x64-1_80.lib libboost_math_tr1l-vc143-mt-gd-x64-1_80.lib libboost_mpi-vc143-mt-gd-x64-1_80.lib libboost_nowide-vc143-mt-gd-x64-1_80.lib libboost_numpy310-vc143-mt-gd-x64-1_80.lib libboost_prg_exec_monitor-vc143-mt-gd-x64-1_80.lib libboost_program_options-vc143-mt-gd-x64-1_80.lib libboost_python310-vc143-mt-gd-x64-1_80.lib libboost_random-vc143-mt-gd-x64-1_80.lib libboost_regex-vc143-mt-gd-x64-1_80.lib libboost_serialization-vc143-mt-gd-x64-1_80.lib libboost_system-vc143-mt-gd-x64-1_80.lib libboost_test_exec_monitor-vc143-mt-gd-x64-1_80.lib libboost_thread-vc143-mt-gd-x64-1_80.lib libboost_timer-vc143-mt-gd-x64-1_80.lib libboost_type_erasure-vc143-mt-gd-x64-1_80.lib libboost_unit_test_framework-vc143-mt-gd-x64-1_80.lib libboost_wave-vc143-mt-gd-x64-1_80.lib libboost_wserialization-vc143-mt-gd-x64-1_80.lib libboost_zlib-vc143-mt-gd-x64-1_80.lib flann-gd.lib flann_cpp-gd.lib flann_cpp_s-gd.lib flann_s-gd.lib OpenNI2.lib qhullcpp_d.lib qhullstatic_d.lib qhullstatic_rd.lib qhull_rd.lib vtkcgns-9.2.lib vtkcgns-9.2-gd.lib vtkChartsCore-9.2-gd.lib vtkCommonColor-9.2-gd.lib vtkCommonComputationalGeometry-9.2-gd.lib vtkCommonCore-9.2-gd.lib vtkCommonDataModel-9.2-gd.lib vtkCommonExecutionModel-9.2-gd.lib vtkCommonMath-9.2-gd.lib vtkCommonMisc-9.2-gd.lib vtkCommonSystem-9.2-gd.lib vtkCommonTransforms-9.2-gd.lib vtkDICOMParser-9.2-gd.lib vtkDomainsChemistry-9.2-gd.lib vtkDomainsChemistryOpenGL2-9.2-gd.lib vtkdoubleconversion-9.2-gd.lib vtkexodusII-9.2-gd.lib vtkexpat-9.2-gd.lib vtkFiltersAMR-9.2-gd.lib vtkFiltersCore-9.2-gd.lib vtkFiltersExtraction-9.2-gd.lib vtkFiltersFlowPaths-9.2-gd.lib vtkFiltersGeneral-9.2-gd.lib vtkFiltersGeneric-9.2-gd.lib vtkFiltersGeometry-9.2-gd.lib vtkFiltersHybrid-9.2-gd.lib vtkFiltersHyperTree-9.2-gd.lib vtkFiltersImaging-9.2-gd.lib vtkFiltersModeling-9.2-gd.lib vtkFiltersParallel-9.2-gd.lib vtkFiltersParallelImaging-9.2-gd.lib vtkFiltersPoints-9.2-gd.lib vtkFiltersProgrammable-9.2-gd.lib vtkFiltersSelection-9.2-gd.lib vtkFiltersSMP-9.2-gd.lib vtkFiltersSources-9.2-gd.lib vtkFiltersStatistics-9.2-gd.lib vtkFiltersTexture-9.2-gd.lib vtkFiltersTopology-9.2-gd.lib vtkFiltersVerdict-9.2-gd.lib vtkfmt-9.2-gd.lib vtkfreetype-9.2-gd.lib vtkGeovisCore-9.2-gd.lib vtkgl2ps-9.2-gd.lib vtkglew-9.2-gd.lib vtkhdf5-9.2-gd.lib vtkhdf5_hl-9.2-gd.lib vtkImagingColor-9.2-gd.lib vtkImagingCore-9.2-gd.lib vtkImagingFourier-9.2-gd.lib vtkImagingGeneral-9.2-gd.lib vtkImagingHybrid-9.2-gd.lib vtkImagingMath-9.2-gd.lib vtkImagingMorphological-9.2-gd.lib vtkImagingSources-9.2-gd.lib vtkImagingStatistics-9.2-gd.lib vtkImagingStencil-9.2-gd.lib vtkInfovisCore-9.2-gd.lib vtkInfovisLayout-9.2-gd.lib vtkInteractionImage-9.2-gd.lib vtkInteractionStyle-9.2-gd.lib vtkInteractionWidgets-9.2-gd.lib vtkIOAMR-9.2-gd.lib vtkIOAsynchronous-9.2-gd.lib vtkIOCGNSReader-9.2-gd.lib vtkIOChemistry-9.2-gd.lib vtkIOCityGML-9.2-gd.lib vtkIOCONVERGECFD-9.2-gd.lib vtkIOCore-9.2-gd.lib vtkIOEnSight-9.2-gd.lib vtkIOExodus-9.2-gd.lib vtkIOExport-9.2-gd.lib vtkIOExportGL2PS-9.2-gd.lib vtkIOExportPDF-9.2-gd.lib vtkIOGeometry-9.2-gd.lib vtkIOHDF-9.2-gd.lib vtkIOImage-9.2-gd.lib vtkIOImport-9.2-gd.lib vtkIOInfovis-9.2-gd.lib vtkIOIOSS-9.2-gd.lib vtkIOLegacy-9.2-gd.lib vtkIOLSDyna-9.2-gd.lib vtkIOMINC-9.2-gd.lib vtkIOMotionFX-9.2-gd.lib vtkIOMovie-9.2-gd.lib vtkIONetCDF-9.2-gd.lib vtkIOOggTheora-9.2-gd.lib vtkIOParallel-9.2-gd.lib vtkIOParallelXML-9.2-gd.lib vtkIOPLY-9.2-gd.lib vtkIOSegY-9.2-gd.lib vtkIOSQL-9.2-gd.lib vtkioss-9.2-gd.lib vtkIOTecplotTable-9.2-gd.lib vtkIOVeraOut-9.2-gd.lib vtkIOVideo-9.2-gd.lib vtkIOXML-9.2-gd.lib vtkIOXMLParser-9.2-gd.lib vtkjpeg-9.2-gd.lib vtkjsoncpp-9.2-gd.lib vtkkissfft-9.2-gd.lib vtklibharu-9.2-gd.lib vtklibproj-9.2-gd.lib vtklibxml2-9.2-gd.lib vtkloguru-9.2-gd.lib vtklz4-9.2-gd.lib vtklzma-9.2-gd.lib vtkmetaio-9.2-gd.lib vtknetcdf-9.2-gd.lib vtkogg-9.2-gd.lib vtkParallelCore-9.2-gd.lib vtkParallelDIY-9.2-gd.lib vtkpng-9.2-gd.lib vtkpugixml-9.2-gd.lib vtkRenderingAnnotation-9.2-gd.lib vtkRenderingContext2D-9.2-gd.lib vtkRenderingContextOpenGL2-9.2-gd.lib vtkRenderingCore-9.2-gd.lib vtkRenderingFreeType-9.2-gd.lib vtkRenderingGL2PSOpenGL2-9.2-gd.lib vtkRenderingImage-9.2-gd.lib vtkRenderingLabel-9.2-gd.lib vtkRenderingLOD-9.2-gd.lib vtkRenderingOpenGL2-9.2-gd.lib vtkRenderingSceneGraph-9.2-gd.lib vtkRenderingUI-9.2-gd.lib vtkRenderingVolume-9.2-gd.lib vtkRenderingVolumeOpenGL2-9.2-gd.lib vtkRenderingVtkJS-9.2-gd.lib vtksqlite-9.2-gd.lib vtksys-9.2-gd.lib vtkTestingRendering-9.2-gd.lib vtktheora-9.2-gd.lib vtktiff-9.2-gd.lib vtkverdict-9.2-gd.lib vtkViewsContext2D-9.2-gd.lib vtkViewsCore-9.2-gd.lib vtkViewsInfovis-9.2-gd.lib vtkWrappingTools-9.2-gd.lib vtkzlib-9.2-gd.lib
- Release模式如下:
pcl_common.lib pcl_features.lib pcl_filters.lib pcl_io.lib pcl_io_ply.lib pcl_kdtree.lib pcl_keypoints.lib pcl_ml.lib pcl_octree.lib pcl_outofcore.lib pcl_people.lib pcl_recognition.lib pcl_registration.lib pcl_sample_consensus.lib pcl_search.lib pcl_segmentation.lib pcl_stereo.lib pcl_surface.lib pcl_tracking.lib pcl_visualization.lib vtkcgns-9.2.lib vtkChartsCore-9.2.lib vtkCommonColor-9.2.lib vtkCommonComputationalGeometry-9.2.lib vtkCommonCore-9.2.lib vtkCommonDataModel-9.2.lib vtkCommonExecutionModel-9.2.lib vtkCommonMath-9.2.lib vtkCommonMisc-9.2.lib vtkCommonSystem-9.2.lib vtkCommonTransforms-9.2.lib vtkDICOMParser-9.2.lib vtkDomainsChemistry-9.2.lib vtkDomainsChemistryOpenGL2-9.2.lib vtkdoubleconversion-9.2.lib vtkexodusII-9.2.lib vtkexpat-9.2.lib vtkFiltersAMR-9.2.lib vtkFiltersCore-9.2.lib vtkFiltersExtraction-9.2.lib vtkFiltersFlowPaths-9.2.lib vtkFiltersGeneral-9.2.lib vtkFiltersGeneric-9.2.lib vtkFiltersGeometry-9.2.lib vtkFiltersHybrid-9.2.lib vtkFiltersHyperTree-9.2.lib vtkFiltersImaging-9.2.lib vtkFiltersModeling-9.2.lib vtkFiltersParallel-9.2.lib vtkFiltersParallelImaging-9.2.lib vtkFiltersPoints-9.2.lib vtkFiltersProgrammable-9.2.lib vtkFiltersSelection-9.2.lib vtkFiltersSMP-9.2.lib vtkFiltersSources-9.2.lib vtkFiltersStatistics-9.2.lib vtkFiltersTexture-9.2.lib vtkFiltersTopology-9.2.lib vtkFiltersVerdict-9.2.lib vtkfmt-9.2.lib vtkfreetype-9.2.lib vtkGeovisCore-9.2.lib vtkgl2ps-9.2.lib vtkglew-9.2.lib vtkhdf5-9.2.lib vtkhdf5_hl-9.2.lib vtkImagingColor-9.2.lib vtkImagingCore-9.2.lib vtkImagingFourier-9.2.lib vtkImagingGeneral-9.2.lib vtkImagingHybrid-9.2.lib vtkImagingMath-9.2.lib vtkImagingMorphological-9.2.lib vtkImagingSources-9.2.lib vtkImagingStatistics-9.2.lib vtkImagingStencil-9.2.lib vtkInfovisCore-9.2.lib vtkInfovisLayout-9.2.lib vtkInteractionImage-9.2.lib vtkInteractionStyle-9.2.lib vtkInteractionWidgets-9.2.lib vtkIOAMR-9.2.lib vtkIOAsynchronous-9.2.lib vtkIOCesium3DTiles-9.2.lib vtkIOCGNSReader-9.2.lib vtkIOChemistry-9.2.lib vtkIOCityGML-9.2.lib vtkIOCONVERGECFD-9.2.lib vtkIOCore-9.2.lib vtkIOEnSight-9.2.lib vtkIOExodus-9.2.lib vtkIOExport-9.2.lib vtkIOExportGL2PS-9.2.lib vtkIOExportPDF-9.2.lib vtkIOGeometry-9.2.lib vtkIOHDF-9.2.lib vtkIOImage-9.2.lib vtkIOImport-9.2.lib vtkIOInfovis-9.2.lib vtkIOIOSS-9.2.lib vtkIOLegacy-9.2.lib vtkIOLSDyna-9.2.lib vtkIOMINC-9.2.lib vtkIOMotionFX-9.2.lib vtkIOMovie-9.2.lib vtkIONetCDF-9.2.lib vtkIOOggTheora-9.2.lib vtkIOParallel-9.2.lib vtkIOParallelXML-9.2.lib vtkIOPLY-9.2.lib vtkIOSegY-9.2.lib vtkIOSQL-9.2.lib vtkioss-9.2.lib vtkIOTecplotTable-9.2.lib vtkIOVeraOut-9.2.lib vtkIOVideo-9.2.lib vtkIOXML-9.2.lib vtkIOXMLParser-9.2.lib vtkjpeg-9.2.lib vtkjsoncpp-9.2.lib vtkkissfft-9.2.lib vtklibharu-9.2.lib vtklibproj-9.2.lib vtklibxml2-9.2.lib vtkloguru-9.2.lib vtklz4-9.2.lib vtklzma-9.2.lib vtkmetaio-9.2.lib vtknetcdf-9.2.lib vtkogg-9.2.lib vtkParallelCore-9.2.lib vtkParallelDIY-9.2.lib vtkpng-9.2.lib vtkpugixml-9.2.lib vtkRenderingAnnotation-9.2.lib vtkRenderingContext2D-9.2.lib vtkRenderingContextOpenGL2-9.2.lib vtkRenderingCore-9.2.lib vtkRenderingFreeType-9.2.lib vtkRenderingGL2PSOpenGL2-9.2.lib vtkRenderingHyperTreeGrid-9.2.lib vtkRenderingImage-9.2.lib vtkRenderingLabel-9.2.lib vtkRenderingLICOpenGL2-9.2.lib vtkRenderingLOD-9.2.lib vtkRenderingOpenGL2-9.2.lib vtkRenderingSceneGraph-9.2.lib vtkRenderingUI-9.2.lib vtkRenderingVolume-9.2.lib vtkRenderingVolumeOpenGL2-9.2.lib vtkRenderingVtkJS-9.2.lib vtksqlite-9.2.lib vtksys-9.2.lib vtkTestingRendering-9.2.lib vtktheora-9.2.lib vtktiff-9.2.lib vtkverdict-9.2.lib vtkViewsContext2D-9.2.lib vtkViewsCore-9.2.lib vtkViewsInfovis-9.2.lib vtkWrappingTools-9.2.lib vtkzlib-9.2.lib
- 将main.cpp文件更改为如下内容,运行不报错则PLC环境搭建成功。
#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int main(int argc, char** argv)
{
srand((unsigned int)time(NULL));
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
// 创建点云数据
cloud->width = 1000;
cloud->height = 1;
cloud->points.resize(cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size(); ++i)
{
cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
}
pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
octree.setInputCloud(cloud);
octree.addPointsFromInputCloud();
pcl::PointXYZ searchPoint;
searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);
searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);
searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);
//半径内近邻搜索
vector<int>pointIdxRadiusSearch;
vector<float>pointRadiusSquaredDistance;
float radius = 256.0f * rand() / (RAND_MAX + 1.0f);
cout << "Neighbors within radius search at (" << searchPoint.x
<< " " << searchPoint.y
<< " " << searchPoint.z
<< ") with radius=" << radius << endl;
if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
{
for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
cout << " " << cloud->points[pointIdxRadiusSearch[i]].x
<< " " << cloud->points[pointIdxRadiusSearch[i]].y
<< " " << cloud->points[pointIdxRadiusSearch[i]].z
<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;
}
// 初始化点云可视化对象
boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));
viewer->setBackgroundColor(0, 0, 0); //设置背景颜色为黑色
// 对点云着色可视化 (red).
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);
viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");
// 等待直到可视化窗口关闭
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(1000));
}
return (0);
}
问题
- 对于MFC应用,遇到
error C2661: “pcl::PointCloud<pcl::PointXYZ>::operator new”: 没有重载函数接受 3 个参数
的问题,需要将xxxDlg.cpp中的如下内容注释掉
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif