Ceres在SLAM优化中常常会用到,简单记录一下关于Ceres的一些问题
1、Ceres安装
1.1、安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
1.2、下载Ceres
Ceres的下载地址为:
https://github.com/ceres-solver/ceres-solver/tags
在这里选择需要的版本,比如1.14.0,然后会跳出source code的下载选项,下载需要的代码。下载后的代码一般在电脑中的download下,进入该文件夹,找到对应文件,选择extract here解压。然后将解压后的文件夹移动到合适的地方(一般解压完的文件夹会带版本号,可以rename掉)
1.3、编译Ceres
编译过程很简单,进入文件夹后打开终端输入下述指令:
mkdir build
cd build
cmake ..
make -j4
sudo make install
一般没有问题的话就可以正常编译完成了。
1.4、版本查看
ceres的源码文件夹下有一个package.xml文件,其中注明了当前ceres的版本,如图
2、Ceres卸载
Ceres只有一个库文件在"/usr/local/lib/“中,并且所有的头文件都在”/usr/local/include/ceres/"中,卸载就是很简单的两步:
sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
3、Ceres使用
在编写使用到Ceres的工程时CMakeLists.txt中应该有
find_package(Ceres REQUIRED)
include_directories(${Ceres_INCLUDE_DIRS})
target_link_libraries(可执行文件名 ${CERES_LIBRARIES})
否则可能会出现一些奇奇怪怪的错误。
4、Ceres版本问题
在一些项目文件中编译是会遇到下述报错:
integer_sequence’ is not a member of ‘std’
这是由于新版本的ceres对C++的版本有要求。根据网上的教程,遇到这个问题时可以修改项目文件中的CMAKEList,将
set(CMAKE_CXX_FLAGS "-std=c++11")
改成
set(CMAKE_CXX_STANDARD 14)
或者
set( CMAKE_CXX_FLAGS "-std=c++14 -O3" )
不过这个没有试过,不知道具体情况。
另外一种简单粗暴的方式就是卸载高版本的安装低版本的,之前安装2.0.0报了这个错误后按照章节2中卸载方式卸载后重新安装1.14.0的可以正常使用。
参考:
https://blog.csdn.net/qq_41265365/article/details/123795075