首页 Vins Mono 编译运行 Ubuntu20解决opencv与cv_bridge冲突问题
文章
取消

Vins Mono 编译运行 Ubuntu20解决opencv与cv_bridge冲突问题

配置环境

重新装ubuntu 20环境了 原本系统依赖装烂了

一些安装的依赖

1
2
3
opencv 3.4.16
ceres 1.14
Pangolin-0.6

换中科大源

1
2
3
4
5
6
7
8
9
10
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

装ROS

  1. 添加ROS软件源

    1
    
    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    
  2. 添加密钥

    1
    
    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    
  3. 安装

    1
    2
    
    sudo apt update
    sudo apt install ros-noetic-desktop-full
    
  4. 装点依赖

    1
    
    sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
    
  5. roscore 启动

    1
    
    roscore
    

    不出意外 有正常输出了

增大交换空间

后续如果要make,交换空间默认好像是2g,太小了,容易卡死,我这换成15g了

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 创建分区
sudo dd if=/dev/zero of=/swapfile bs=1G count=15   
sudo mkswap /swapfile
sudo swapon /swapfile

# free -m    #可以查看内存使用
# 创建完交换分区之后就可以继续编译
# 编译完之后记得用以下命令关闭交换分区
# 某次我就是忘了关闭交换分区,导致开不了机,然后切换 tty1 ,登进去之后关闭交换分区才可以进入桌面的。

#2. 关闭分区
sudo swapoff /swapfile
sudo rm /swapfile

dd: failed to open ‘/swapfile’: Text file busy 需要 执行 swapoff -a

安装 Eigen

这里装的是 3.2.10

直接cmake 然后 make install

加一步:

1
2
#移动头文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

很多程序会去找 /usr/local/include

额额 最好装 3.3.3 的 和vins-mono的一样

安装 ceres

下载 略 下的是 1.14

  1. 依赖
1
   sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

可以把glog 和metis 也装上 cmake报找不到 看着不舒服

sudo apt install libmetis-dev

git clone https://github.com/google/glog.git 编译安装一下即可

安装catkin

1
2
sudo apt install ros-noetic-catkin
sudo apt-get install cmake python3-catkin-pkg python3-empy python-nose python-setuptools libgtest-dev build-essential

安装opencv3

有个自带的opencv4.2,vins-mono用的是opencv3

下载的是 opencv 3.4.16

将其装到 /usr/local/opencv3

1
2
3
4
5
6
7
8
9
10
11
cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv3 \
\
-DWITH_CUDA=OFF \
\
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \ 
..

安装VINS-MONO的依赖

1
sudo apt-get install ros-noetic-cv-bridge ros-noetic-tf ros-noetic-message-filters ros-noetic-image-transport

解决Opencv和 cv_bridge的冲突

https://blog.csdn.net/m0_37993445/article/details/123075977 很不错

1
2
cd /opt/ros/noetic/share/cv_bridge/cmake/
sudo gedit cv_bridgeConfig.cmake

90多行 改:

1
2
3
4
5
6
#if(NOT "include;/usr/include/opencv4 " STREQUAL " ")
#  set(cv_bridge_INCLUDE_DIRS "")
#  set(_include_dirs "include;/usr/include/opencv4")
if(NOT "include;/usr/include/opencv4 " STREQUAL " ")
  set(cv_bridge_INCLUDE_DIRS "")
  set(_include_dirs "include;/usr/include/opencv3")

120行左右 注释掉 改成

1
cv_bridge;/usr/local/opencv3/lib/libopencv_calib3d.so;/usr/local/opencv3/lib/libopencv_features2d.so.3.4.16;/usr/local/opencv3/lib/libopencv_imgproc.so.3.4;/usr/local/opencv3/lib/libopencv_shape.so;/usr/local/opencv3/lib/libopencv_videoio.so.3.4.16;/usr/local/opencv3/lib/libopencv_calib3d.so.3.4;/usr/local/opencv3/lib/libopencv_flann.so;/usr/local/opencv3/lib/libopencv_imgproc.so.3.4.16;/usr/local/opencv3/lib/libopencv_shape.so.3.4;/usr/local/opencv3/lib/libopencv_video.so;/usr/local/opencv3/lib/libopencv_calib3d.so.3.4.16;/usr/local/opencv3/lib/libopencv_flann.so.3.4;/usr/local/opencv3/lib/libopencv_ml.so;/usr/local/opencv3/lib/libopencv_shape.so.3.4.16;/usr/local/opencv3/lib/libopencv_video.so.3.4;/usr/local/opencv3/lib/libopencv_core.so;/usr/local/opencv3/lib/libopencv_flann.so.3.4.16;/usr/local/opencv3/lib/libopencv_ml.so.3.4;/usr/local/opencv3/lib/libopencv_stitching.so;/usr/local/opencv3/lib/libopencv_video.so.3.4.16;/usr/local/opencv3/lib/libopencv_core.so.3.4;/usr/local/opencv3/lib/libopencv_highgui.so;/usr/local/opencv3/lib/libopencv_ml.so.3.4.16;/usr/local/opencv3/lib/libopencv_stitching.so.3.4;/usr/local/opencv3/lib/libopencv_videostab.so;/usr/local/opencv3/lib/libopencv_core.so.3.4.16;/usr/local/opencv3/lib/libopencv_highgui.so.3.4;/usr/local/opencv3/lib/libopencv_objdetect.so;/usr/local/opencv3/lib/libopencv_stitching.so.3.4.16;/usr/local/opencv3/lib/libopencv_videostab.so.3.4;/usr/local/opencv3/lib/libopencv_dnn.so;/usr/local/opencv3/lib/libopencv_highgui.so.3.4.16;/usr/local/opencv3/lib/libopencv_objdetect.so.3.4;/usr/local/opencv3/lib/libopencv_superres.so;/usr/local/opencv3/lib/libopencv_videostab.so.3.4.16;/usr/local/opencv3/lib/libopencv_dnn.so.3.4;/usr/local/opencv3/lib/libopencv_imgcodecs.so;/usr/local/opencv3/lib/libopencv_objdetect.so.3.4.16;/usr/local/opencv3/lib/libopencv_superres.so.3.4;/usr/local/opencv3/lib/libopencv_viz.so;/usr/local/opencv3/lib/libopencv_dnn.so;/usr/local/opencv3/lib/libopencv_dnn.so.3.4.16;/usr/local/opencv3/lib/libopencv_imgcodecs.so.3.4;/usr/local/opencv3/lib/libopencv_photo.so;/usr/local/opencv3/lib/libopencv_superres.so.3.4.16;/usr/local/opencv3/lib/libopencv_viz.so.3.4;/usr/local/opencv3/lib/libopencv_features2d.so;/usr/local/opencv3/lib/libopencv_imgcodecs.so.3.4.16;/usr/local/opencv3/lib/libopencv_photo.so.3.4;/usr/local/opencv3/lib/libopencv_videoio.so;/usr/local/opencv3/lib/libopencv_viz.so.3.4.16

现在调用的就是自己安装的3.4.16了

改成自己的安装路径

以后要用4的 要么重新弄个cv_bridge编译安装 网上有; 要么注释回去

好像 ubuntu18自带的是opencv3 可以去试试 ubutu18

最后剩下的cv_bridge链接问题

1
2
3
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.3.4
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4

没啥ying’x

编译运行

1
2
3
4
5
cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ../
catkin build
source ~/catkin_ws/devel/setup.bash
1
2
3
roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play MH_05_difficult.bag

分别运行

结果:

本文由作者按照 CC BY 4.0 进行授权

Ubuntu 多版本opencv切换

Orb_slam2_grid_navigation 编译运行