VINS-Mono开源代码下载地址位于:https://github.com/HKUST-Aerial-Robotics/VINS-Mono,Ubuntu 16.04, ROS Kinetic, OpenCV 3.3.1, Eigen 3.3.3等,这里我利用Ubuntu 20.04编译运行,会涉及一些错误,记录个人的一些解决方案以及经验。
贴一张我“师兄”的回答,可是我就喜欢给自己找麻烦,因为我真的不想为了运行一个数据集重装系统,太费时费力而且损失巨大,当然,你如果系统啥都没有,当我没说,我依稀记得当初装各种各样的环境崩溃的样子,尤其是装ROS 期间遇到的墙的问题。
能装吗?能!麻烦吗?并不麻烦!
基本环境
比如Eigen,我这里下载的是3.3.8,如果你是3.3.7也没关系,主要是Ceres 这里选择1.2的版本,因为代码中CmakeLists 都是用 C++11编译的,最新版的Ceres-solver2.0.0采用的是C++14编译,因此如果你是2.0以上的版本,将所有文件夹下的CMakeList文件全部修改为C++14编译即可
创建工作空间
创建一个工作空间:
mkdir -p VINS_WS/src
cd src
catkin_init_workspace
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ../
catkin_make
当然,如果一切顺利本文就结束了。但是由于我使用的是 Ubuntu 20.04 对应的 ROS 版本是 noetic ,noetic 本身的就带有 opencv4 的版本,而VINS-Mono 的 openCV 的依赖是OpenCV 3.3.1,这就是冲突所在。
OpenCV冲突问题
你可能会遇到:
error: ‘CV_BGR2GRAY’ was not declared in this scope
error: ‘CV_FONT_HERSHEY_SIMPLEX’ was not declared in this scope
这些都是版本冲突的问题,你可能也搜索到了一些解决方案,但是基本上,方向错了,治标不治本。
例如:在报错的地方加入头文件,指定引用的OpenCV版本等,这里不提了。
下面提出两种解决方案,本人实际测试的第二种,第一种盲猜可以。
方案一:把vins-mono代码全部改成opencv4的版本
将源代码下的所有CMakeList.txt中的find_package(OpenCV REQUIRED),
改成find_package(OpenCV 4 REQUIRED)
主要是下面几个文件夹下的CMakeList.txt
然后重新编译运行即可。
catkin_make
按照论文步骤,打开三个窗口,分别执行三个命令:
#窗口1:
source ./devel/setup.bash
roslaunch vins_estimator euroc.launch
#窗口2:
source ./devel/setup.bash
roslaunch vins_estimator vins_rviz.launch
#窗口3:
rosbag play YOUR_PATH_TO_DATASET/MH_01_easy.bag
如果你运行成功了,那就结束了。
方案二:cv_bridge改成opencv3版本
1.卸载原来版本的cv_bridge
sudo apt-get remove ros-melodic-cv-bridge
2.下载新版本cv_bridge
网址:https://link.zhihu.com/?target=https%3A//github.com/ros-perception/vision_opencv
克隆到本地:
git clone https://github.com/ros-perception/vision_opencv.git
cd cv_bridge
3.修改cv_bridge中的CMakeLists.txt
find_package(OpenCV 3.4.10 REQUIRED) //改成你安装的opencv的版本;
查看自己opencv版本的命令:opencv_version
4.cmake单独编译cv_bridge
在cv_bridge文件夹下,
mkdir build
cd build
cmake ..
make
sudo make install
5.在开源代码需要的cmaklist.txt中添加cv_bridge的cmake路径
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) #在find_package前面
然后重新编译运行源代码即可!
其他错误
如果遇到如下错误,仍然是你的CV 版本不匹配导致的!
比如在执行 roslaunch vins_estimator euroc.launch
报错:
[feature_tracker-2] process has died [pid 18837, exit code -11, cmd/home/whd/catkin_ws/devel/lib/feature_tracker/feature_tracker __name:=feature_tracker _log:=/home/whd/.ros/log/580e83ec-bfee-11ec-9f41-c979c54caf40/feature_tracker-2.log].
log file:/home/whd/.ros/log/580e83ec-bfee-11ec-9f41-c979c54caf40/feature_tracker-2*.log
[pose_graph-4] process has died [pid 18839, exit code -11, cmd/home/whd/catkin_ws/devel/lib/pose_graph/pose_graph_name:=pose_graph__log:=/home/whd/.ros/log/580e83ec-bfee-11ec-9f41-c979c54caf40/pose_graph-4.log].
log file: /home/whd/.ros/log/580e83ec-bfee-11ec-9f41-c979c54caf40/pose_graph-4*.log
意思是,有两个节点死掉了......
没必要吧,兄弟,不用重装系统啊!
检查你的选用的方案漏没漏?
另外,在执行rviz 时我还遇到了如下错误:
[Error] Unable to create the rendering window after 100 tries.
这是由于显卡低造成 rviz 闪退无法正常启动,在 ROS 官网搜索,确定是 OpenGL 或其它的问题,评论推荐重新安装显卡驱动。但在 CSDN 上无意间找到了一个解决方案,能够完美解决该问题。解决方法:
依次输入三行指令安装更新最好重启一下。
sudo add-apt-repository ppa:ubuntu-x-swat/updates
sudo apt-get update
sudo apt-get dist-upgrade