关于ROS安装VINS的文章,已经有很多,例如:
https://blog.csdn.net/CGJustDoIT/article/details/100055755
由于Eigen和Ceres版本更新,在安装默认版本之后(Ceres 2.0.0),会由于版本不匹配出现VINS编译错误。
error: ‘integer_sequence’ is not a member of ‘std‘错误
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:16: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:16: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:46: error: wrong number of template arguments (3, should be 1)
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
struct SumImpl;
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:49: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:70:16: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>>
原因是2.0.0版本的Ceres使用了C++14的新特性,与VINS不兼容,因此报错。
因此回退到Ceres1.14.0版本
删除之前的ceres-solver
sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
下载并解压ceres-solver-1.14.0。
下载地址:http://www.ceres-solver.org/
按流程安装编译ceres-solver,依旧报错:
/home/seivl/Download/ceres-solver-1.14.0/internal/ceres/gtest/gtest.h:10445:35: error: variable or field ‘it’ declared void
for (typename C::const_iterator it = container.begin();
^
internal/ceres/CMakeFiles/residual_block_test.dir/build.make:81: recipe for target 'internal/ceres/CMakeFiles/residual_block_test.dir/residual_block_test.cc.o' failed
问题原因是Eigen版本是3.3,ceres-solver-1.14依赖eigen3.2.9,需要同步回退到eigen3.2.9
下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page
按指引安装eigen3.2.9
再次编译和安装ceres-solver,编译成功。
再次catkin_make VINS工程,编译依然有问题:
Could not find a configuration file for package "Eigen3" that is compatible with requested version
VINS依赖了Eigen3.3,重新安装Eigen3.3即可
sudo apt-get install libeigen3-dev
再次catkin_make VINS工程,编译成功,大功告成。