1 简介
最近在看GNSS/Vision/IMU组合导航的相关内容,其中GVINS是一个跳不过的项目,而且经过一番调研之后发现,目前开源的GNSS/Vision/IMU紧组合系统似乎还只有GVINS这一家,所以想要对这个项目进行学习,并在此基础上做一些改进。由于GVINS是基于ROS Kinetic开发的,而我的电脑安装的是ROS Noetic,安装过程中存在一些兼容性问题,在此记录一下。
2 安装问题记录
进入GVINS项目之后先将项目下载下来,如果基于ROS Noetic一点不改直接编译的话肯定是会报错的,接下来对遇到的问题进行记录。
ROS版本查询方式:
1 | ❯ echo $ROS_DISTRO |
2.1 问题一:ROS版本适配
该部分内容参考该文章。
2.1.1 C++编译版本
GVINS采用的Ceres是1.12.0版本的,是用C++11编译的,而Ceres2.0.0以上版本是用C++14编译的,所以需要将GVINS中所有CMakeLists.txt改为C++14编译:
1 | set(CMAKE_CXX_FLAGS "-std=c++14") |
2.1.2 适配OpenCV4
ROS noetic版本中的OpenCV4.2与GVINS中需要使用的OpenCV3冲突,所以需要修改GVINS代码兼容openCV4:
在头文件GVINS/camera_model/include/camodocal/chessboard/Chessboard.h中添加:
1
2在头文件GVINS/camera_model/include/camodocal/calib/CameraCalibration.h中添加:
1
2
2.2 问题二:em
在处理上个问题之后,编译过程出现报错:
1 | import em |
第一次遇到这个问题之后,尝试直接安装em:
1 | pip install empy |
重新编译时,继续报错:
1 | AttributeError:module ‘em‘ has no attribute ‘RAW_OPT‘ |
查询之后发现是empy版本不匹配,在4.0版本上可能会出现这个错误(参考链接)。相对应的解决方案就是卸载当前版本、安装4.0以下的版本:
1 | pip uninstall empy |
然后重新编译这部分就没有问题了。
2.3 问题三:shared_mutex
解决上个问题后出现了新的报错:
1 | error: ‘shared_mutex’ in namespace ‘std’ does not name a type |
该问题的解决方案参考该文章,解决方法为修改下面的文件:
1 | vi /usr/include/log4cxx/boost-std-configuration.h |
修改之前的代码:
1 | define STD_SHARED_MUTEX_FOUND 1 |
修改之后的代码:
1 | define STD_SHARED_MUTEX_FOUND 0 |
然后,问题就解决了(很神奇)…
3 VINS-Fusion安装过程记录
由于GVINS、VINS-Fusion这两个工程极其相似,遇到的问题也是大同小异,所以就在一起记录了。此处主要参考该文章。
首先还是要对C++版本进行修改,将-std=c++11修改为-std=c++14,此处不再赘述,可参考2.1.1小节。
然后还是适配OpenCV4的问题:
1 | 1.camera_model 头文件中 Chessboard.h添加 |
最后,在编译过程中由于OpenCV版本问题,还会出现一些小错误,如:
1 | error: ‘CV_GRAY2BGR’ was not declared in this scope |
可以将其修改为:cv::COLOR_GRAY2BGR。其他类似情况不再赘述。