IC-GVINS编译以及运行DEMO的一些踩坑日记
本文主要记录编译IC-GVINS的一些踩坑实录,首先这是项目原址i2Nav-WHU/IC-GVINS,论文在这里
1.环境配置
官方写的需要ROS、OpenCV、Ceres、glog
为了避免像我一样踩坑,建议大家按照OpenCV->ROS->glog->ceres的顺序来安装
1.OpenCV
首先是OpenCV,官方写的OpenCV版本支持>=3.2.0,我是用的3.4,之前用的 sudo apt install libopencv-dev 直接安装的最新版本,总是会莫名其妙的出现一些问题,所以建议直接源码编译,这是参考的文章Ubuntu安装OpenCV3
注意:安装ROS后会自带OpenCV4
2.ROS
ROS正常安装即可,网上很多教程,推荐这个,基本把各种你能遇到的报错都写出来了
3.glog
然后是glog,在glog上我遇到了一个大坑,让我明白了一个道理直接sudo apt-get install的都不可靠,要不报错还得自己编译,自己指定静态库和动态库
官方说的glog (>=0.4.0)即可,我用的是0.5.0
在ROS中使用glog时,需注意glog安装正确,否则虽然能够编译通过(colcon build),但实际运行时可能会报一些稀奇古怪的错误
我编译时一直遇到这个(直接用sudo apt install libgoogle-glog-dev安装的)
建议直接到 https://github.com/google/glog下载,然后
cd glog
mkdir build && cd build
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
注意:安装glog之后还需要安装gflags
4.Ceres Solver
Ceres依赖glog,虽然官方写的Ceres需要2.0.0和2.1.0,但我用2.1.0时最后roslaunch时出现了这个issue里的错误,所以直接用2.0.0编译靠谱
//ceres一些依赖
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
// https://github.com/ceres-solver/ceres-solver 里下载tar.gz
tar zxf ceres-solver-2.1.0.tar.gz
mkdir ceres-bin
cd ceres-bin
注意: 这里需要先在ceres的cmakelist里指定glog库(保证和后面ic-gvins编译的glog版本一致)
在cmakelist里找到glog,添加set(GLOG_DIRS PATH)
PATH可以通过lcoate glog来寻找
cmake ../ceres-solver-2.1.0
make -j8
sudo make install
2.编译IC-GVINS
这里直接搬运官方的
# Make workspace directory
mkdir ~/gvins_ws && cd ~/gvins_ws
mkdir src && cd src
# Clone the repository into src directory
git clone https://github.com/i2Nav-WHU/IC-GVINS.git
# To gvins_ws directory
cd ..
编译的过程需要注意观察glog版本和Ceres用的glog版本是否一致,以及是否有其他的报错信息
# Build the source code using catkin_make
# For gcc
catkin_make -j8 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
3.运行DEMO
数据集在官网上已经给了,可以直接下载那个urban38来测试
这里我又犯了一个错,困扰我了两天
第一个是没设置urban38里output PATH,另一个是没用urban38里YAML,而是config里的YAML,导致一直出现这个报错
设置数据集里output PATH
cd ~/gvins_ws &&mkdir output
sudo gedit 你的urban38路径/IC-GVINS/gvins.yaml
把output PATH设置为刚才创建的output文件夹
运行DEMO的过程同样搬运官方的
# Open a terminal and source the workspace environments
# For bash
source ~/gvins_ws/devel/setup.bash
# For zsh
# source ~/gvins_ws/devel/setup.zsh
# Run IC-GVINS node
# You should change the path in both the configuration file and command line
roslaunch ic_gvins ic_gvins.launch configfile:=path/urban38/IC-GVINS/gvins.yaml
# Open another terminal to play the ROS bag
rosbag play path/urban38/urban38.bag