【转载】VINS-Mono环境配置与测试笔记

时间:2024-03-29 07:46:06

VINS-Mono环境配置与测试笔记

标签: SLAM VINS-mono

本文转载自:
VINS-Mono环境配置与测试笔记
error:cv_bridge---opencv和ros连接起来的桥

1.简介

VINS-Mono和VINS-Mobile是香港科技大学沈劭劼团队开源的单目视觉惯导SLAM方案。是基于优化和滑动窗口的VIO,使用IMU预积分构建紧耦合框架。并且具备自动初始化,在线外参标定,重定位,闭环检测,以及全局位姿图优化功能。
本篇笔记是初配置VINS-Mono运行环境时的记录。

2.测试环境配置

2.1.配置目标

电脑 64位 8g内存 100g+1T硬盘
windows10+Ubuntu16.04双系统
Ubuntu 16.04, ROS Kinetic, OpenCV 3.3.1, Eigen 3.3.3,Ceres-Solver

2.2. Win10+Ubuntu16.04双系统

win10下安装Ubuntu16.04双系统

  1. 在Ubuntu官网上下载所需的iso镜像安装文件;
  2. 准备一个空U盘(2g以上),用Ultral软件试用版本制作安装盘(文件->打开iso镜像文件;启动->写入硬盘映像);
  3. 右键计算机->管理->磁盘管理,压缩出Ubuntu系统的安装区域(本次在机械硬盘上试用256G卷);
  4. 在安装盘插入的情况下重启计算机,使用开机向导(ASUS默认开机同时esc键进入),选择从U盘进入,开始安装Ubuntu;
  5. …(一系列不重要的步骤,可按默认选择)…选择自定义安装,开始划分磁盘分区;
  6. 本次分区配置如下:总256G,BIO主分区 32M,\boot主分区Et4 1G(听说更新内核后前引导文件不会自动删除,为省麻烦干脆放大一点),\home逻辑分区Et4 100G,swap交换分区 8G,\逻辑分区Et4 剩余所有内存,安装启动引导器的设备\boot(不知道为什么挂sda上报错);
  7. 安装完成,重启。

2.3. ROS Kinetic安装

ROS不能再详细的安装教程

  1. 版本选择
ROS发布日期 ROS版本 对应的Ubuntu版本
2016.3 ROS Kinetic Kame Ubuntu16.04/Ubuntu15.01
2015.3 ROS Jade Turtle Ubuntu15.04/Ubuntu LTS14.04
2014.7 ROS Indigo Lgloo Ubuntu14.04
  1. 安装步骤
    添加源:打开控制台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 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] 则安装成功

2.4. OpenCV 3.3.1

  1. 去opencv官网opencv下载地址下载对应版本的opencv安装包;
  2. 安装pip,安装numpy
sudo apt install python-pip
pip install numpy
  1. 安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libpng-dev libdc1394-22-dev
  1. 解压opencv安装包,进入安装文件目录
tar -xzvf opencv-3.3.1.tar.gz
cd opencv-3.3.1/
cd ..
mkdir build
cd build
cmake ..
make    # make -j4表示开4个线程来进行编译
make install
  1. 安装完成

2.5. Eigen安装

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

sudo apt-get install libeigen3-dev

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

sudo updatedb
locate eigen3

安装完成

2.6. Cere的安装

官网英文安装教程
可去GitHub上下载Ceres:Ceres下载地址
最新版本可从git库克隆:
以下安装步骤参照《SLAM十四讲》进行
安装依赖项:(若为Ubuntu14.04则应为libcxsparse3.1.2)

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
cmake ..
make
make install

3.测试

3.1.先决条件

ROS安装额外的ROS pacakge:

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

3.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
    source ~/catkin_ws/devel/setup.bash

3.3.公共数据集上的视觉 - 惯性测距和姿势图重用

测试包文件下载路径:EuRoC MAV Dataset
打开三个终端,分别启动vins_estimator,rviz和播放包文件。以MH_01为例:

    source ~/catkin_ws/devel/setup.bash #每个终端运行前都要加上这一句
    roslaunch vins_estimator euroc.launch 
    roslaunch vins_estimator vins_rviz.launch
    rosbag play ~/catkin_ws/Dates/MH_01_easy.bag

测试成功
【转载】VINS-Mono环境配置与测试笔记

4.后续问题

一天想重新运行一下程序发现以下错误:

$ roslaunch vins_estimator euroc.launch程序“roslaunch”尚未安装。 您可以使用以下命令安装:
sudo apt install python-roslaunch

按照提示安装报错:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
 python-roslaunch : 依赖: python-roslib 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

尝试使用roscore同样报错:

$ roscore
程序“roscore”尚未安装。 您可以使用以下命令安装:
sudo apt install python-roslaunch

于是动手检查ros安装情况

dpkg -l "ros*"

期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称           版本         体系结构:   描述
+++-==============-============-============-=================================
ii  ros-kinetic-ac 1.11.13-0xen amd64        The actionlib stack provides a st
ii  ros-kinetic-ac 1.12.6-0xeni amd64        actionlib_msgs defines the common
ii  ros-kinetic-ac 0.1.10-0xeni amd64        The actionlib_tutorials package
ii  ros-kinetic-an 1.9.11-0xeni amd64        This package provides a set of si
ii  ros-kinetic-bo 1.8.1-0xenia amd64        A bond allows two processes, A an
...#一堆安装项还在,似乎没什么大问题

尝试重新初始化ROS环境变量

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

加入后roscore运行正常:

ros_comm version 1.12.14
summry
PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14
NODES
auto-starting new master
process[master]: started with pid [10380]
ROS_MASTER_URI=http://wanghuidan-N501JW:11311/
setting /run_id to 2c90f326-d28a-11e8-a529-acfdce69c639
process[rosout-1]: started with pid [10393]
started core service [/rosout]

重新尝试运行程序:

$ source ~/catkin_ws/devel/setup.bash
$ roslaunch vins_estimator euroc.launch 
程序“roslaunch”尚未安装。 您可以使用以下命令安装:
sudo apt install python-roslaunch

继续报开始的错,而且ros命令继续失效。。。
【转载】VINS-Mono环境配置与测试笔记
兜兜转转两三次以后感觉是程序这边的问题,于是重新catkin_make程序

$ catkin_make
$ source ~/catkin_ws/devel/setup.bash

重新按3.3节跑测试 测试成功

5.openCV与cvbridge兼容问题

本部分转自:http://www.cnblogs.com/Jessica-jie/p/6959309.html

【转载】VINS-Mono环境配置与测试笔记

有多个warning出现。。。版本冲突

【转载】VINS-Mono环境配置与测试笔记

解决办法:

cv_bridge[opencv和ros连接起来的桥],默认依赖的opencv版本是2.4.8,如果安装了新的opencv版本,比如3.1.0,那么在编译cv_bridge时候会提示无法找到opencv 2.4.8.so的库。

1.必须要先把旧版本的cv_bridge卸载掉:

sudo apt-get remove ros-indigo-cv-bridge

2.然后下载新版本的cv_bridge:

git clone https://github.com/ros-perception/vision_opencv.git

3.修改cv_bridge中的cmakelists.txt

find_package(OpenCV 3.1 REQUIRED)  //将opencv的版本指定为3.1

4.将里面的cv_bridge包拿出来,放到工作空间中,重新编译:

catkin_make --pkg cv_bridge  //catkin_make --pkg[package包],单独编译工作空间catkin_ws中的包;catkin_make编译所有的

也可以通过cmake编译

cd ~/catkin_ws/src/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install

结束之后你就可以更改你的其他代码了,由于以前的cv_bridge不见了,所以要在其他代码的cmakelists.txt添加一句话,后面的路径是自己的路径,查找cv_bridge.config.cmake所在的路径即可

set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  //在find_package前面
5.python调用cv_bridge相关的工作
在~/.bashrc中添加
export LD_LIBRARY_PATH=/usr/local/lib/