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编译运行,会涉及一些错误,记录个人的一些解决方案以及经验。

image-20220522132936409

贴一张我“师兄”的回答,可是我就喜欢给自己找麻烦,因为我真的不想为了运行一个数据集重装系统,太费时费力而且损失巨大,当然,你如果系统啥都没有,当我没说,我依稀记得当初装各种各样的环境崩溃的样子,尤其是装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,这就是冲突所在。

Ceres-Solver网站

Eigen 3.3.8

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

image-20220522133842189

然后重新编译运行即可。

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

image-20220522135758327

克隆到本地:

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

image-20220522140034382

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

意思是,有两个节点死掉了......

image-20220522134853518

没必要吧,兄弟,不用重装系统啊!

检查你的选用的方案漏没漏?


另外,在执行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

运行结果

image-20220522141229347

image-20220522141346992

参考文献

Matebook14 Ubuntu20.04 ROS-Noetic运行VINS-MONO

解决cv_bridge和opencv之间版本匹配问题

Ubuntu20.04下成功运行VINS-mono

ROS错误记录

🧐 本文作者:
😉 本文链接:https://lukeyalvin.site/archives/54.html
😊 版权说明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
最后修改:2022 年 09 月 02 日
赏杯咖啡