ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:618.41KB ,
资源ID:4570412      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4570412.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PCL学习笔记.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PCL学习笔记.docx

1、PCL学习笔记How To Write CmakeLists.TxtCmakelists.txt是作为Cmake building system的输入文件,用于构建软件包。一、CmakeList.txt的简单例子cmake_minimum_required(VERSION 2.8 FATAL_ERROR)#set(project_namecloud_viewer_PointXYZ)project(project_name)find_package(PCL 1.2 REQUIRED)include_directories($PCL_INCLUDE_DIRS)link_directories($P

2、CL_LIBRARY_DIRS)add_definitions($PCL_DEFINITIONS)add_executable (project_namecloud_viewer_PointXYZ.cpp) #注意这里不能替换target_link_libraries (project_name $PCL_LIBRARIES)二、解析CmakeLists.txt的重要组成部分:1、表明Cmake所需要的最低版本cmake_minimum_required(VERSION 2.8 FATAL_ERROR)2、定义需要的特殊变量(optional)(关于set的用法我目前没有细看,有心的同学自己钻

3、研)SET(sampleNameMyApp) 如上面的例子:set(project_namecloud_viewer_PointXYZ).3、查找我们构建工程所需要的package find_package(PCL 1.2 REQUIRED) #主要依赖的package#REQUIRED表示如果没有找到,cmake会停止处理,并报告一个错误.如果找到了package那么将会生成几个包含package信息的Cmake环境变量,这些变量将会在后面的cmake script中用到。这些环境变量描述了package的外部头文件位置(include路径),依赖的库文件的位置(lib),以及源程序的位置。

4、例如上面命令执行找到PCL后,将会创建环境变量PCL_INCLUDE_DIRS其中包含指定PCL库头文件.h的查找路径;创建环境变量PCL_LIBRARY_DIRS,其中包含指定PCL库的.lib文件的所在目录的路径.如果所要构建的project还依赖于其它的package,例如python那么可以采用命令:find_package(PCL 1.2 REQUIRED COMPONENTS python),此时python将作为PCLpackage的组成成分,它所对应的头文件include路径和lib库文件路径都将被一起包含在PCL的对应环境变量PCL_INCLUDE_DIRS和PCL_LIBR

5、ARY_DIRS中,方便后面使用。4、指定构建project所需要的资源include_directories($PCL_INCLUDE_DIRS) #包含头文件的位置link_directories($PCL_LIBRARY_DIRS) #添加链接器的lib库文件路径add_definitions($PCL_DEFINITIONS) 除此之外也可以手动添加特殊路径如:include_directories(G:/Matlab/extern/include)include_directories(C:/Program Files/MobileRobots/Aria/include)link_d

6、irectories(G:/Matlab/extern/lib/win32/microsoft)link_directories(C:/Program Files/MobileRobots/Aria/lib)5、从指定源文件构建可执行文件add_executable (project_namecloud_viewer_PointXYZ.cpp)该命令将从源文件cloud_viewer_PointXYZ.cpp构建可执行程序project_name.exe.如果从多个源文件构建可执行程序则可以表示成:add_executable (project_namemain.cpp test1.cpp t

7、est2.cpp)add_executable (project_namemain.cpp part.hgrab.hinterface.h test.cpp test.h)6、为project构建libraryadd_library($project_name $project_name_src) #默认创建共享library7、指定可执行文件需要连接的库 target_link_libraries (project_name$PCL_LIBRARIES)#前一个参数为可执行文件的名字 target_link_libraries (project_name $PCL_LIBRARIES lib

8、eng.lib libmx.lib libmex.lib libmat.lib Aria.lib winmm.lib wsock32.lib)TARGET_LINK_LIBRARIES($project_name$MRPT_LIBS # This is filled by FIND_PACKAGE(MRPT .) # Optional extra libs.)三、利用Cmake来构建程序基本的CmakeLists.txt已经写好,那么接下来就是:1、 新建一个文件夹source,如:F:studyprogram_softwareVC+ programPCLPCL_studycloud_view

9、er_PointXYZsource将CmakeLists.txt, 所有的自己编写的源文件(.c or .cpp)以及头文件(.h)放在该文件夹下。2、 再在与source同目录的文件加下建一个新的文件夹cmake-bin,如:F:studyprogram_softwareVC+ programPCLPCL_studycloud_viewer_PointXYZcmake-bin该文件将用来放置构建的project。3、 打开Cmake软件界面及设置如下:4、先点击配置configure,此时可能会报错如Could not copy from: C:/Program Files/CMake2.8

10、.12.2/share/cmake-2.8/Templates/CMakeVSMacros2.vsmacros to: d:/用户目录/Documents/VisualStudio 010/Projects/VSMacros80/CMakeMacros/CMakeVSMacros2.vsmacros的红色字样警告,因为这是系统用户的路径名有中文字符“用户目录”造成的,因为cmake不认中文路径,但是只要我们在上面的第三步中设置生成的路径中没有中文就行了。就算有这个因为C:/Users/下有中文照成的错误,也对我们这次的生成无碍,不用去管他。再点击一次configure时会快速完成配置。最后出现

11、configuring done。5、点击generate当看到generating done时,说明生成成功了。此时在cmake-bin文件夹下生成如下内容:6、打开Proj_Name.sln将Proj_Name设置成启动项7、开始debug但是在运行时很可能出现错误:fatal error LNK1104: 无法打开文件“C:Qt4.8.0libQtGuid4.lib”,这主要是因为VTK库里面依赖函数的关系不对应,我的QT版本是Qt5.2.1所以必须修改这些依赖函数。解决方法是打开路径C:Program FilesPCL 1.6.03rdPartyVTKlibvtk-5.8下的三个文件:

12、VTKConfigQt.cmakeVTKTargets-debug.cmakeVTKTargets-release.cmake将其中的路径C:Qt4.8.0替换成你现有版本的Qt路径,例如我的是:C:QtQt5.2.15.2.1msvc2010_opengl,(当然也可以将这个路径定义为环境变量 $(QT_ROOT));然后将对应的库文件如QtGuid4.lib替换成你自己安装的Qt版本的库文件如Qt5Guid.lib,最终即可正常运行。8、正常运行,结果如下:9、源程序和3D点云:cloud_viewer_PointXYZ.cpp如下:#include #include #include #

13、include intuser_data;voidviewerOneOff (pcl:visualization:PCLVisualizer& viewer)viewer.setBackgroundColor (1.0, 0.5, 1.0);pcl:PointXYZ o;o.x = 1.0;o.y = 0;o.z = 0;viewer.addSphere (o, 0.25, sphere, 0);std:cout i only run once std:endl;voidviewerPsycho (pcl:visualization:PCLVisualizer& viewer)static u

14、nsigned count = 0;std:stringstreamss;ss Once per viewer loop: count+;viewer.removeShape (text, 0);viewer.addText (ss.str(), 200, 300, text, 0);/可以?注释掉?这a行D,?此?时不?会再显?示?图?形?中D显?示?Once per viewer loop:num一?直增?加 /FIXME: possible race condition here:user_data+;intmain () pcl:PointCloud:Ptr cloud (new pc

15、l:PointCloud); /modified pcl:io:loadPCDFile (point_cloud_XYZ.pcd, *cloud);pcl:visualization:CloudViewer viewer(Cloud Viewer); /blocks until the cloud is actually renderedviewer.showCloud(cloud); /use the following functions to get access to the underlying more advanced/powerful /PCLVisualizer /This

16、will only get called onceviewer.runOnVisualizationThreadOnce (viewerOneOff); /This will get called once per visualization iterationviewer.runOnVisualizationThread (viewerPsycho);while (!viewer.wasStopped () /you can also do cool processing here /FIXME: Note that this is running in a separate thread

17、from viewerPsycho /and you should guard against race conditions yourself.user_data+; return 0;二、激光扫描仪;立体摄像机和飞行摄像机获得的点云数据是有序点云数据,类似于图像或矩阵的结构,数据分为行和列;它相比于无序点云的优点在于预先了解相邻点的关系,邻域操作更加高效。尽管pcl是Msc公司专门针对Patran二次开发而提供的编程语言,却没有提供配套的程序开发编辑器,所以一般开发初学者都是采用windows自带的记事本程序notapad来进行pcl编程了。这对于偶尔开发一两个pcl程序而已没啥问题,但若

18、经常使用,这个编辑器的功能实在是太弱,使用起来相当不给力,文件大一点打开还很费劲。所以,若是经常进行pcl开发,最好不要用windows自带的记事本编辑器。那不用这个记事本用什么呢?其实市面上有很多的专业的文本编辑器可选择,常用的有EditPlus和UltraEdit,其界面分别见图1和图2:图1 EditPlus编辑器界面图2 UltraEdit编辑器这两个编辑器除了提供记事本的文本编辑功能外,还提供了代码的的不同颜色高亮显示,可以通过一定的配置把程序编译器集成进,还可以自定义快捷键加快代码修改速度,通过这两编辑器可以大大方便PCL脚本的编写。不要,要使用这两个编译器编写pcl程序还需要进行

19、一定的设定,因为他们默认配置中仅仅提供了常用的程序的高亮显示及编译,而不会支持用户不多的pcl程序。下面主要介绍EditPlus的配置,对于UltraEdit的配置,可通过类似配置完成。1. EditPlus编译器的PCL开发环境配置pcl程序除了可以在Patran的命令行中通过“!input”加文件名运行外,还可以通过直接运行Patran安装路径下的“P3pclcomp.exe”运行(笔者的的路径为“C:MSC.Software.MSC.Patran.v2005.r3binp3pclcomp.exe”),双击运行后将弹出如图3所示的dos窗口,再通过“!input”加文件名运行pcl程序(如

20、果当前路径不是pcl程序所在路径,则需要先通过“!path”设定)。用EditPlus编译pcl用的就是这个方法。图3 通过p3pclcomp调用的pcl编译窗口(1)添加Patran群组启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具(C).】,弹出【首选项】对话框。在对话框中的“组和工具项目(G):”下拉菜单选择一个希望设定为pcl的组,单击【组名称】,在弹出的对话框输入“Patran”设定组名称。(2)设定p3pclcomp程序工具单击【添加工具(D)】按钮,在弹出的菜单中选择【程序(P)】,在【菜单文本(T)】文本框中输入“P3PclComp”,单击【命令(0)】输入

21、框右边的【】按钮,选择“P3pclcomp.exe的安装路径(笔者的安装路径为“C:MSC.Software.MSC.Patran.v2005.r3binp3pclcomp.exe”),该路径将自动显示在【命令(O)】文本框中,单击【初始目录(I)】输入框右边的按钮,选择“文件目录”,输入框中将自动显示$(FileDir)。设置完成后的对话框如图4所示,单击【确定】按钮。此时,在【工具】菜单下将会出现【p3pclcomp】选项,以后可以直接选择该选项或者是用“Ctrl+1”启动图1所示的pcl编译窗口。图4 p3pclcomp配置设定各种类似$(FileDir)的参数可以在文本框右侧的箭头下拉

22、菜单中获取,具体含义如下参数描述$(FilePath) 文件路径(文件全名,含目录和文件名)$(FileDir) 文件目录(不带文件名)$(FileName) 文件名(不带目录)$(FileNameNoExt) 不带扩展名的文件名(不带目录)$(FileExt) 扩展名(当前文件)$(ProjectName) 工程名称(当前工程名)$(CurLine) 当前行号(光标位置处的行号)$(CurCol) 当前列号(光标位置处的列号)$(CurSel) 当前文本(插入当前选定文本)$(CurWord) 当前单词(插入当前单词)$(WindowList) 显示当前窗口列表并选择特定文件(3)设定cpp

23、编译工具对于带有预处理头文件的pcl程序,需要使用CPP预处理程序编译成cpp文件,方法为在Windows开始菜单中输入以下命令并运行:cpp -P -I$P3_HOME/customization 其实该方法调用的是Patran安装路径的cpp.exe程序。在EditPlus中的配置与以上p3pclcom的配置类似,方法如下:单击【添加工具(D)】按钮,在弹出的菜单中选择【程序(P)】,在【菜单文本(T)】文本框中输入“Pcl2CPP”,单击【命令(0)】输入框右边的【】按钮,选择“cpp.exe的安装路径(笔者的安装路径为“C:MSC.Software.MSC.Patran.v2005.r

24、3bincpp.exe”),该路径将自动显示在【命令(O)】文本框中,【参数】输入框中输入-I,然后输入customization路径(笔者为-IC:MSC.Software.MSC.Patran.v2005.r3customization),然后单击右边的按钮,选择“文件路径”,“文件目录”和“不带扩展名的文件名”,再输入“.cpp”,最终笔者参数输入框内容为“-IC:MSC.Software.MSC.Patran.v2005.r3customization $(FilePath) $(FileDir) $(FileNameNoExt).cpp”。单击【初始目录(I)】输入框右边的按钮,选择

25、“文件目录”,输入框中将自动显示$(FileDir)。选中【捕捉输出】选项,CPP程序编译后的输出结果将显示在EditPlus的输出栏中,否则,运行CPP程序后将弹出命令行窗口,并把结果输出到命令行窗口中。设置完成后的对话框如图5所示,单击【确定】按钮。此时,在【工具】菜单下将会出现【Pcl2CPP】选项。用Ctrl+2就能实现pcl到cpp的预编译。图5 CPP编译配置设定(3)添加新建pcl菜单启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【设置和语法】,单击【添加】按钮,在【文件类型】列表中将新增一项“New Setting”,在

26、“描述(E)”输入框中把它改成“PCL”,确定后,单击【文件(F)】菜单,选择【新建(N)】【其他(O)】,将弹出如图6所示的【选择文件类型】对话框,选择【PCL】,单击【确定】按钮后将出现编写Pcl代码的窗口。图6 新建PCL文件类型(4)语法高亮显示为了实现语法加亮和自动缩进等功能,需要两个特征文件,它们分别是pcl.acp和pcl.stx,扩展名为.acp的文件是表示自动完成的特征文件,扩展名为 .stx的文件表示语法加亮的特征文件。对于其他通用的编程语言,可以从EditPlus的官网上下载到这两个特征文件。但官网未提供PCL的语法文件,需要我们参其他语言的特征文件自行编写,读者可以参照

27、以下形式进行编写:PCL.stx在EditPlus中添加这两个特征文件方法如下:启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【设置和语法】,在【文件类型】列表中选择【PCL】选项,在,在【文件扩展名(X)】文本框中输入“pcl”(请注意:输入的不是 .pcl),在【设置和语法(S)】选项卡中,单击按钮弹出如图7所示的对话框,选择pcl.stx作为【语法文件(N)】;按照相同的操作方法选择pcl.acp作为【自动完成(M)】的特征文件,设置完毕后的对话框如图8所示。图7 选择PCL.stx图8 为文件设置【设置和语法】为了用缩进来让代码

28、块之间的层次关系更清晰,下面介绍语法缩进的设置方法。单击【制表符/缩排(T)】标签页,打开【制表符和缩排】对话框,如图9所示。在【制表符(T)】和【缩排(I)】文本框中输入空格的个数,默认的缩进是8个空格,为了便于看出层次关系,一般设置为4个空格。单击【确定】按钮来保存设置(图7),若勾选“启动自动缩排(E)”,则可设定自动缩排打开和关闭字符,对于像c语言、lisp语言、python等可分别设置为“”“”“(”“)”“:”等,但对于pcl,没有特殊的自动缩进提示字符,此处不设定。图9 设置PCL代码的自动缩进(5)设置pcl中文件的模板读者还可以根据需要建立pcl文件的模板,此后每次新建pcl

29、文件时模板中的程序代码都自动出现,可以在模板的基础上继续编写代码。下面以建立模板文件template.pcl为例,教给读者创建模板文件的方法。(a)首先新建1个pcl文件template.pcl(保存于EditPlus文件夹下),在该文件中输入模板文件中需要的代码:#include appforms.p#include lpenums.iCLASS my_classfunctionmy_function()end functionEND CLASS第1行代码的功能是引入界面预处理文件。第3行代码的功能是定义类。第4行代码的功能是定义函数。(b)在 EditPlus 中设置模板文件:启动 EditPlus 后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【模板】,单击右侧的【添加(A)】按钮,在弹出的文件选择框选择文件 template.pcl 作为模板文件,单击【打开按钮】,在右下侧【菜单文本(M)】的对话框中输入 pcl,右上侧自动出现 pcl模板,设置完毕后如图10所示:图10 pcl模版设置单击【确定】按钮,完成 Python 的模板设置。单击【文件】【新建】,子菜单中的pcl选项后,新建文件中自动出现模板文件 template.pcl中的代码。(6)快

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1