PCL学习(二)

来源:互联网 发布:创维电视直播软件 编辑:程序博客网 时间:2024/06/05 13:23

            今天听到“噩耗”——mo要从实验室走了,他的活儿从下周开始由我接手,这意味着从今天开始,我终于正式搭上了经验机器人小组的末班车(喜悦?困顿?复杂。。。囧)。废话还是不多说,作为刚起飞的菜鸟,还是把最近学习PCL的一点点方法心得记录下来。

        要感谢heresy做的前期工作,原博文请参见如下地址:

        http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=217

        自己整合了一下,再加上pcd_write.cpp的范例,就很容易地利用openNI+PCL+Kinect得到了一个记录三维点云坐标的pcd文件;然后仿用simple_cloud_visualization范例将记录在pcd文件中的点云进行显示,搭积木般的,就容易地实现了从读取点云到显示点云的功能。下面这张图是对老板办公室那边的墙进行扫描3分钟后重建出来的三维图:

初步能看的出来是一堵墙上有一扇门的雏形吧,中间黑下去的一大块,猜想可能跟那地方是玻璃材质的挡板有关(光斑出现了散射),下次把颜色信息也加上去,期待能有更好的演示效果。这些,不是重点,码这篇博文主要是想说明下面的问题。

       在把simple_cloud_visualization.cpp对应的工程文件下面,按一贯的PCL项目配置方法把对应的include,lib路径,依赖库项目等一一配置完以后,debug,依旧会出现下面的错误:

这里要说明的是,在VS中对于error LNK之类的错误,只能说明程序编译已算通过,但运行时出现了问题,如下:

解析上面的语句:说明是打包好vtkRendering-gd静态库在运行时(它在编译前,里面应该对应着有一个叫做vtkOpenGLGlyph3DMapper的obj对象),无法找到以__imp__glCallList@4接口命名而实现的某函数。google!!发现它是OpenGL中定义的一个东东!(这里不得不说,window真是讨厌,明明之前我似乎有把该有的gl库放进系统自带库路径下面了,现在工程运行时却找不到对应的库,不知道是我配置出了错还是其他原因?)这个问题先放下。无奈,自己从网上下了一个不到500K的opengl95.exe(话说这个虽然版本低,但小巧强大,总比微软不更新windows自带的gl时不时引诱你用directX的好),打开安装到一个文件夹里面,然后把这个文件夹的路径添加到属性—链接器—常规—附加库目录,再把GLU32.LIB,OPENGL32.LIB,GLAUX.LIB添加到输入—附加依赖项里面,再次debug,编译通过!

        PS:安装PCL—win7版本时,会自动加载boost等第三方库,这是便利程序的平台移植而辅助添加的C++准标准库。但有时程序运行会报错,会出现某某(如:time_t)等不是std里的成员等,不是using某命名空间等错误,严重的,直接找不到某变量命名来源。而且,相同或相似名称但内容实现不同的io.h,time.h等文件在\pcl\common和\pcl\visualization\common,\3rdParty\Boost\include和\Microsoft Visual Studio 10.0\VC\include等不同第三方文件夹下都有定义,具体用到哪个视程序而定,万不可在包含文件中胡乱添加。一般情况下,在包含目录下把\PCL 1.3.0\include\pcl-1.3的include进去,就基本可以了。

原创粉丝点击