PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)

pcl配置

  • 一、windows10使用PCL库
    • VS2019安装
    • 安装PCL库
    • PCL库和win10//VS2019关联
      • 1、为了让win10认识PCL。
      • 2、为了让vs2019认识PCL。
      • 3、运行rabbit
  • 二、cmake编译改进的pcl库
    • 引言
    • 准备工作
    • cmake生成工程
    • vs2019编译链接pcl工程
    • 使用编译好的库
  • 三、ubuntu18.04使用PCL库
    • 前提,安装各种依赖包
    • 开始安装PCL库
    • 测试
      • 1、测试pcl库中pcd文件
      • 2、测试自己的cpp
    • VScode的头文件路径和库路径

更新时间:2021/10/20
更新内容:cmake编译自己修改的pcl库,方便算法的复现以及改进。

一、windows10使用PCL库

参考博文
安装vs2019
安装PCL+vs2019

下载链接

  • for pcl–>tags–>PCL 1.11.1
    在这里插入图片描述
  • for vs2019–>下载社(mian)区(fei)版
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第1张图片
  • for test rabbit.pcd
    提取码:l9m0

准备安装包

PCL-1.11.1-AllInOne-msvc2019-win64.exe
pcl-1.11.1-pdb-msvc2019-win64.zip
vs_community__353155754.1618454139.exe
rabbit.pcd

VS2019安装

1、安装Installer

使用初始安装包安装。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第2张图片
2、挑选喜欢的安装项目

  • 工作负载:使用C++的桌面开发;Visual Studio扩展开支。
  • 单个组件:默认,如果安装python请点击。
  • 语言包:默认中文。
  • 安装位置:选择你喜欢的安装路径(注:共享组件的路径太长,它就不干了,那就给它改小)

3、开始安装。。。耐心等待
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第3张图片

PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第4张图片

4、启动 for helloworld

  • 创建新项目
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第5张图片
  • 空项目
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第6张图片
  • 设置名儿&&路径
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第7张图片
  • 新建.cpp文件
    源文件右键–>添加–>新建项–>选C++
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第8张图片
  • 选择自己平台的32位/64位
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第9张图片
  • 自己编个Hello world,测试一下,点绿三角运行。
#include 
using namespace std;

int main()
{
	cout << "hello world!" << endl;
	return 0;
}

安装PCL库

  • 执行PCL-1.11.1-AllInOne-msvc2019-win64.exe
    过程中要勾选添加环境变量。
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第10张图片
  • OpenNI2安装路径的矫正
    OpenNI2会默认安装到C盘。
    D:...\PCL 1.11.1\3rdParty\OpenNI2路径下:OpenNI-Windows-x64-2.2.msi为OpenNI2安装管理器,remove后重新安装到D:...\PCL 1.11.1\3rdParty\
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第11张图片
  • 将pcl-1.11.1-pdb-msvc2019-win64.zip解压缩,并将解压缩文件拷贝到D:...\PCL 1.11.1\bin\文件夹下。

PCL库和win10//VS2019关联

就是添加一大堆环境变量

1、为了让win10认识PCL。

成功安装OPENNI2以后就能看到其环境变量。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第12张图片
接下来我们配置Path,添加这么多环境变量。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第13张图片

2、为了让vs2019认识PCL。

如果想为了以后的项目方便属性配置,请先翻到本节结尾,一看便知。

  • 项目–>属性
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第14张图片

  • 调试:

PATH=$(PCL_ROOT)\bin;$(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\OpenNI2\Tools\bin;$(PCL_ROOT)\3rdParty\Qhull\bin;$(PCL_ROOT)\3rdParty\VTK\bin

PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第15张图片

  • VC++目录
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第16张图片
    包含目录:
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第17张图片
    库目录:
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第18张图片

  • C/C++ -->常规
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第19张图片

  • 预处理
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第20张图片
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第21张图片

  • 语言
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第22张图片

  • 链接器–>输入
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第23张图片
    Debug下的依赖项,文件名末尾带d即为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
vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkDomainsChemistryOpenGL2-8.2-gd.lib
vtkdoubleconversion-8.2-gd.lib
vtkexodusII-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkglew-8.2-gd.lib
vtkGUISupportMFC-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOAsynchronous-8.2-gd.lib
vtkIOCityGML-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOExportPDF-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSegY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVeraOut-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtklzma-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkpugixml-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingExternal-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktheora-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.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
vtkChartsCore-8.2.lib
vtkCommonColor-8.2.lib
vtkCommonComputationalGeometry-8.2.lib
vtkCommonCore-8.2.lib
vtkCommonDataModel-8.2.lib
vtkCommonExecutionModel-8.2.lib
vtkCommonMath-8.2.lib
vtkCommonMisc-8.2.lib
vtkCommonSystem-8.2.lib
vtkCommonTransforms-8.2.lib
vtkDICOMParser-8.2.lib
vtkDomainsChemistry-8.2.lib
vtkDomainsChemistryOpenGL2-8.2.lib
vtkdoubleconversion-8.2.lib
vtkexodusII-8.2.lib
vtkexpat-8.2.lib
vtkFiltersAMR-8.2.lib
vtkFiltersCore-8.2.lib
vtkFiltersExtraction-8.2.lib
vtkFiltersFlowPaths-8.2.lib
vtkFiltersGeneral-8.2.lib
vtkFiltersGeneric-8.2.lib
vtkFiltersGeometry-8.2.lib
vtkFiltersHybrid-8.2.lib
vtkFiltersHyperTree-8.2.lib
vtkFiltersImaging-8.2.lib
vtkFiltersModeling-8.2.lib
vtkFiltersParallel-8.2.lib
vtkFiltersParallelImaging-8.2.lib
vtkFiltersPoints-8.2.lib
vtkFiltersProgrammable-8.2.lib
vtkFiltersSelection-8.2.lib
vtkFiltersSMP-8.2.lib
vtkFiltersSources-8.2.lib
vtkFiltersStatistics-8.2.lib
vtkFiltersTexture-8.2.lib
vtkFiltersTopology-8.2.lib
vtkFiltersVerdict-8.2.lib
vtkfreetype-8.2.lib
vtkGeovisCore-8.2.lib
vtkgl2ps-8.2.lib
vtkglew-8.2.lib
vtkGUISupportMFC-8.2.lib
vtkhdf5-8.2.lib
vtkhdf5_hl-8.2.lib
vtkImagingColor-8.2.lib
vtkImagingCore-8.2.lib
vtkImagingFourier-8.2.lib
vtkImagingGeneral-8.2.lib
vtkImagingHybrid-8.2.lib
vtkImagingMath-8.2.lib
vtkImagingMorphological-8.2.lib
vtkImagingSources-8.2.lib
vtkImagingStatistics-8.2.lib
vtkImagingStencil-8.2.lib
vtkInfovisCore-8.2.lib
vtkInfovisLayout-8.2.lib
vtkInteractionImage-8.2.lib
vtkInteractionStyle-8.2.lib
vtkInteractionWidgets-8.2.lib
vtkIOAMR-8.2.lib
vtkIOAsynchronous-8.2.lib
vtkIOCityGML-8.2.lib
vtkIOCore-8.2.lib
vtkIOEnSight-8.2.lib
vtkIOExodus-8.2.lib
vtkIOExport-8.2.lib
vtkIOExportOpenGL2-8.2.lib
vtkIOExportPDF-8.2.lib
vtkIOGeometry-8.2.lib
vtkIOImage-8.2.lib
vtkIOImport-8.2.lib
vtkIOInfovis-8.2.lib
vtkIOLegacy-8.2.lib
vtkIOLSDyna-8.2.lib
vtkIOMINC-8.2.lib
vtkIOMovie-8.2.lib
vtkIONetCDF-8.2.lib
vtkIOParallel-8.2.lib
vtkIOParallelXML-8.2.lib
vtkIOPLY-8.2.lib
vtkIOSegY-8.2.lib
vtkIOSQL-8.2.lib
vtkIOTecplotTable-8.2.lib
vtkIOVeraOut-8.2.lib
vtkIOVideo-8.2.lib
vtkIOXML-8.2.lib
vtkIOXMLParser-8.2.lib
vtkjpeg-8.2.lib
vtkjsoncpp-8.2.lib
vtklibharu-8.2.lib
vtklibxml2-8.2.lib
vtklz4-8.2.lib
vtklzma-8.2.lib
vtkmetaio-8.2.lib
vtkNetCDF-8.2.lib
vtkogg-8.2.lib
vtkParallelCore-8.2.lib
vtkpng-8.2.lib
vtkproj-8.2.lib
vtkpugixml-8.2.lib
vtkRenderingAnnotation-8.2.lib
vtkRenderingContext2D-8.2.lib
vtkRenderingContextOpenGL2-8.2.lib
vtkRenderingCore-8.2.lib
vtkRenderingExternal-8.2.lib
vtkRenderingFreeType-8.2.lib
vtkRenderingGL2PSOpenGL2-8.2.lib
vtkRenderingImage-8.2.lib
vtkRenderingLabel-8.2.lib
vtkRenderingLOD-8.2.lib
vtkRenderingOpenGL2-8.2.lib
vtkRenderingVolume-8.2.lib
vtkRenderingVolumeOpenGL2-8.2.lib
vtksqlite-8.2.lib
vtksys-8.2.lib
vtktheora-8.2.lib
vtktiff-8.2.lib
vtkverdict-8.2.lib
vtkViewsContext2D-8.2.lib
vtkViewsCore-8.2.lib
vtkViewsInfovis-8.2.lib
vtkzlib-8.2.lib

切记:Debug 和Release的文件务必分开分别插入对应的Debug和Release模式,否则就会造成程序编码的某个环节不能正常运行。

如何一次配置终身受益: 来看视图
解决方案管理器:只是针对这个项目配置属性,没有传承。
属性管理器:配置属性后能生成.props文件,是可以有传承的。
选择Debug/Release/Win32/x64属于自己项目的文件,新建一个属性文件,就像刚才上边儿配置pcl库的属性一样,到时候在新项目的属性管理器导入现在的这个属性文件即可。
(一定要是项目->属性而非调试->属性)
遇到的问题就是每次SDL检查都要重新设置为

(这里不详细说明了)
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第24张图片

3、运行rabbit

如果在项目运行中出现找不到OpenNI2.dll的问题,则找到…\PCL 1.11.1\3rdParty\OpenNI2\Redist文件夹下的OpenNI2.dll,并将它拷贝到当前项目的主文件夹下,该问题即解决。

#include
#include
#include
#include
#include
int user_data;
using std::cout;


void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
	viewer.setBackgroundColor(1.0, 0.5, 1.0);   //设置背景颜色
}

int main() {
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	char strfilepath[256] = "rabbit.pcd";
	if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
		cout << "error input!" << endl;
		return -1;
	}

	cout << cloud->points.size() << endl;
	pcl::visualization::CloudViewer viewer("Cloud Viewer");   //创建viewer对象

	viewer.showCloud(cloud);
	viewer.runOnVisualizationThreadOnce(viewerOneOff);
	system("pause");
	return 0;
}

”hello world“运行成功!!!
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第25张图片

二、cmake编译改进的pcl库

引言

经过了几个月的pcl学习,已经对分割提取算法有了足够的了解,但是pcl库自带的功能函数已经不能满足了,极大地限制了对自己想法的复现,遂花费一天时间学习了pcl库的编译,本文针对pcl1.11.1源码编译,对于其他版本,可举一反三。

准备工作

参考博文:win10下编译pcl1.10.1源码进行安装

  • pcl 1.11.1安装包AllinOne+vs2019
  • pcl 1.11.1源码 from gitee
  • cmake-3.20.1-windows-x86_64

cmake生成工程

1、该方法的前提是完成了pcl库和vs2019的安装和配置(见上一章),安装完后我们就是为了获得第三方库,pcl编译是需要这几个库的支持的。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第26张图片
2、安装cmake,cmake版本不能太低,否则不支持vs2019的编译器。安装好之后开始进入界面,调试生成工程。

  • 让cmake知道pcl源码在哪

  • 给它安排生成工程的路径

  • 添加环境变量CMAKE_PERFIX_PATH
    PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第27张图片

  • 添加的环境变量就是给cmake指明库的路径
    在这里插入图片描述

  • 点击configure,选择vs2019版本编译器,我想它报错变红了,别慌小问题,勾选Grouped和Advanced为了给变量分类。
    常见错误:
    eigen需要添加路径到eigen3这一级;
    boost需要到…3rdParty/Boost/include/boost-1_74这一级;

  • 出了错也没关系,毕竟机器是被设定好的,只要足够了解它,一切问题都能迎刃而解。

  • 再次点击configure和generate,则会编译成功,即可Open Project,这样就生成了针对vs2019的pcl工程。
    在这里插入图片描述

vs2019编译链接pcl工程

1、使用管理员权限打开此工程,因为生成的库默认放到了C盘。
右键ALL_BUILD,点击build,开始生成,接下来需要等待一段时间。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第28张图片
2、右键INSTALL,开始生成对应的库文件。
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第29张图片
3、最后会在C盘生成需要用到的文件
PCL1.11.1_(win10+vs2019)/(win10+cmake编译)/(ubuntu18.04+cmake编译)_第30张图片

使用编译好的库

方法一:上文中,假设我们自己修改了源码,给segmentation部分添加了改进的分割算法,需要找到4个文件放到原pcl安装目录对应位置并替换。

  • pcl_segmentationd.lib静态库文件
  • pz_supervoxel_clustering.h头文件
  • pz_supervoxel_clustering.hpp模板文件
  • pcl_segmentationd.dll动态库文件
    方法二:将上述的生成文件全部替换原pcl安装目录对应文件。
    注意:所有替换文件都要养成备份的好习惯哦!

接下来就能愉快地该算法了!!!

三、ubuntu18.04使用PCL库

参考博文
Ubuntu18.04 亲测安装PCL1.11

下载链接

  • for pcl–>tags–>PCL 1.11.1
    在这里插入图片描述
  • for ensensor
  • codemeter

准备安装包

pcl-pcl-1.11.1.tar.gz	//PCL安装包
metslib-0.5.3.tgz		//for pcl compile 忘了从哪下载的了,自己找去
//以下两个安装包,对版本应该没要求,尽量高版本
ensenso-sdk-3.0.311-x64.deb	//视觉啥啥啥
codemeter_7.20.4402.501_amd64.deb	//视觉啥啥啥

==大概过程:==先为PCL库安装各种依赖,最后配置安装PCL库。

前提,安装各种依赖包

//使用了阿里源
sudo apt-get update  
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui		//本人理解就是cmake==configure make 配置生成Makefile
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
sudo apt-get install libflann1.9 libflann-dev  #这里改成1.9
sudo apt-get install libeigen3-dev 
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev	# 用于视觉显示
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install openjdk-8-jdk openjdk-8-jre
# 用于视觉显示
sudo apt-get install libopenni-dev 
sudo apt-get install libopenni2-dev
# 把下载好的包放在此目录
sudo dpkg -i ensenso-sdk-2.2.147-x64.deb 
sudo dpkg -i codemeter_6.80.3312.500_amd64.deb
# 安装metslib 
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make -j4
sudo make install

开始安装PCL库

tar -vxzf pcl-pcl-1.11.1.tar.gz
cd pcl-pcl-1.11.1
mkdir release 
cd release
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr .. 		//默认配置生成Makefile
make -j4 //此编译过程需要耐心等待,如果内存不足,会出现error killed 等吓人的错误
sudo make install	//安装 ,相反卸载就是uninstall

==问题:==编译时,需要很多内存,但是4G的内存还是不足。
==解决方法:==为linux系统添加一个大大的交换内存空间swap,本人一开始1G不行,2G不行,后来直接向ROM申请了16G交换内存空间。具体操作如下,

相关命令:
# 使swapfile停止被占用
sudo swapoff /swapfile
# 重新分配swapfile的大小
#count的大小就是增加的swap空间的大小,4096是块大小,所以空间大小是bs*count=4GB
sudo dd if=/dev/zero of=/swapfile bs=4096 count=1M
#该目录权限
sudo chmod 0600 /swapfile 
# 把这个文件格式化成swap空间
sudo mkswap /swapfile
# 使用刚才创建的swap空间
sudo swapon /swapfile
******
然后就能跑程序了。。。
******

# 关闭并删除交换分区,一般就留着吧
sudo swapoff /swapfile
sudo rm /swapfile
#查看当前内存使用情况:
free -m

测试

1、测试pcl库中pcd文件

cd ../pcl-pcl-1.11.1/test   
pcl_viewer office1.pcd   //执行该条命令有显示就说明已经安装完成

#如果没有安装pcl_viewer那就安装呗

2、测试自己的cpp

mkdir test_pcl
cd test_pcl
touch test_pcl.cpp
touch CMakeLists.txt
mkdir build
cd build
cmake ..//配置生成Makefile
make	//编译文件
./test_pcl//运行程序

test_pcl.cpp内容如下:

#include 
#include 
#include 
#include 
#include 
#include 
 
int main(int argc, char **argv) {
  std::cout << "Test PCL !" << std::endl;
  pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
  uint8_t r(255), g(15), b(15);
  for (float z(-1.0); z <= 1.0; z += 0.05) {
  	for (float angle(0.0); angle <= 360.0; angle += 5.0) {
      pcl::PointXYZRGB point;
      point.x = 0.5 * cosf (pcl::deg2rad(angle));
      point.y = sinf (pcl::deg2rad(angle));
      point.z = z;
      uint32_t rgb = (static_cast<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
      point.rgb = *reinterpret_cast<float*>(&rgb);
      point_cloud_ptr->points.push_back (point);
    }
    if (z < 0.0) {
      r -= 12;
      g += 12;
    }
    else {
      g -= 12;
      b += 12;
    }
  }
  
  point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
  point_cloud_ptr->height = 1;
 
  pcl::visualization::CloudViewer viewer ("test");
  viewer.showCloud(point_cloud_ptr);
  while (!viewer.wasStopped()){ };
  return 0;
}

CMakeLists.txt内容如下:注意里边有自己新建的路径、文件名字,要对应上。

cmake_minimum_required(VERSION 2.6)
project(test_pcl)
 
find_package(PCL 1.2 REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
 
add_executable(test_pcl test_pcl.cpp)
 
target_link_libraries (test_pcl ${PCL_LIBRARIES})
 
install(TARGETS test_pcl RUNTIME DESTINATION bin)

VScode的头文件路径和库路径

  • c_cpp_properties.json 负责告诉vscode各种头文件路径。
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}", 
                "/usr/include/pcl-1.11",      
                "/usr/include",             
                "/usr/include/vtk-7.1",
                "/usr/include/qhull",
                "/usr/include/flann",
                "/usr/include/boost",
                "/usr/include/eigen3",
                "/usr/include/eigen3/Eigen/", 
                "/usr/include/x86_64-linux-gnu/sys"
            ],
            "defines": [],
            "browse":{
                "path":[
                    "/usr/include",
                    "/usr/include/pcl-1.11"
                ]
            },
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}
  • lauch.json 负责设置编译链接运行工具。
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",             
            "type": "cppdbg",                    
            "request": "launch",                 
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.out",         
            "miDebuggerPath": "/usr/bin/gdb",    
            "preLaunchTask":"build",        
            "args": [],                    
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",       
            "environment": [],                  
            "externalConsole": true,
            "MIMode": "gdb",                   
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • tasks.json 负责制定编译后生成文件的路径,类似于Makefile。
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",   
    "tasks":[  // 可以有多个参数
        {
            "label": "build",       // 编译任务名
            "type": "shell",        // 编译任务的类型,通常为shell/process类型
            "command": "g++",       // 编译命令
            "args":[
                "-g",           
                "${workspaceFolder}/${fileBasename}",   // include path指令
                "-I", "/usr/include/pcl-1.11",
                "-I", "/usr/include/eigen3",
                "-I", "/usr/include/vtk-7.1",
                "-I", "/usr/include/qhull",
                "-I", "/usr/include/flann",
                "-I", "/usr/include/boost",
                // lib 库文件地址
                "-L", "/usr/local/lib",     
                "-l", "pcl_io",                           
                "-l", "pcl_visualization",
                "-l", "pcl_common",
                "-l", "vtkFiltering",
                "-l", "vtkCommon",
                "-l", "vtkRendering",
                "-l", "vtkGraphics",
                "-L", "/usr/include/x86_64-linux-gnu",  
                "-l", "boost_system",                
                "-o",                                    // 生成指定名称的可执行文件
                "${workspaceFolder}/${fileBasenameNoExtension}.out"  
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "cmakebuild",      
            "type": "shell", 
            "command": "cd build && cmake ../ && make",  
            "args": []
        }
    ] 
}

以上这些,有的路径可能和库版本有关,一般没有大的改动,自行尝试。

心得:要明确,vscode是个宇宙无敌的编辑器,给他指定路径,它都能给你搜索到。

你可能感兴趣的:(笔记本儿,自动驾驶,python,机器学习)