终于把Cluster Recognition and 6DOF Pose Estimation using VFH descriptors上面的范例编译通过了。
对于C++新手,学习PCL无疑是一件吃力的事情——多种三方库相互间的依赖、版本的一再升级不稳定、不同底层操作系统对上层应用的限制,好在,有那么一群来自世界各地开源社区强大的developers在背后细心地维护着他,有问题时就可以去论坛中找高手交流,学习的乐趣不言而喻了。
言归正传,最近几天,看完有关VFH的论文后,对它表现出的识别能力有了兴趣,打算把官网上的范例down下来进一步学习。最初,用VS2010+PCL1.3.0,在train过程中,就碰到了不少问题:下载安装完HDF5-1.8.7_win_x86的API后发现,hdf5里面只提供release版本的lib库,奈何自己一直以来都选择-gd版本的pcl库,为了库以来之间不混乱,除了重新将pcl库换成release版本,还需要在C/C++--->代码生成--->运行库中设置多线程(/MT),在链接器--->输入--->hulve特定默认库中设置参数(MSVCRT.lib),以上这样做是为了防止出现MSVCRT.lib和LIBCMT.lib库调用时相冲突。(但这种做法,在后面test过程中似乎行不通,因为第三方依赖库vtk似乎有依赖msvcrt.lib里面的宏定义,直接采用上述做法,在test过程会出现如下图“无法解析外部符号”的错误,纠结)...
还有两个小地方也会报错,可能是版本升级的缘故,win系统下面调试范例时,需要把build_tree末行做小改动://delete[] data.ptr (); data.free();在nearest_neighbors中加上#include<iosfwd>;但依旧没能完全解决问题。
开始选择ubuntu10.04+pcl1.4+cmake2.8的方法,分别老实的再同一个文件夹里创建了build_tree.cpp,nearest_neighbors.cpp,CMakeLists.txt三个文件,可cmake过程中却老有下面的警告:
翻开以前下的pcl1.4源码文件,找到FindFlann.cmake文件,拷贝到以上文件夹中,这个问题在得以解决,cmake顺利编译通过。但在接下来的/build/Makefile中使用$make命令时,程序依然报错。
定位到源程序中的readHeader()部分,将两个cpp文件中unsigned int idx都改成int idx,重新cmake后再$make,终于没有错误,编译通过^_^。最后上两张成图: