一周小结(七)——从零开始配置VINS-Mono运行环境

    知之盛者,莫大于成身,成身莫大于学。——《吕氏春秋》

    不知不觉都快要九月份了,将近三个月没写博客了,赶紧来补一篇,记录分享一下配置VINS-Mono编译环境的过程。

一、简介

    VINS-Mono是单目视觉惯性系统的实时SLAM框架。 它使用基于优化的滑动窗口方式来提供高精度的视觉惯性测距。VINS-Mono主要用于自主无人机的状态估计和反馈控制,但它也能够为AR应用提供精确的定位。 此代码在Linux上运行,并与ROS完全集成。

二、配置目标

    完全按照Github上给出的环境:Windows 10 + Ubuntu 16.04双系统,ROS Kinetic, OpenCV 3.3.1, Eigen 3.3.3,Ceres-Solver

三、Windows 10 + Ubuntu 16.04双系统

  1. 在Ubuntu官网或者https://pan.baidu.com/s/1Qs1qnIq040GCBH09C5bBtA上下载所需的ISO安装文件
  2. 下载软碟通试用版,并制作安装盘(文件->打开,选择iso镜像文件;启动->写入硬盘映像)
  3. 右键计算机->管理->磁盘管理,压缩出Ubuntu系统的安装区域(本次在机械硬盘上试用256G卷)
  4. 进入BIOS(大多数电脑是按F2进入BIOS,Lenovo的笔记本是按Fn+F2)。进入BIOS以后,我们就来设置一下U盘启动了,我们进入Boot,如果Boot Mode是UEFI 我们就将下面的Secure Boot 设置Disable。如果Boot Mode是Legacy 那么我们就跳过这步。 如果电脑发现不能将Secure Boot 设置成Disable,就得去Security里面设置一下 Supervisor password就行了。
  5. 在安装盘插入的情况下重启计算机,使用开机向导(外星人出现外星人头时按F12进入),选择从U盘进入,开始安装Ubuntu
  6. 第一个界面语言选择英文,第二个界面连接相应的网络(最好选择连接,以免到后来连不上还是有点小麻烦的),第三个界面第二个打钩选择安装第三方软件,第四个界面安装类型一定要选择其他选项!
  7. 设置分区。本次分区配置如下:总256G,BIO主分区 32M,\boot主分区Et4 1G,\home逻辑分区Et4 100G,swap交换分区 8G,\逻辑分区Et4 剩余所有内存,安装启动引导器的设备\boot,如果报错的话就给就给BIOS分 50M
  8. 之后的键盘布局选择汉语
  9. 进行安装,重启

四、ROS Kinetic安装

添加源:打开控制台Ctrl+Alt+T输入以下命令

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

或者使用清华镜像:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

设置密钥:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

确保系统软件处于最新版:

sudo apt-get update

安装全功能版ROS:

sudo apt-get install ros-kinetic-desktop-full

查看可用的包:

apt-cache search ros-kinetic

初始化ROS:

sudo rosdep init
rosdep update

初始化环境变量:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

安装常用插件:

sudo apt-get install python-rosinstall

测试ROS,启动ROS环境:

roscore

显示started core service [/rosout] 则安装成功。

五、安装OpenCV 3.3.1

去opencv官网opencv下载地址下载对应版本的opencv安装包

安装依赖项

sudo apt update

sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev

sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev

解压opencv安装包,进入安装文件目录

tar -xzvf opencv-3.3.1.tar.gz
cd opencv-3.3.1/
cd ..
mkdir build
cd build
cmake ..
make -j8    # make -j8表示开8个线程来进行编译
sudo make install

安装完成

六、安装Eigen 3.3.3

未安装Eigen的PC可以输入以下命令进行安装:

sudo apt-get install libeigen3-dev

可输入以下命令寻找安装位置:

sudo updatedb
locate eigen3

安装完成

七、安装Ceres-Solver

官网英文安装教程

克隆安装包:

git clone https://ceres-solver.googlesource.com/ceres-solver

安装依赖项:

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.4 libgflags-dev libgoogle-glog-dev libgtest-dev

以下安装参照安装教程进行

安装依赖项:

#CMake
sudo apt-get install cmake
#google-glog + gflags
sudo apt-get install libgoogle-glog-dev
#BLAS&LAPACK
sudo apt-get install libatlas-base-dev
#Eigen3
sudo apt-get install libeigen3-dev
#SuiteSparse和CXSparse(可选)
# - 如果要将Ceres构建为* static *库(默认),您可以在主Ubuntu软件包#storage中使用SuiteSparse软件包:
sudo apt-get install libsuitesparse-dev
# - 但是,如果要将Ceres构建为* shared *库,则必须添加以下PPA:
sudo add-apt-repository ppa:bzindovic / suitesparse-bugfix-1319687
sudo apt-get update
sudo apt-get install libsuitesparse-dev

解压Cere安装包,进入安装目录下:

tar zxf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
make
sudo make install

八、测试

1、测试准备

ROS安装额外的ROS pacakge:

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

 下载测试数据集:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

2、在ROS上构建VINS-Mono

在ROS上构建VINS-Mono,克隆存储库和catkin_make:

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ../
catkin_make

3、测试

打开三个终端,分别启动vins_estimator,rviz和播放包文件。以MH_01为例:

3.1 启动vins_estimator

source ~/catkin_ws/devel/setup.bash
roslaunch vins_estimator euroc.launch 

3.2 启动rviz

source ~/catkin_ws/devel/setup.bash
roslaunch vins_estimator vins_rviz.launch

3.3 启动播放包文件

注意测试数据的路径

source ~/catkin_ws/devel/setup.bash
rosbag play ~/catkin_ws/Dataset/MH_01_easy.bag

测试成功!

一周小结(七)——从零开始配置VINS-Mono运行环境_第1张图片

九、CLion编译

    此时如果在CLion上对代码进行编译,不出意外的话会报下面的错误

CMake Error at /usr/local/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "roscpp" with any
  of the following names:

    roscppConfig.cmake
    roscpp-config.cmake

  Add the installation prefix of "roscpp" to CMAKE_PREFIX_PATH or set
  "roscpp_DIR" to a directory containing one of the above files.  If "roscpp"
  provides a separate development package or SDK, be sure it has been
  installed.

    报错信息中给出了两个解决方法,我一开始采用的是第一种,添加CMAKE_PREFIX_PATH环境变量,但是并不奏效;于是换第二种方式在camera_model的CMakeList.txt中添加”set(roscpp_DIR "/opt/ros/kinetic/share/roscpp/cmake")”即可,当然了,要写在报错位置前面才行。

    补充,会有一些文件找不到,需要在CMake文件中添加:

set(roscpp_DIR "/opt/ros/kinetic/share/roscpp/cmake")
set(message_runtime_DIR "/opt/ros/kinetic/share/message_runtime/cmake")
set(roscpp_serialization_DIR "/opt/ros/kinetic/share/roscpp_serialization/cmake")
set(roscpp_traits_DIR "/opt/ros/kinetic/share/roscpp_traits/cmake")
set(rostime_DIR "/opt/ros/kinetic/share/rostime/cmake")
set(rosconsole_DIR "/opt/ros/kinetic/share/rosconsole/cmake")
set(rosgraph_msgs_DIR "/opt/ros/kinetic/share/rosgraph_msgs/cmake")
set(std_msgs_DIR "/opt/ros/kinetic/share/std_msgs/cmake")
set(xmlrpcpp_DIR "/opt/ros/kinetic/share/xmlrpcpp/cmake")
set(sensor_msgs_DIR "/opt/ros/kinetic/share/sensor_msgs/cmake")
set(geometry_msgs_DIR "/opt/ros/kinetic/share/geometry_msgs/cmake")
set(cv_bridge_DIR "/opt/ros/kinetic/share/cv_bridge/cmake")
set(camera_model_DIR "/home/dong/catkin_ws/devel/share/camera_model/cmake")

    好了,就写到这里吧,希望下次写博客不会太久远!

十、参考

  1. VINS-Mono环境配置与测试笔记:https://blog.csdn.net/guaijiaodie2064/article/details/83041721
  2. win10下安装Ubuntu16.04双系统:https://blog.csdn.net/s717597589/article/details/79117112
  3. ROS 不能再详细的安装教程:https://blog.csdn.net/virtue333/article/details/52820407
  4. 使用source命令的时候提示source: command not found错误解决:https://blog.csdn.net/KayChanGEEK/article/details/78534415
  5. VINS-Mono代码Github:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
  6. 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator:https://blog.csdn.net/qq_41839222/article/details/85683373

你可能感兴趣的:(VINS)