PCL学习笔记Word文档格式.docx
《PCL学习笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《PCL学习笔记Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
include_directories("
G:
/Matlab/extern/include"
)
C:
/ProgramFiles/MobileRobots/Aria/include"
link_directories("
/Matlab/extern/lib/win32/microsoft"
/ProgramFiles/MobileRobots/Aria/lib"
5、从指定源文件构建可执行文件
add_executable(project_namecloud_viewer_PointXYZ.cpp)
该命令将从源文件cloud_viewer_PointXYZ.cpp构建可执行程序project_name.exe.
如果从多个源文件构建可执行程序则可以表示成:
add_executable(project_namemain.cpptest1.cpptest2.cpp)
add_executable(project_namemain.cpppart.hgrab.hinterface.htest.cpptest.h)
6、为project构建library
add_library(${project_name}${${project_name}_src})#默认创建共享library
7、指定可执行文件需要连接的库
target_link_libraries(project_name${PCL_LIBRARIES})#前一个参数为可执行文件的名字
target_link_libraries(project_name${PCL_LIBRARIES}libeng.liblibmx.liblibmex.liblibmat.libAria.libwinmm.libwsock32.lib)
TARGET_LINK_LIBRARIES(
${project_name}
${MRPT_LIBS}#ThisisfilledbyFIND_PACKAGE(MRPT...)
"
#Optionalextralibs...
三、利用Cmake来构建程序
基本的CmakeLists.txt已经写好,那么接下来就是:
1、新建一个文件夹source,如:
F:
\study\program_software\VC++program\PCL\PCL_study\cloud_viewer_PointXYZ\source
将CmakeLists.txt,所有的自己编写的源文件(.cor.cpp)以及头文件(.h)放在该文件夹下。
2、再在与source同目录的文件加下建一个新的文件夹cmake-bin,如:
\study\program_software\VC++program\PCL\PCL_study\cloud_viewer_PointXYZ\cmake-bin
该文件将用来放置构建的project。
3、打开Cmake软件界面及设置如下:
4、先点击配置configure,此时可能会报错如Couldnotcopyfrom:
C:
/ProgramFiles/CMake2.8.12.2/share/cmake-2.8/Templates/CMakeVSMacros2.vsmacrosto:
d:
/用户目录/Documents/VisualStudio010/Projects/VSMacros80/CMakeMacros/CMakeVSMacros2.vsmacros
的红色字样警告,因为这是系统用户的路径名有中文字符“用户目录”造成的,因为cmake不认中文路径,但是只要我们在上面的第三步中设置生成的路径中没有中文就行了。
就算有这个因为C:
/Users/下有中文照成的错误,也对我们这次的生成无碍,不用去管他。
再点击一次configure时会快速完成配置。
最后出现configuringdone。
5、点击generate
当看到generatingdone时,说明生成成功了。
此时在cmake-bin文件夹下生成如下内容:
6、打开Proj_Name.sln
将Proj_Name设置成启动项
7、开始debug
但是在运行时很可能出现错误:
fatalerrorLNK1104:
无法打开文件“C:
\Qt\4.8.0\lib\QtGuid4.lib”,这主要是因为VTK库里面依赖函数的关系不对应,我的QT版本是Qt5.2.1所以必须修改这些依赖函数。
解决方法是打开路径C:
\ProgramFiles\PCL1.6.0\3rdParty\VTK\lib\vtk-5.8下的三个文件:
VTKConfigQt.cmake
VTKTargets-debug.cmake
VTKTargets-release.cmake
将其中的路径C:
\Qt\4.8.0替换成你现有版本的Qt路径,例如我的是:
\Qt\Qt5.2.1\5.2.1\msvc2010_opengl,(当然也可以将这个路径定义为环境变量$(QT_ROOT));
然后将对应的库文件如QtGuid4.lib替换成你自己安装的Qt版本的库文件如Qt5Guid.lib,最终即可正常运行。
8、正常运行,结果如下:
9、源程序和3D点云:
cloud_viewer_PointXYZ.cpp如下:
#include<
pcl/visualization/cloud_viewer.h>
iostream>
pcl/io/io.h>
pcl/io/pcd_io.h>
intuser_data;
void
viewerOneOff(pcl:
:
visualization:
PCLVisualizer&
viewer)
{
viewer.setBackgroundColor(1.0,0.5,1.0);
pcl:
PointXYZo;
o.x=1.0;
o.y=0;
o.z=0;
viewer.addSphere(o,0.25,"
sphere"
0);
std:
cout<
<
"
ionlyrunonce"
<
endl;
}
viewerPsycho(pcl:
staticunsignedcount=0;
stringstreamss;
ss<
Onceperviewerloop:
count++;
viewer.removeShape("
text"
viewer.addText(ss.str(),200,300,"
//可¨
¦
以°
?
注Á
¡
é
释º
¨
ª
掉Ì
这a行D,ê
此ä
时º
À
不?
会¨
¢
再¨
´
显?
示º
图ª
形?
中D显?
num一°
直¡
增?
加¨
®
//FIXME:
possibleraceconditionhere:
user_data++;
int
main()
pcl:
PointCloud<
PointXYZ>
Ptrcloud(newpcl:
);
//modified
io:
loadPCDFile("
point_cloud_XYZ.pcd"
*cloud);
CloudViewerviewer("
CloudViewer"
//blocksuntilthecloudisactuallyrendered
viewer.showCloud(cloud);
//usethefollowingfunctionstogetaccesstotheunderlyingmoreadvanced/powerful
//PCLVisualizer
//Thiswillonlygetcalledonce
viewer.runOnVisualizationThreadOnce(viewerOneOff);
//Thiswillgetcalledoncepervisualizationiteration
viewer.runOnVisualizationThread(viewerPsycho);
while(!
viewer.wasStopped())
{
//youcanalsodocoolprocessinghere
NotethatthisisrunninginaseparatethreadfromviewerPsycho
//andyoushouldguardagainstraceconditionsyourself...
}
return0;
二、激光扫描仪;
立体摄像机和飞行摄像机获得的点云数据是有序点云数据,类似于图像或矩阵的结构,数据分为行和列;
它相比于无序点云的优点在于预先了解相邻点的关系,邻域操作更加高效。
尽管pcl是Msc公司专门针对Patran二次开发而提供的编程语言,却没有提供配套的程序开发编辑器,所以一般开发初学者都是采用windows自带的记事本程序notapad来进行pcl编程了。
这对于偶尔开发一两个pcl程序而已没啥问题,但若经常使用,这个编辑器的功能实在是太弱,使用起来相当不给力,文件大一点打开还很费劲。
所以,若是经常进行pcl开发,最好不要用windows自带的记事本编辑器。
那不用这个记事本用什么呢?
其实市面上有很多的专业的文本编辑器可选择,常用的有EditPlus和UltraEdit,其界面分别见图1和图2:
图1EditPlus编辑器界面
图2UltraEdit编辑器
这两个编辑器除了提供记事本的文本编辑功能外,还提供了代码的的不同颜色高亮显示,可以通过一定的配置把程序编译器集成进,还可以自定义快捷键加快代码修改速度,通过这两编辑器可以大大方便PCL脚本的编写
。
不要,要使用这两个编译器编写pcl程序还需要进行一定的设定,因为他们默认配置中仅仅提供了常用的程序的高亮显示及编译,而不会支持用户不多的pcl程序。
下面主要介绍EditPlus的配置,对于UltraEdit的配置,可通过类似配置完成。
1.EditPlus编译器的PCL开发环境配置
pcl程序除了可以在Patran的命令行中通过“!
!
input”加文件名运行外,还可以通过直接运行Patran安装路径下的“P3pclcomp.exe”运行(笔者的的路径为“C:
\MSC.Software.MSC.Patran.v2005.r3\bin\p3pclcomp.exe”),双击运行后将弹出如图3所示的dos窗口,再通过“!
input”加文件名运行pcl程序(如果当前路径不是pcl程序所在路径,则需要先通过“!
path”设定)。
用EditPlus编译pcl用的就是这个方法。
图3通过p3pclcomp调用的pcl编译窗口
(1)添加Patran群组
启动
EditPlus
后,单击【工具(T)】菜单,选择【配置用户工具(C)...】,弹出【首选项】对话框。
在对话框中的“组和工具项目(G):
”下拉菜单选择一个希望设定为pcl的组,单击【组名称】,在弹出的对话框输入“Patran”设定组名称。
(2)设定p3pclcomp程序工具
单击【添加工具>
>
(D)】按钮,在弹出的菜单中选择【程序(P)】,在【菜单文本(T)】文本框中输入“P3PclComp”,单击【命令(0)】输入框右边的【…】按钮,选择
“P3pclcomp.exe
的安装路径(笔者的安装路径为
“C:
\MSC.Software.MSC.Patran.v2005.r3\bin\p3pclcomp.exe”
),该路径将自动显示在【命令(O)】文本框中,单击【初始目录(I)】输入框右边的
按钮,选择“文件目录”,输入框中将自动显示
$(FileDir)。
设置完成后的对话框如图4所示,单击【确定】按钮。
此时,在【工具】菜单下将会出现【p3pclcomp】选项,以后可以直接选择该选项或者是用“Ctrl+1”启动图1所示的pcl编译窗口。
图4p3pclcomp配置设定
各种类似"
$(FileDir)"
的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下
参数
描述
$(FilePath)
文件路径(文件全名,含目录和文件名)
$(FileDir)
文件目录(不带文件名)
$(FileName)
文件名(不带目录)
$(FileNameNoExt)
不带扩展名的文件名(不带目录)
$(FileExt)
扩展名(当前文件)
$(ProjectName)
工程名称(当前工程名)
$(CurLine)
当前行号(光标位置处的行号)
$(CurCol)
当前列号(光标位置处的列号)
$(CurSel)
当前文本(插入当前选定文本)
$(CurWord)
当前单词(插入当前单词)
$(WindowList)
显示当前窗口列表并选择特定文件
(3)设定cpp编译工具
对于带有预处理头文件的pcl程序,需要使用CPP预处理程序编译成cpp文件,方法为在Windows开始菜单中输入以下命令并运行:
cpp-P-I$P3_HOME/customization<
input_file_name>
output_file_name>
其实该方法调用的是Patran安装路径的cpp.exe程序。
在EditPlus中的配置与以上p3pclcom的配置类似,方法如下:
(D)】按钮,在弹出的菜单中选择【程序(P)】,在【菜单文本(T)】文本框中输入“Pcl2CPP”,单击【命令(0)】输入框右边的【…】按钮,选择
“cpp.exe
\MSC.Software.MSC.Patran.v2005.r3\bin\cpp.exe”
),该路径将自动显示在【命令(O)】文本框中,【参数】输入框中输入"
-I"
,然后输入customization路径(笔者为-IC:
\MSC.Software.MSC.Patran.v2005.r3\customization
),然后单击右边的
按钮,选择“文件路径”,“文件目录”和“不带扩展名的文件名”,再输入“.cpp”,最终笔者参数输入框内容为“-IC:
\MSC.Software.MSC.Patran.v2005.r3\customization$(FilePath)$(FileDir)
$(FileNameNoExt).cpp”。
单击【初始目录(I)】输入框右边的
选中【捕捉输出】选项,CPP
程序编译后的输出结果将显示在
的输出栏中,否则,运行
CPP程序后将弹出命令行窗口,并把结果输出到命令行窗口中。
设置完成后的对话框如图5所示,单击【确定】按钮。
此时,在【工具】菜单下将会出现【Pcl2CPP】选项。
用Ctrl+2就能实现pcl到cpp的预编译。
图5CPP编译配置设定
(3)添加新建pcl菜单
启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【设置和语法】,单击【添加】按钮,在【文件类型】列表中将新增一项“NewSetting”,在“描述(E)”输入框中把它改成“PCL”,确定后,单击【文件(F)】菜单,选择【新建(N)】→【其他(O)…】,将弹出如图6所示的【选择文件类型】对话框,选择【PCL】,单击【确定】按钮后将出现编写Pcl代码的窗口。
图6新建PCL文件类型(4)语法高亮显示
为了实现语法加亮和自动缩进等功能,需要两个特征文件,它们分别是pcl.acp和pcl.stx,扩展名为.acp的文件是表示自动完成的特征文件,扩展名为.stx的文件表示语法加亮的特征文件。
对于其他通用的编程语言,可以从EditPlus的官网上下载到这两个特征文件。
但官网未提供PCL的语法文件,需要我们参其他语言的特征文件自行编写,读者可以参照以下形式进行编写:
PCL.stx
在EditPlus中添加这两个特征文件方法如下:
启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【设置和语法】,在【文件类型】列表中选择【PCL】选项,在,在【文件扩展名(X)】文本框中输入“pcl”(请注意:
输入的不是.pcl),在【设置和语法(S)】选项卡中,单击按钮弹出如图7所示的对话框,选择pcl.stx作为【语法文件(N)】;
按照相同的操作方法选择pcl.acp作为【自动完成(M)】的特征文件,设置完毕后的对话框如图8所示。
图7选择PCL.stx
图8为文件设置【设置和语法】
为了用缩进来让代码块之间的层次关系更清晰,下面介绍语法缩进的设置方法。
单击【制表符/缩排(T)】标签页,打开【制表符和缩排】对话框,如图9所示。
在【制表符(T)】和【缩排(I)】文本框中输入空格的个数,默认的缩进是8个空格,为了便于看出层次关系,一般设置为4个空格。
单击【确定】按钮来保存设置(图7),若勾选“启动自动缩排(E)”,则可设定自动缩排打开和关闭字符,对于像c语言、lisp语言、python等可分别设置为“{”“}”“(”“)”“:
”等,但对于pcl,没有特殊的自动缩进提示字符,此处不设定。
图9
设置PCL代码的自动缩进
(5)设置
pcl中文件的模板
读者还可以根据需要建立
pcl文件的模板,此后每次新建
pcl文件时模板中的程序代码都自动出现,可以在模板的基础上继续编写代码。
下面以建立模板文件template.pcl为例,教给读者创建模板文件的方法。
(a)首先新建1个
pcl文件
template.pcl(保存于
文件夹下),在该文件中输入模板文件中需要的代码:
#include"
appforms.p"
lpenums.i"
CLASSmy_class
functionmy_function()
endfunction
ENDCLASS
第1行代码的功能是引入界面预处理文件。
第3行代码的功能是定义类。
第4行代码的功能是定义函数。
(b)在EditPlus中设置模板文件:
启动EditPlus后,单击【工具(T)】菜单,选择【配置用户工具】,弹出【首选项】对话框,选择【文件】【模板】,单击右侧的【添加(A)】按钮,在弹出的文件选择框选择文件template.pcl作为模板文件,单击【打开按钮】,在右下侧【菜单文本(M)】的对话框中输入pcl,右上侧自动出现pcl模板,设置完毕后如图10所示:
图10
pcl模版设置
单击【确定】按钮,完成Python的模板设置。
单击【文件】【新建】,子菜单中的pcl选项后,新建文件中自动出现模板文件template.pcl中的代码。
(6)快