cere学习一(安装)

cere学习一(安装)官网链接 安装 安装依赖项 sudo apt get install cmake sudo apt get install libgoogle glog dev libgflags dev sudo apt get install libatlas base dev sudo apt get install libeigen3 dev

大家好,我是讯享网,很高兴认识大家。

官网链接

安装

  1. 安装依赖项
 sudo apt-get install cmake sudo apt-get install libgoogle-glog-dev libgflags-dev sudo apt-get install libatlas-base-dev sudo apt-get install libeigen3-dev sudo apt-get install libsuitesparse-dev 

讯享网
  1. 下载安装
讯享网git clone https://github.com/ceres-solver/ceres-solver.git mkdir ceres-bin cd ceres-bin cmake .. sudo make install 
  1. cmakelist.txt配置

方法一:

add_compile_options(-std=c++14) find_package(Ceres REQUIRED) include_directories(${ 
   Ceres_INCLUDE_DIRS}) add_executable(ceres_1 ${ 
   ceres_1_src}) target_link_libraries(ceres_1 ${ 
   Ceres_INCLUDE_DIRS}) 

方法2:
如果使用方式一配置编译时出现如下错误:
在这里插入图片描述
讯享网
使用如下方式配置:

讯享网add_compile_options(-std=c++14) #指定库路径 file(GLOB_RECURSE Opencv2.7_LIB "/usr/lib/python2.7/config-x86_64-linux-gnu/*.so") file(GLOB_RECURSE Creres_LIB "/usr/local/lib/libceres.a") file(GLOB_RECURSE cholmod_LIB "/usr/lib/x86_64-linux-gnu/libcholmod.so") file(GLOB_RECURSE lapack_LIB "/usr/lib/lapack/liblapack.so") file(GLOB_RECURSE f77blas_LIB "/usr/lib/libf77blas.so") file(GLOB_RECURSE cxsparse_LIB "/usr/lib/x86_64-linux-gnu/libcxsparse.so") file(GLOB_RECURSE glog_LIB "/usr/lib/x86_64-linux-gnu/libglog.so") file(GLOB_RECURSE pthread_LIB "/usr/lib/x86_64-linux-gnu/libpthread.so") #指定头文件路径 set(Opencv2.7_INLCUDE_DIRS "/usr/include/python2.7") set(Creres_INLCUDE_DIRS "/usr/local/include/ceres") set(suitespars_INLCUDE_DIRS "/usr/include/suitespars") set(lapack_INLCUDE_DIRS "/usr/include/eigen3/Eigen/src/misc") set(glog_INLCUDE_DIRS "/usr/include/glog") set(pthread_INLCUDE_DIRS "/usr/include/boost/thread") #添加头文件到工程 include_directories(include ${ 
   Opencv2.7_INLCUDE_DIRS} ) include_directories(include ${ 
   Creres_INLCUDE_DIRS} ) include_directories(include ${ 
   suitespars_INLCUDE_DIRS} ) include_directories(include ${ 
   lapack_INLCUDE_DIRS} ) include_directories(include ${ 
   glog_INLCUDE_DIRS} ) include_directories(include ${ 
   pthread_INLCUDE_DIRS} ) # include_directories("/usr/local/include/eigen3") AUX_SOURCE_DIRECTORY(${ 
   PROJECT_SOURCE_DIR}/1 ceres_1_src) # Declare the executable target built from your sources add_executable(ceres_1 ${ 
   ceres_1_src}) # Link your application with OpenCV libraries # target_link_libraries(undistort ${ 
   Pangolin_LIBRARIES}) target_link_libraries(ceres_1 ${ 
   Creres_LIB} ${ 
   cholmod_LIB} ${ 
   lapack_LIB} ${ 
   f77blas_LIB} ${ 
   cxsparse_LIB} ${ 
   pthread_LIB} ${ 
   glog_LIB} ) 

一个例子

一个目标函数如下
在这里插入图片描述

 #include "/usr/local/include/ceres/ceres.h" #include <glog/logging.h> using ceres::AutoDiffCostFunction; using ceres::CostFunction; using ceres::Problem; using ceres::Solve; using ceres::Solver; using namespace ceres; //定义代价函数 struct CostFunctor { 
    template <typename T> bool operator()(const T* x, T* residual) const { 
    residual[0] = 10.0 - x[0]; return true; } }; int main(int argc, char** argv) { 
    //初始画参数 double x = 0.5; const double initial_x = x; //构建问题 Problem problem; //设置残差 CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor); //AutoDiffCostFunction 求导 //CostFunctor 代价函数 //1 惨差的维数 //1 输入数据的维数 problem.AddResidualBlock(cost_function, NULL, &x); //目标函数 //cost_function:代价函数 //NULL:核函数,这里不使用用 //x:待优化参数 //进行求解 Solver::Options options;//建议一个求解问题类 options.linear_solver_type=ceres::DENSE_QR;//配置增量方程的解法 options.minimizer_progress_to_stdout = true;//是否在打印输出 Solver::Summary summary;//优化信息 Solve(options, &problem, &summary);//求解 std::cout << summary.BriefReport() << "\n";//输出优化的简要信息 std::cout << "x : " << initial_x << " -> " << x << "\n";//输出优化结果 return 0; } 
  1. 步骤1:定义代价函数:
讯享网//定义代价函数 struct CostFunctor{ 
    template <typename T>//模板类T bool operator()(const T* x,T* residual) const { 
    residual[0]=10.0-x[0]; return true; } }; 
  1. 构建问题
 //构建问题 Problem problem; //设置残差 CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor); //AutoDiffCostFunction 求导 //CostFunctor 代价函数 //1 输入数据的个数 //1 每个输入数据的维数 problem.AddResidualBlock(cost_function, NULL, &x); //目标函数 //cost_function:代价函数 //NULL:核函数,这里不使用用 

问题求解

讯享网 //进行求解 Solver::Options options;//建议一个求解问题类 options.linear_solver_type=ceres::DENSE_QR;//配置增量方程的解法 options.minimizer_progress_to_stdout = true;//是否在打印输出 Solver::Summary summary;//优化信息 Solve(options, &problem, &summary);//求解 
小讯
上一篇 2025-02-08 12:31
下一篇 2025-03-29 20:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/40874.html