AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

第一次 测试3D打印机 — 出现问题:打不出来


可能的原因:

  • 料 出的少
  • 没有热板,地板最好是热的,这样比较容易上料(打第一层的时候。)
  • 温度没有掌握好
  • 设置没有配置好
  • 打第一层的时候,低板与出料头的距离太大。

2017-1-19 05:33:24

不管了,我这几天,3D打印方面,主要做的方面是:

  • 总结经验
  • 学习建模型 — (3D 打印的六足机器人模型 和 URDF中六足机器人的虚拟模型。)

这个前几层打不上料的问题,现在视乎已经解决了。

解决方法就是,将底板与出料口的距离竟可以的缩短,最好做到0距离。


但是现在还有一个问题:开始的时候挺好的,但打一会,就不再出料。这是怎么回事?

3D 打印大型模型时的经验和注意事项


1 . 注意 需要注意电源线一定要插好,插牢,不可以断电了。

我之前一次,就是,电源线插头由于没有插紧,打到一半的,断电了。

Alt text


2 . 同时挤出料的步进电机的位置的PLA料线要下面这个样子摆放:

简单的说:就是,靠近挤出料步进电机的PLA线,它不可以在顶部框里面太多圈,最好、最理想的是一圈,就像下图这样:

Alt text

错误的放法:(这是非常不可以的做法,因为这样会导致,在挤出PLA线的步进电机连接PLA线圈的那端的入口,入口出在运行一会儿的时间后,会出现死扣现象。)

Alt text

3 . 同时要注意:要不断的转动:(逆时针转动)

这样做的好处是:防止打印一段时间后,PLA线出现拧紧现象。

Alt text


3 . 最好要使用SD卡,就是将生成的程序保存到SD卡里面,然后在使用读取SD卡的方式来进行打印。(详细的通过SD卡打印模型的介绍,请参考这篇笔记:使用SD卡打印模型)

使用SD卡的好处是:

主要是这个软件的原因,如果我们不将生成的程序保存到SD卡上而是直接使用实时的方式,让电脑控制打印机,这个软件消耗的内存特别大:4700M多的内存,我的天啊,每次都是打印到不一会儿,就提示内存不足,然后软件自动异常关闭,然后打印就停止了。

而使用SD卡就可以解决这个问题:

你可以看到,现在所消耗的内存就很小了。属于正常的情况了。

Alt text

Alt text

Alt text


在SD卡启动打印,和在电脑启动打印,在开始的时候是一样的:先加入热床,然后出料口移动到热床位置,然后加入挤出口。热床的温度和挤出口的温度都达到了指定的温度后,就开始打印了。

Alt text

但是使用SD卡时,比较奇怪的是:当先加热热床的时候,两个(热床和挤出口)都显示的是:关闭 状态。热床的当前温度在不断的上升,当热床达到指定温度后(显示方面,是不能判断热床是否加入热成功的。),热床还是显示为:关闭状态,它的/右侧仍然没有变成指定的指定温度。接着挤出头下降,挤出头开始升温。升到指定温度。打印机就开始工作了。

Alt text


得到的模型:

正面:

Alt text

反面:

Alt text


用砂纸处理后:

正面:

Alt text

反面:

Alt text


简单的评论一下这个得到的模型:

下面不是很好,为什么不好呢。可能是因为圆环下面窄,中间宽,上面窄,所以开始打印的时候,是窄的,然后慢慢变宽。可能就是打印,从窄到宽这个过程,就得到的效果就不是很好。所以,就会出现现在得到的效果。

但是上面非常好,就是从宽到窄的一个过程,打印机打印的非常好。

所以,我推测,出现上面的下体打印效果差的原因可能有两个。

1 . 可能是打印机打印从窄到宽的模型部分时,效果就比较差。这是无法修复的,属于打印机的与生俱来的毛病。

2 . 也可能是因为,打印机打印接近底板地方的时候,打印的效果就是不怎么好。这个我们就可以修复它。

对于可能性2,我们需要通过实验来验证是不是这个原因。所以,我们又做了一个模型。

我们直接使用这个模型来验证:

Alt text

Alt text

经过了接近两个小时的打印,得到了最终的结果:

Alt text | 480x0

Alt text | 480x0

Alt text | 480x0

从得到的结果,我们可以看到,从窄到宽的两个部分都不怎么好。

所以,我猜测最可能的原因就是因为:我的模型不够“光滑”。

我重新设计一个模型:

这个模型,我分了很多面。(之前的只是横竖都是50个分面),现在是横竖都是255个分面。

Alt text

Alt text


现在打印看看效果:

你可以从打印的效果,可以看出:跟之前没有什么却别。并没有任何效果的提升。

Alt text


我们再打印一个模型:

Alt text

如果模型有问题,你可以把模型上传到下面这个网络里面,进行修复。

https://tools3d.azurewebsites.net/

Alt text

或者是 Windows 10系统里面自带的软件:3D Builder 软件进行修复。(我的电脑是Windows 10 的,所以,我比较习惯使用这个3D Builder软件来修复我使用SolidWorks软件设计好的模型。)


解决问题:当打印从小面积到大面积的模型部分的时候出现的打印效果很差问题

解决办法就是:我现在习惯,不管我打印什么样的模型,我都习惯将模型倾斜45度角进行打印。这样可以有效的解决上面说的这个问题。

Windows上手动编译VTK源代码


下载 VTK (7.1.0 版本)

下载网站:http://www.vtk.org/download/

下载下面这个:大约40多M

Alt text


使用CMake-GUI软件生成编译文件

解压VTK。然后使用CMake-GUI软件,生成编译文件:

第一次点击 Configure 按钮,选择的编译器是:Visual Studio 10 2010(就是VS2010 软件 32位的),大约要执行3分多钟。

Alt text

出现了红色的条目。然后,在点击Configure 按钮一次。

不在有红色条目。

Alt text

点击Generate 按钮。

搞定:

Alt text


开始编译VTK:

我们使用VS2010软件编译。使用VS2010软件打开下面的文件:

Alt text

点击生成:

Alt text

VTK库是一个比较底层的库,它没有什么依赖库,所以编译VTK库是一件比较容易的事情。

执行了30多分钟,现在,全部编译成功:

Alt text


然后我们在生成 INSTALL

Alt text

有一个执行失败:失败的原因是:需要管理员权限。

Alt text


解决办法:(参考网站:这里

所以,我们现在关闭这个VS2010软件。打开CMake-GUI,重新生成编译文件:

我们将 CMAKE_INSTALL_PREFIX 条目设置为一个我们有权限新建文件的路径:

Alt text

再次点击 Configure 按钮。

Alt text

最后在点击 Generates 按钮。

Alt text


现在点击:VTK.sln 文件

Alt text


对着ALL_BUILD 右键,点击 生成

Alt text

这次执行,也就5分钟左右。

Alt text


现在,我们生成 INSTALL

Alt text

Alt text


然后,我们再将这个文件夹剪切到C:\Program Files (x86) 路径里面:

Alt text

Alt text

我们需要将\bin\ 路径(C:\Program Files (x86)\VTK\bin)添加到环境变量里面。

Alt text


搞定

Windows 上 使用CMake-GUI 软件生成 Zlib 和 Png 库的编译文件,然后使用VS2010编译


当我在编译Windows 上编译 PCL源代码的时候,它zlib库和png库的依赖,但是现在我的电脑里面并没有两个库。所以,我们现在就来手动的下载这两个库的源代码,然后亲自编译它们。


参考网站:http://www.voidcn.com/blog/glunoy/article/p-6019106.html

我现在知道了。png库是依赖于zlib库的。(所以我们需要先编译zlib库)

现在我们电脑里面已经有zlib库了(我也不知道这个库是正有还是假有。不过当我们下面使用CMake-GUI软件生成png库的时候,CMake-GUI软件自动的天添加了zlib库的include文件的路径。所以,现在,我们就姑且认为当前的电脑立里面已经存在zlib库了。(但是我们继续后面的步骤发现,其实电脑里面并没有zlib库。)),但是没有png库,我们现在需要下载源码并编译:

到这里png库官网下载:http://libpng.sourceforge.net/index.html

Alt text

下载 libpng16库:

Alt text

下载,人下载最多的那个:

Alt text

接着是:

Alt text

下载后解压。

然后使用CMake-GUI软件生成编译文件:

Alt text

Alt text

Alt text

出现一个错误:

Alt text

错误的原因就是没有找到ZLIB库的链接文件:

Alt text

手动添加,这个两个(Debug 和 Release)都填写同一个文件:

Alt text

现在再点击 Configure 按钮。

没有错误了。但是现在有红色的条目:

Alt text

现在再点击一次 Configure 按钮。红色条目消失:

Alt text

现在点击 Generate 按钮生成编译文件:

Alt text


现在开始使用VS2010软件编译:

Alt text

Alt text

Alt text

看来现在不行啊,我需要先下载并编译zlib库,然后在下载并编译png库。这才是正确的步骤。


我们现在下载并编译zlib库:

下载zlib库源代码:

下载:https://sourceforge.net/projects/libpng/files/

依次的步骤是:

Alt text

Alt text

Alt text

下载完成后,我使用7-zip软件对其进行了两次解压。

然后使用CMake-GUI软件给它生产编译文件:

Alt text

点击 Configure按钮进行配置:

Alt text

Alt text

没有出现错误,出现了红色的条目:

我们现在来仔细的看看INSTALL条目:

Alt text

默认的添加的路径都是C:\Program Files (x86)。我们不能使用这个安装路径,原因是当我们一会在使用VS2010软件编译生成的编译文件的时候,会出现错误的,错误的原因是:没有权限。所以,我需要将这部分INSTALL条目的路径都修改为我们有权限的路径。

Alt text

然后在点击 COnfigure 按钮。红色条目消失。

Alt text

然后在点击 Generate 按钮。

Alt text


现在使用VS2010软甲打开刚刚生成的.sln文件:

Alt text

生成:

Alt text

很快,不到1秒钟就编译完成了:

Alt text

然后对 INSTALL项目进行生成

Alt text

也是秒速编译完成:

Alt text

生成成功:

Alt text

现在,我们将这个生成的文件夹,剪切到C:\third_packages路径里面。(我自己的一个习惯,我喜欢将第三方库放在这个路径下。)

我们还需要将zlib库的png路径添加到系统的环境变量里面。

Alt text

Alt text


现在我们可以将下面这两个文件夹给删除了。(一个是zlib的源代码。一个是zlib的编译文件)(当然,我们删除这两个文件夹之前,需要先关闭VS2010软件,因为刚刚VS2010软件一直在使用其中一个文件。CMake-GUI软件可以不用关闭,它不影响。)

Alt text


接下来,我们来编译 png库:

Alt text

修改zlib库(png库依赖于这个库)条目为正确的路径:

Alt text

现在点击 Configure 按钮。

红色的条目都消失了。现在有用一个点:我们需要注意这个安装路径:

Alt text

和zlib库是一样,我们需要给这个安装路径修改为一个我们可以控制的权限的路径。

修改为:

Alt text

现在点击 Configure 按钮,然后在点击 Generate 按钮:搞定

Alt text


现在使用VS2010软件对生成的编译文件进行编译:

Alt text

Alt text

编译成功,一共没有用了3秒钟:

Alt text


然后是编译 INSTALL项目:

Alt text

秒速编译完成:

Alt text

一样,我们将得到的文件夹剪切到 C:\third_packages这个路径里面。

然后将png路径添加到环境变量里面:

Alt text

Alt text


最后一步就是清理战场:删除下面两个文件夹:(清理前,需要先关闭VS2010软件)


好的,这样,zlib 和 png 这两个库就编译完成了。

搞定

解决OpenNI问题:XnOS.h:No Such File or Directory


参考网站:ofxOpenNI:XnOpenNI.h:没有这样的文件或目录


遇到的问题

1
XnOS.h: No such file or directory

Alt text


解决办法

查找openni相关的软件包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
aobo@aobo-tp:~$ apt-cache search openni
libopenni-dev - headers for OpenNI 'Natural Interaction' frameworks
libopenni-java - Java framework for sensor-based 'Natural Interaction'
libopenni-sensor-pointclouds-dev - headers for Kinect sensor modules for the OpenNI framework
libopenni-sensor-pointclouds0 - Microsoft Kinect sensor modules for the OpenNI framework
libopenni-sensor-primesense-dev - headers for working with PrimeSense sensor OpenNI modules
libopenni-sensor-primesense0 - PrimeSense sensor modules for the OpenNI framework
libopenni0 - framework for sensor-based 'Natural Interaction'
libopenni2-0 - framework for sensor-based 'Natural Interaction'
libopenni2-dev - headers for OpenNI 'Natural Interaction' frameworks
openni-doc - developer documentation for OpenNI frameworks
openni-utils - debug and test utilities OpenNI framework
openni2-doc - developer documentation for OpenNI frameworks
openni2-utils - debug and test utilities OpenNI2 framework
primesense-nite-nonfree - OpenNI module providing gesture and skeleton tracking
ros-kinetic-depth-image-proc - Contains nodelets for processing depth images such as those produced by OpenNI camera.
ros-kinetic-ecto-openni - Ecto bindings for the openni sensor.
ros-kinetic-freenect-camera - A libfreenect-based ROS driver for the Microsoft Kinect.
ros-kinetic-freenect-launch - Launch files for freenect_camera to produce rectified, registered or disparity images.
ros-kinetic-openni-camera - A ROS driver for OpenNI depth (+ RGB) cameras.
ros-kinetic-openni-launch - Launch files to open an OpenNI device and load all nodelets to convert raw depth/RGB/IR streams to depth images, disparity images, and (registered) point clouds.
ros-kinetic-openni2-camera - Drivers for the Asus Xtion and Primesense Devices.
ros-kinetic-openni2-launch - Launch files to start the openni2_camera drivers using rgbd_launch.

安装 libopenni-dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
aobo@aobo-tp:~$ sudo apt-get install libopenni-dev 
[sudo] password for aobo: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libopenni-dev is already the newest version (1.5.4.0-14).
libopenni-dev set to manually installed.
The following packages were automatically installed and are no longer required:
  linux-headers-4.4.0-36 linux-headers-4.4.0-36-generic linux-headers-4.4.0-57
  linux-headers-4.4.0-57-generic linux-image-4.4.0-36-generic
  linux-image-4.4.0-57-generic linux-image-extra-4.4.0-36-generic
  linux-image-extra-4.4.0-57-generic
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 140 not upgraded.
aobo@aobo-tp:~$ 

检测安装路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
aobo@aobo-tp:~$ dpkg -L libopenni-dev
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libopenni-dev
/usr/share/doc/libopenni-dev/copyright
/usr/include
/usr/include/ni
/usr/include/ni/XnEnumerationErrors.h
/usr/include/ni/Linux-Powerpc
/usr/include/ni/Linux-Powerpc/XnPlatformLinux-Powerpc.h
/usr/include/ni/XnProfiling.h
/usr/include/ni/XnCppWrapper.h
/usr/include/ni/XnStack.h
/usr/include/ni/XnModuleInterface.h
/usr/include/ni/XnDump.h
/usr/include/ni/XnGeneralBuffer.h
/usr/include/ni/XnInternalDefs.h
/usr/include/ni/XnOpenNI.h
/usr/include/ni/XnStringsHashT.h
/usr/include/ni/XnOS.h
/usr/include/ni/XnMacros.h
/usr/include/ni/XnModuleCppInterface.h
/usr/include/ni/XnBaseNode.h
/usr/include/ni/XnDataTypes.h
/usr/include/ni/XnFPSCalculator.h
/usr/include/ni/XnCodecIDs.h
/usr/include/ni/XnPropNames.h
/usr/include/ni/XnUtils.h
/usr/include/ni/XnOSStrings.h
/usr/include/ni/XnUSB.h
/usr/include/ni/XnCyclicQueueT.h
/usr/include/ni/XnLicensing.h
/usr/include/ni/XnQueue.h
/usr/include/ni/XnArray.h
/usr/include/ni/XnStackT.h
/usr/include/ni/XnModuleCppRegistratration.h
/usr/include/ni/XnCallback.h
/usr/include/ni/XnDerivedCast.h
/usr/include/ni/XnDumpWriters.h
/usr/include/ni/XnHash.h
/usr/include/ni/XnOSMemory.h
/usr/include/ni/XnModuleCFunctions.h
/usr/include/ni/XnStatusCodes.h
/usr/include/ni/XnPrdNodeInfoList.h
/usr/include/ni/Linux-Mips
/usr/include/ni/Linux-Mips/XnPlatformLinux-Mips.h
/usr/include/ni/XnStringsHash.h
/usr/include/ni/XnLog.h
/usr/include/ni/XnBitSet.h
/usr/include/ni/XnTypes.h
/usr/include/ni/XnThreadSafeQueue.h
/usr/include/ni/XnStatusRegister.h
/usr/include/ni/XnVersion.h
/usr/include/ni/XnAlgorithms.h
/usr/include/ni/XnPlatform.h
/usr/include/ni/XnEventT.h
/usr/include/ni/Linux-AArch64
/usr/include/ni/Linux-AArch64/XnPlatformLinux-AArch64.h
/usr/include/ni/Linux-x86
/usr/include/ni/Linux-x86/XnOSLinux-x86.h
/usr/include/ni/Linux-x86/XnPlatformLinux-x86.h
/usr/include/ni/XnPrdNode.h
/usr/include/ni/MacOSX
/usr/include/ni/MacOSX/XnPlatformMacOSX.h
/usr/include/ni/XnEvent.h
/usr/include/ni/IXnNodeAllocator.h
/usr/include/ni/XnListT.h
/usr/include/ni/XnContext.h
/usr/include/ni/XnPrdNodeInfo.h
/usr/include/ni/XnOSCpp.h
/usr/include/ni/XnCyclicStackT.h
/usr/include/ni/XnQueueT.h
/usr/include/ni/XnList.h
/usr/include/ni/XnStatus.h
/usr/include/ni/XnNodeAllocator.h
/usr/include/ni/XnLogTypes.h
/usr/include/ni/Linux-Arm
/usr/include/ni/Linux-Arm/XnPlatformLinux-Arm.h
/usr/include/ni/XnQueries.h
/usr/include/ni/XnLogWriterBase.h
/usr/include/ni/XnNode.h
/usr/include/ni/XnScheduler.h
/usr/include/ni/XnUSBDevice.h
/usr/include/ni/XnHashT.h
/usr/lib
/usr/lib/pkgconfig
/usr/lib/pkgconfig/libopenni.pc
/usr/share/doc/libopenni-dev/changelog.Debian.gz
/usr/lib/libnimCodecs.so
/usr/lib/libSample-NiSampleModule.so
/usr/lib/libnimRecorder.so
/usr/lib/libnimMockNodes.so
/usr/lib/libOpenNI.so
/usr/lib/libOpenNI.jni.so
aobo@aobo-tp:~$ 

看一下include路径里面的openni文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
aobo@aobo-tp:~$ cd /usr/include/ni/
aobo@aobo-tp:/usr/include/ni$ ls
IXnNodeAllocator.h  XnCodecIDs.h           XnFPSCalculator.h  XnModuleCFunctions.h          XnPrdNode.h          XnStatus.h
Linux-AArch64       XnContext.h            XnGeneralBuffer.h  XnModuleCppInterface.h        XnPrdNodeInfo.h      XnStatusRegister.h
Linux-Arm           XnCppWrapper.h         XnHash.h           XnModuleCppRegistratration.h  XnPrdNodeInfoList.h  XnStringsHash.h
Linux-Mips          XnCyclicQueueT.h       XnHashT.h          XnModuleInterface.h           XnProfiling.h        XnStringsHashT.h
Linux-Powerpc       XnCyclicStackT.h       XnInternalDefs.h   XnNodeAllocator.h             XnPropNames.h        XnThreadSafeQueue.h
Linux-x86           XnDataTypes.h          XnLicensing.h      XnNode.h                      XnQueries.h          XnTypes.h
MacOSX              XnDerivedCast.h        XnList.h           XnOpenNI.h                    XnQueue.h            XnUSBDevice.h
XnAlgorithms.h      XnDump.h               XnListT.h          XnOSCpp.h                     XnQueueT.h           XnUSB.h
XnArray.h           XnDumpWriters.h        XnLog.h            XnOS.h                        XnScheduler.h        XnUtils.h
XnBaseNode.h        XnEnumerationErrors.h  XnLogTypes.h       XnOSMemory.h                  XnStack.h            XnVersion.h
XnBitSet.h          XnEvent.h              XnLogWriterBase.h  XnOSStrings.h                 XnStackT.h
XnCallback.h        XnEventT.h             XnMacros.h         XnPlatform.h                  XnStatusCodes.h
aobo@aobo-tp:/usr/include/ni$ 

我们现在查看一下openni安装的头文件和链接文件:

下面这两个命令是检测不到openni的头文件路径的。

1
2
3
4
5
6
7
8
9
10
11
aobo@aobo-tp:/usr/include/ni$ pkg-config --cflags openni
Package openni was not found in the pkg-config search path.
Perhaps you should add the directory containing `openni.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openni' found
aobo@aobo-tp:/usr/include/ni$ pkg-config --cflags ni
Package ni was not found in the pkg-config search path.
Perhaps you should add the directory containing `ni.pc'
to the PKG_CONFIG_PATH environment variable
No package 'ni' found
aobo@aobo-tp:/usr/include/ni$ 

正确的命令:

1
2
3
4
5
aobo@aobo-tp:~$ pkg-config --cflags libopenni
-I/usr/include/ni
aobo@aobo-tp:~$ pkg-config --libs libopenni
-lOpenNI
aobo@aobo-tp:~$ 

我当前的项目是在QT中的,解决办法就是:

.pro 文件里面,添加openni的头文件路径和链接文件路径。

1
2
3
INCLUDEPATH += /usr/include/ni

LIBS += -L/usr/lib -lOpenNI

PCL 使用 pcl::visualization::PCLVisualizer 类里面的键盘事件方法 如何使用及需要注意的事项


如何使用 pcl 库里面的可视化模块的键盘事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <pcl/visualization/pcl_visualizer.h>

bool iteration_flag = false;

void keyboardEventOccurred(const pcl::visualization::KeyboardEvent& event, void* nothing){
  if(event.getKeySym() == "space" && event.keyDown()){
      iteration_flag = true;
  }
}

int main(){
  pcl::visualization::PCLVisualizer *p;
  p = new pcl::visualization::PCLVisualizer("PCL Windows");
  p->registerKeyboardCallback(&keyboardEventOccurred, (void*)NULL);
  
  while(iteration_flag != true){
      p->spinOnce();
  }
  return 0;
}

需要注意的事项:

第一个:就是,你定义的这个p指针,必须要给它赋值实例化对象:p = new pcl::visualization::PCLVisualizer("PCL Windows");,否则程序编译不会出现错误,但是运行的时候会出现内存异常的运行错误。


第二个:就是这个自定义的键盘事件函数了:keyboardEventOccurred()函数。想要让这个函数可以使用,我们不需要再程序中循环的调用p->spinOnce()方法,程序才能响应我们的这个键盘事件函数。


第三个:一个也非常重要:其实上面的代码中,这段程序是不安全的:

1
2
3
while(iteration_flag != true){
  p->spinOnce();
}

因为如何程序在这个地方一直的执行,如果你可视化的是一个点比较多的点云,那么一段时间后(大约不到5秒钟),你的电脑就会卡得要死!!!!

安全的程序应该是下面这个样子的:(参考网站:这里

我们添加延时函数,不让它一直执行spinOnce()方法。

1
#include <boost/thread/thread.hpp>
1
2
3
4
5
  while (iteration_flag != true)
  {
    p->spinOnce (100);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }

其中spinOnce()函数里面的100指的是:How long (in ms) should the visualization loop be allowed to run.

Alt text

其中的boost::this_thread::sleep (boost::posix_time::microseconds (100000));是延时100000微秒,也就是0.1秒。

PCL 记录时间长度 — TicToc 类


对于PCL在WindowsLinux上的环境的搭建请参考我写的这几篇博客。


1
#include <pcl/console/time.h>
1
2
3
4
5
6
pcl::console::TicToc tt;
tt.tic ();

//需要记录执行多长时间的代码

std::cout << "[done, " << tt.toc () << " ms ]" << std::endl;

C++ 字符串融合 和 String 与 Int 之间最简单的转换方法


字符串融合

1
2
3
4
5
#include <string>

std::string str = std::string("../pairAlginClass/capture0001") + std::string(".pcd");
或者
std::string str(std::string("../pairAlginClass/capture0001") + std::string(".pcd"));

string 与 int 之间最简单的转换方法

下面的代码,我们需要使用C++11C++11里面有std::to_string()方法。

1
2
3
4
#include <string>

int i = 123;
std::string str = std::to_string(i);

给项目添加C++11

如果是CMakeLists.txt文件的项目。就在CMakeLists.txt文件中添加:

1
2
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_STANDARD 11)

如果是Qt项目的,就在.pro文件里面添加:

1
CONFIG += c++11

参考网站: