文章目录
  1. 1. 第三方库准备
  2. 2. 项目搭建

前面我们基于OpenCV3.0实现了简单的VO,接下来我们对整个过程进行进一步优化。一步步实现可以使用的视觉里程计。
整个程序主要参考:https://github.com/uzh-rpg/rpg_svo
论文主要参考:http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf

第三方库准备

不管是科研还是工程中,我们要充分利用好以后的资源,第三方库就是很好的资源,这样很多功能就避免自己去实现,从而带来不必要的bug。
不过对于第三方库,尽量使用成熟的第三方库,要挑选已有相关文档,或者单元测试较好,避免第三方库的使用带来bug。
本项目中主要使用到的第三方库有:
OpenCV计算机视觉库,提供了相关视觉方法
g2o图优化,主要用于BA
Eigen提供矩阵相关运算
Boost提供c++标准库的相关扩展
对于上述库,请大家自行安装,对于OpenCV请大家安装2.4.X,本人安装2.4.9,没有更新,先不必更新到3.0,因为3.0与之前版本差别较大。
Sophusc++实现的李群库,为了更好的理解,目前使用非模板双精度版,记得git checkout a621ff
fast特征检测,这个fast特征检测基于sse指令实现,速度快。

项目搭建

接下来就来准备对项目进行搭建,项目目录如下:

注:我目前开发环境为Windows8.1,采用CMake对项目进行构建,测试环境也为Windows8.1,其它平台目前不做考虑,后期移植Android时再进行测试。
对于整个source下面的文件及文件夹做一个简单解释:

  • 3drparty 存放第三方库
  • apps 存放简单可应用程序
  • cmake 存放相关cmake文件
  • data 存放测试相关数据文件
  • doc 存放文档生成相关文件
  • libs 存放视觉里程计的封装类库
  • parse-files 存放相关配置文件的解析模板
  • samples 存放简单测试项目
  • tests 存放单元测试用例
  • CMakeLists.txt 主目录下的CMake配置文件
  • README.md 项目相关说明
  • version_prefix.txt 存储项目的版本号

目前我们就先简单写一些CMakeLists.txt内容,主要是完成一个基础的框架,添加一些该添加的东西,保证整个CMake项目可以编译。
首先是主CMakeLists.txt文件,根目录的CMakeLists.txt文件主要作用设定全局目录路径,设置第三方库,设置编译选项,设置Include和link路径,处理子路径。总的来说CMakeLists.txt文件也就是一个标识性语言,具体主目录CMakeLists.txt文件如下:

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
CMAKE_MINIMUM_REQUIRED (VERSION 2.8)#设定最小版CMake版本号

PROJECT (OpenMVO)#设定工程名称

LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") # 添加本地CMake脚本目录

INCLUDE(cmake/script_version_number.cmake REQUIRED)#添加项目版本号

#设置路径
SET(OPENMVO_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
SET(OPENMVO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
SET(OPENMVO_BINARY_DIR ${PROJECT_BINARY_DIR})

#添加有用的宏
INCLUDE(cmake/UtilsMacros.cmake REQUIRED)# 添加一些有工具宏

set(CMAKE_DEBUG_POSTFIX "d")#设置Debug下lib的名称后添加d,如openmvo_XXX100d.lib

#添加libs
FIND_PACKAGE(OpenCV REQUIRED) #通过CMake系统添加OpenCV
FIND_PACKAGE(g2o REQUIRED) #通过CMake系统添加g2o
FIND_PACKAGE(Boost REQUIRED)

include(cmake/script_eigen.cmake REQUIRED) #添加Eigen
#include(cmake/script_sophus.cmake REQUIRED) #添加Sophus
include(cmake/script_fast.cmake REQUIRED) #添加fast lib

#构建静态库还是动态库,目前先设置为静态库,后期更改为默认动态库
SET(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)")
IF(BUILD_SHARED_LIBS)
SET(CMAKE_OPENMVO_BUILD_SHARED_LIB "#define OPENMVO_BUILT_AS_DLL")
SET(CMAKE_OPENMVO_BUILD_SHARED_LIB_ONOFF 1)
ELSE(BUILD_SHARED_LIBS)
SET(CMAKE_OPENMVO_BUILD_SHARED_LIB "/* #define OPENMVO_BUILT_AS_DLL */")
SET(CMAKE_OPENMVO_BUILD_SHARED_LIB_ONOFF 0)
ENDIF(BUILD_SHARED_LIBS)

#设置include和link路径
INCLUDE_DIRECTORIES(".")#设置包含当前目录

LINK_DIRECTORIES("${CMAKE_BINARY_DIR}/lib")

#设置路径,保存lib和bin到同一目录
SET( LIBRARY_OUTPUT_PATH ${OPENMVO_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )
SET( EXECUTABLE_OUTPUT_PATH ${OPENMVO_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )

# ----------------------------------------------------------------------------
# 处理子目录
# ----------------------------------------------------------------------------
ADD_SUBDIRECTORY(3rdparty) # 第三方库的路径
ADD_SUBDIRECTORY(libs) # 本地C++ lib的路径

SET( BUILD_APPLICATIONS ON CACHE BOOL "If you only want the OPENMVO libraries, disable this.")
IF(BUILD_APPLICATIONS)
ADD_SUBDIRECTORY(apps) # 添加小应用程序目录
ENDIF(BUILD_APPLICATIONS)

ADD_SUBDIRECTORY(doc) #添加文档目录

# 添加单元测试
# ----------------------------------------------------------------------------
SET( BUILD_TESTING ON CACHE BOOL "Build OPENMVO tests")
IF( BUILD_TESTING)
ADD_SUBDIRECTORY(tests) # 添加单元测试
ENDIF( BUILD_TESTING)

对于上述内容已经添加好注释,目前只适配了Windows下VS2013平台,目前简单搭建了整个项目的框架,源码地址:https://github.com/yueying/OpenMVO
注意:目前整个项目源码提交到这个github下,代码会一步步迭代上去,所以可依据提交时间及注释参考原先代码
今天就到这,下一步开始根据算法分析进行简单的算法设计。

文章目录
  1. 1. 第三方库准备
  2. 2. 项目搭建