Ceres-Solver库使用(一)--windows下安装配置

本文主要介绍microsoft visual studio 2015 下配置ceres-solver。

  • Ceres-Solver简介
  • 安装必备及下载
  • 安装步骤
  • 测试使用
  • 参考资源

Ceres_Solver简介

ceres-solver是由Google开发的开源的非线性最小二乘问题的求解工具包,具有强大、快速、稳定并受到持续的开发支持等特点,更多特性参见官网[Ceres官网]。在安装学习之前最好对非线性最小二乘的最优化问题及过程有初步的了解。

安装必备及下载

在VS环境下使用,也建议对VS的 静态链接、动态dll,debug、release,32、64等配置有所了解。配置不当,可能无法生成或使用,不同的配置,生成的ceres库也不同。

环境:32位Windows 7 + Microsoft Visual Studio Community 2015

配置工具CMake及下载
windows VS下Ceres的安装可用别人以cmake工具生成的Ceres.sln工程文件这比较简单,但失去了配置的灵活性,无法扩展,甚至可能因为环境、版本等的不同而失效。
所以配置Ceres最好的方法是使用cmake工具生成自己的Ceres.sln。CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。对cmake的学习是一劳永逸的,许多优秀的算法包库都可以而且也推荐用cmake编译生成。
下载地址:CMake 3.6.1

Ceres-Solver的组成及下载
Ceres-Solver最新的库文件:ceres-solver-1.11.0
必备工具包:
eigen: 版本必须3.1.0以上,强烈推荐最新版本;
Google Log:是一个C++语言的应用级日志记录框架,提供了C++风格的流操作盒各种助手宏。版本0.3.1以上;
Google Flags: 是一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。用于生成例子和测试程序;
可选工具包:
SuiteSparse:用于稀疏矩阵计算;强烈推荐安装;
CXSpares:为SuiteSparse的简化版本,不依赖与LAPACK和BLAS;

安装步骤

  • 建立一个目录:如“C:\ceres”;
  • 将下载的并解压后ceres-solver,eigen,glog,gflags,suitesparse……等文件放到该\ceres目录下;
  • 安装cmake,文件可放在\ceres目录下,也可使用默认安装目录;
  • 用vs 2015打开glog的sln工程文件,点击生成,对应不同的配置:32/64位,debug/release可生成多个不同的版本,这里以32,debug为例;
  • 生成gflags和suitesparse(需用cmake):通过cmake生成sln,在用sln生成lib(具体可参见下面ceres-solver的cmake过程);

ceres-sovler配置

  • 打开cmake-gui.exe;
  • 单击browse sourse:选择源文件位置,如:C:\ceres\ceres-solver-1.11.0
  • 单击browse build:生成的sln放在哪里,如在\ceres目录下新建文件夹ceres_build,如果考虑版本的话,可以在ceres_build下新建版本子文件夹,如32Debug等,以32Debug为例,则最终目录为C:\ceres\ceres-solver-1.11.0\ceres_bulid\32Debug
  • 单击configure按键进行配置,这是肯定会有一些配置不成功,一些选项会变红,这时需要对每一项进行手动配置,直到配置成功。如对EIGEN_INCLUDE_DIR项,配置好eigen的位置,这里是C:\ceres\eigen
  • configure完成之后,会显示configure done然后单击generate,这样ceres.sln项目工程就生成了;
  • 打开ceres.sln,生成ceres
    打开之后可以看到很多解决方案,除了ceres之后其他都是例子,这里可以先生成ceres,注意在生成ceres时,为防止gflag与windows对GDI调用时对error设置的冲突,可以用预处理器解决,方法是:在右键ceres属性-配置属性-C/C++-预处理器(Preprocessor)-预处理器定义处加上GLOG_NO_ABBREVIATED_SEVERITIES,注意不要把原来这里的定义删掉。
  • 全部生成完成之后,可以\ceres目录下新建Include,Library两个文件夹
    头文件
    1. 将\ceres\ceres-solvers-1.11.0\include下的文件夹ceres复制到Include下;
    2. 将\ceres\ceres-solver build\config\ceres\internal下文件config.h复制到\ceres\Include\ceres\internal中;
    3. 将\ceres\glog-master\src\windows下的glog文件夹复制到Include下;
    4. 将\ceres\gflags-build\include下的gflags文件夹复制到Include下;
    5. 将\ceres\eigen 3下的Eigen文件夹复制到\ceres\Include\ceres下;
      库文件(以32Debug为例)
    6. 将\ceres\glog-master\Debug下libglog.dll复制到系统盘\Windows\System32下;
    7. 将\ceres\glog-master\Debug下libglog.lib复制到\ceres\Library;
    8. 将\ceres\ceres-solver build\32Debug\lib\Debug下的ceres-debug.lib复制到\ceres\Library;
    9. 将\ceres\gflags-build\lib\Debug下的gflags_static.lib和gflags_nothreads_static.lib复制到\ceres\Library;
    10. 将\ceres\siutspare-build\lib\Debug下所有的lib文件复制到\ceres\Library;

测试与使用

  • 新建一个helloword的工程文件;
  • 将\ceres\ceres-solver-1.11.0\examples中的helloworld.cc文件复制到工程文件中;
  • 设置工程的包含文件:项目 - helloworld属性 - VC++目录 - 包含目录 上添加C:\ceres\Include;
  • 添加附加依赖项:项目 - helloworld属性 - 连接器 - 输入 - 附加依赖项 上添加C:\ceres\Library\ceres-debug.lib和C:\ceres\Library\libglog.lib。
  • 生成项目并开始执行,最终会在命令窗口中看到convergence,收敛,证明成功了。
    这里写图片描述

参考资源

  1. Ceres-Solver生成和安装http://www.ceres-solver.org/building.html#getting-the-source-code

猜你喜欢

转载自blog.csdn.net/yizhou2010/article/details/52596280