1、按照OpenSlam.org网站上给出的RobotVision_install_guide.txt,下载Toon、libcvd、opencv2.1和CSparse库;
2、Toon用作函数库,将其头文件包含进IDE的inlucde路径即可;
3、将libcvd按照/MD(/MDd)开关进行编译;
4、将CSparse的头文件和源文件拷贝到RobotVision对应的CSparse目录下;
5、安装Opencv2.1库;
6、配置好这些后,使用CMake工具构建RobotVision工程;
注意,在构建RobotVision工程之前,打开CMakeLists.txt文件,
并将# SET (LIB_NAMES lapack f77blas cblas atlas GL cvd ) #jpeg png tiff
修改为SET (LIB_NAMES lapack GL cvd ) #jpeg png tiff ;
即删除对f77blas cblas atlas等数学库的依赖;
7、使用CMake构建RobotVision工程后,依赖lapack,gl,cvd,opencv等第三方开源库,
在工程属性的链接依赖项中添加这些依赖库(Debug/Release);
并将RobotVision工程的配置类型由动态库(.dll)修改为静态库(.lib);
8、编译时,首先会提示sparse_matrix.h文件中uint无定义的错误,这是因为uint类型在Linux开发环境下,
是定义在系统文件中的。在Windows环境下,需要在此文件开头重新定义:typedef unsigned int uint;
9、由于RobotVision中的三维显示窗口,封装了OpenGL,因此在gui_view.cpp文件中包含了#include <GL/gl.h>,
但是windows平台下使用Opengl进行开发,需要在包含#include <GL/gl.h>之前包含#include <windows.h>,
这样才能解决编译gl.h时产生的错误;
10、由于windows_sdk中只带有gl.h和glu.h,没有glext.h文件,
所以在gui_view.cpp文件中包含的#include <GL/glext.h>,就无法找到此文件;
从网上下载glext.h文件,并将其拷贝到gl目录下,可以解决无法找到glext.h文件的编译错误;
11、在opencv_helper.cpp文件中,图片类型采用了byte类型,导致类型定义模糊,
需将byte类型修改为CVD::byte,消除错误;
12、在rectangle.h中使用了std::max 和std::min函数,标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max()。
在 Visual C++ 中无法使用它们,因为没有定义这些函数模板。其名字min和max与<windows.h>中传统的min/max宏定义有冲突。
解决方案:在工程“属性配置”中选择=>“C/C++”=>“预处理器”=>右边“预处理器定义”处加上“NOMINMAX”,便禁用了Visual C++中的 min/max宏定义,
也可以在包含<windows.h>头文件之前加上:#define NOMINMAX ;
13、至此,编译就没有错误了,
但是链接时,如果不小心,比如:libcvd或lapack采用的运行时库与robotvision不一致时,会导致模块重定义的链接错误;
因此,在编译RobotVision时,对所以来的第三方库,我都选用/MD(/MDd)开关,以保持一致性;
14、编译完成RobotVision库之后,继续编译其自带的两个Demo程序:ba_demo和rss2010_demo;
在ba_demo.cpp和rss2010_demo.cpp文件中使用了Linux系统函数usleep函数,实现对进程的睡眠效果,
在windows平台下,需要修改为Sleep()函数;
15、在编译两个demo的过程中,在graph_optimizer.h和bundle_adjuster.h文件中出现了isnan函数无定义的错误;
究其原因是VC++开发环境正在逐渐向C99标准靠近,isnan是定义在C99标准中的函数,若要使用还函数,
可以在文件起始处定义如下:#define isnan(x) ((x) != (x));
16、编译ba_demo时需要依赖opengl,libcvd,lapack,blas和robotvision等第三方库;
编译rss2010_demo时需要依赖opengl,libcvd,lapack,blas,opencv和robotvision等第三方库;
17、搞定!!demo程序编译通过,release版本运行效果良好,(ps:rss2010_demo中figure 2程序无法运行)
Debug版本运行时需要依赖libifcoremdd.dll库,貌似是和fortran相关的,搞不懂。
不过release可以运行就OK了。^_^