最近在学习vins-mono,理论+源码配合着来理解更透彻,编译源码时还是遇到不少问题的,记录分享一下:
1、源码下载
mkdir -p vins_ws/src
cd vins_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
2、编译问题
(1)Ceres库问题
catkin_make编译报错:
没找到Ceres库,github源码库建议安装1.14.0版本:
先去官网下载并解压:
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar xvf ceres-solver-1.14.0.tar.gz
安装依赖项:
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev
sudo apt-get install libgoogle-glog-dev libgtest-dev
再正常安装:
cd ceres-solver-1.14.0
mkdir build && cd build
cmake ..
make -j2
sudo make install
但执行cmake后报错了:
显示glog版本不够,之前是用apt-get install安装的,Ubuntu20.04安装的是0.4.0,因此需要删掉重新下载最新源码安装:
# 先移除老版本相关库
sudo rm -rf /usr/local/lib/cmake/glog
sudo rm -f /usr/local/lib/libglog*
# 下载新版本源码安装
git clone https://github.com/google/glog
cd glog
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make
sudo make install
再次回到ceres-solver执行cmake ..就没有问题了,但下一步make又出问题了=.=
好像是gtest库问题,用deepseek查了下,最方便的解决方法:
cmake ..后加配置项-DBUILD_TESTING=OFF(不影响正常功能),再次make就没问题啦
切忌!!!
不建议用推荐的另一种删除老版本再安装最新源码的方法!!!
sudo apt-get remove --purge libgtest-dev 会把好多有用的依赖项删掉,影响系统正常使用!
我个吐血,光恢复那些安装包就又花了好多时间(哭。。。),那又是另一个问题了,等发下一篇文章说怎么解决。
(2)std相关错误
再次catkin_make又报错
这个主要是c++版本不兼容导致的,把项目工程中所有CMakeLists.txt中配置为c++11的地方都改成c++14即可:
再次编译就成功啦:
2025.03.13新补充
之前虽然顺利编译过了,但跑测时发现有节点(feature_tracker和pose_graph)会异常死掉:
很奇怪,回头再看catkin_make的编译信息,发现里面有不少如下warning:
差了下说是电脑里有2个opencv版本(3.4和4.2)导致编译器混乱了,最简单的解决办法就是在项目所有CMakeLists.txt中原来都是find_package(OpenCV REQUIRED)的地方
统一改为指定openCV版本(像我这就是4.2):
再次编译就发现这类warning没有了,跑测也没有问题了
所以说虽然平时不怎么注意,但有些warning还是要关注下。。。