ceres的学习笔记

刚刚在项目中使用的到了ceres,从完全不了解、到安装使用解决问题,花费了整整一个周的时间。所以使用的时候过程中踩了不少的坑,所以特别想记录下来。

ceres解决的问题

Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。ceres的官网比较详细的使用教程,内容还是挺丰富。
ceres主要用于解决如下的非线性最小二乘的问题
在这里插入图片描述ρi(‖‖fi(xi1,…,xik)‖‖2) 这一部分被成为残差块(ResidualBlock),其中的fi(⋅) 叫做代价函数(CostFunction)。代价函数依赖于一系列参数[xi1,…,xik] ,这一系列参数(均为标量)称为参数块(ParameterBlock)。lj 和 uj 分别是变量块 xj 的上下边界。

安装

ceres可以通过命令行直接安装,也可以下载源码编译静态库使用。首先我们需要解决依赖的问题

依赖

ceres依赖挺多开源库的,但并不是必须的,可以在构建时关闭相应的依赖。

  • Eigen是必须的。
  • glog推荐使用,内部也提供了替代glog的minilog,但是性能赶不上glog,除了在android平台,其他平台建议使用glog。可以不用使用。
  • gflags在测试和示例中有使用到。可以不用使用。
  • SuiteSparse在解决大型稀疏线性系统所需。推荐使用。SuiteSparse需要BLAS和LAPACK。(我第一次编译的时候没有添加,为了加快求解的速度,不能不重新编译一下)
  • CXSparse 与SuiteSparse类似,但更简单,更慢。 CXSparse不依赖于LAPACK和BLAS。 这使得构建过程更简单,二进制文件更小。可以不用使用。
命令行安装

安装依赖

$ sudo apt-get install cmake
# google-glog + gflags
$ sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
$ sudo apt-get install libatlas-base-dev
# Eigen3
$ sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
$ sudo apt-get install libsuitesparse-dev
# - However, if you want to build Ceres as a *shared* library, you must
#   add the following PPA:
$ sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
$ sudo apt-get update
$ sudo apt-get install libsuitesparse-dev
下载源码编译ceres静态库

编译ceres依赖eigen和glog,因此需要先拉取eigen和glog。

# 拉取glog
$ git clone https://github.com/google/glog.git
# 修改option
# option (WITH_GFLAGS "Use gflags" OFF)
$ vi CMakeLists.txt
# 开始编译
$ cmake 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值