ORB-SLAM2算法安装全解析--Linux系统安装、算法编译、相机标定

硕士毕业论文使用ORB-SLAM2算法进行水下机器人定位,对于ORB-SLAM2算法编译网络上也有许多教程,但是均不太全面,我这里根据自己研究整理了一份较为全面的安装教程。包括Linux系统安装、算法编译、相机标定三个方面。

  •  Linux系统安装

 Linux系统使用的是Ubuntu 14.04,当然也可以使用Ubuntu16.04,根据自己的经验来看,14.04编译算法问题更少,因此建议使用14.04系统。在Windows中使用虚拟机安装Ubuntu可能会有很多问题,比如无法使用网络链接、屏幕分辨率无法调整、内存不足等问题,建议使用双系统。下面是制作Windows和Linux双系统的步骤。

  1. 下载Ubuntu14.04,网址为:http://releases.ubuntu.com/14.04。当然,也可以在国内开源软件源下载,比如清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/14.04
  2. 下载U盘制作工具Rufus,网址为:http://rufus.ie
  3. 利用Rufus制作安装盘,如图;
    Rufus系统制作界面

    注意:装双系统要先安装Windows再安装Linux,否则Windows会将Linux系统启动项删除。如果不想安装双系统可以将Linux安装在U盘中,不过这个我没有试过,应该是可行的。

  4. 在计算机基本输入输出系统BIOS中,设置U盘启动或在启动项中选择U盘启动;

  5. 安装Ubuntu14.04,我这里只给出各模块需要的储存空间,虽然Linux运行不需要多大空间,但如果长期使用,尽可能给出一块50G左右的储存空间,后期不够用重装系统的话也影响研究进度。以50G为例,/boot,启动分区,200MB即可;SWAP,交换空间,电脑内存大于4G与内存大小一致,小于4G为两倍内存;/home,安装算法及依赖,桌面文件都在这里,20GB;/,主目录,Linux系统,剩下的空间。

双系统安装我写的是一些经验步骤,如果需要详细的步骤,可以参考https://www.cnblogs.com/Duane/p/5424218.html

  • 算法编译 

准备工作,算法编译前你可能需要掌握一些常见的Linux命令,如果对Linux系统熟悉可跳过;

在Ubuntu14.04中将终端放入右键菜单
sudo apt-get install nautilus-open-terminal;
获取root权限
sudo passwd root;
su;
进入目录
cd ***;
新建文件夹
mkdir build;
查看隐藏文件夹
Ctrl + H;
打开终端
Ctrl + ALT + T;
多开标签
Ctrl + Shift + T;
查看软件版本
* -version;
卸载软件
sudo apt-get remove *.

 编译过程

1.安装ROS Indigo,官方教程网址为:http://wiki.ros.org/cn/indigo/Installation/Ubuntu

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 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-indigo-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
source /opt/ros/indigo/setup.bash

2.配置变量环境;

mkdir -p ~/catkin_ws/src   #创建环境
cd ~/catkin_ws/src
cd ~/catkin_ws/  #编译
catkin_make

 3.主文件夹Ctrl+h找到.bashrc,添加

source /opt/ros/indigo/setup.bash`
source ~/catkin_ws/devel/setup.bash`

4.安装其他依赖程序;

sudo apt-get install gcc g++
sudo apt-get install libglew-dev   #安装Glew
sudo apt-get install cmake         #安装CMake
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev  #安装Boost
sudo apt-get install libpython2.7-dev  #安装Python2'Python3
sudo apt-get install libeigen3-dev  #安装Eigen
sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev  #BLAS and LAPACK

 5.下载、编译、安装Pangolin;

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

 6.安装OpenCV-2.4.9,OpenCV安装2.4.x版本均可,全系列可在我上传的资源里下载,地址为:https://download.csdn.net/download/zhyang2017/10823333,也可在OpenCV官网下载,地址:https://opencv.org

sudo apt-get install build-essential
sudo apt-get install libcv-dev 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
cd opencv-2.4.9
mkdir build
cd build
cmake ..
make
sudo make install

 7.安装摄像头驱动;

sudo apt-get install ros-indigo-image-view, v4l-utils
cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
source ~/catkin-ws/devel/setup.bash

 进入~/catkin-ws/usb_cam/src/usb_cam/launch/usb_cam-test.launch,以usb_cam-test.launch为参考新建usb_cam.launch

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>
roscore
cd ~/catkin_ws/
source devel/setup.sh
roslaunch usb_cam usb_cam.launch  #调试摄像头

8.编译ORB_SLAM2算法;

sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
git clone https://github.com/raulmur/ORB_SLAM2.git

把ORB_SLAM2放到catkin_ws/src下

cd /home/zhyang/catkin_ws/src/ORB_SLAM2
chmod +x build.sh
./build.sh
cd ~
sudo gedit .bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/zhyang/catkin_ws/src/ORB_SLAM2/Examples/ROS

将/home/zhyang/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc以及../AR/ros_mono_ar.cc中某代码修改为:

ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
cd /home/zhyang/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make

9.运行ORB_SLAM2

运行ROS

roscore

打开摄像头

cd ~/catkin_ws/
source devel/setup.sh
roslaunch usb_cam usb_cam.launch

 运行单目SLAM

cd ~/catkin_ws/
source devel/setup.sh
rosrun ORB_SLAM2 Mono /home/zhyang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/zhyang/catkin_ws/src/ORB_SLAM2/myslam.yaml

 运行单目AR

cd ~/catkin_ws/
source devel/setup.sh
rosrun ORB_SLAM2 MonoAR /home/zhyang/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/zhyang/catkin_ws/src/ORB_SLAM2/myslam.yaml

 注意:因为我使用的是单目相机,运行的是Mono程序,如果使用的是双目或者深度相机,运行Stereo或者RGB-D程序。

.yaml文件是相机标定文件,在ORB-SLAM2算法中可找到TUM数据集标定文件。zhyang是我Linux系统的名字,自行替换。

  • 相机标定

相机标定采用张正友教授单平面棋盘格相机标定法,通常使用三张标定板图片即可完成标定,越多标定结果越精确。这里主要介绍ROS系统标定,其实拍摄的图像也可以在Matlab中进行标定,不做介绍。

方形标定板

在ROS系统中进行标定,标定过程为实时。方法如下:

roscore #打开ROS系统
cd ~/catkin_ws/
source devel/setup.sh
roslaunch usb_cam usb_cam.launch #打开摄像头
rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.29 image:=usb_cam/image_raw camera:=/usb_cam #进行标定
/tmp/calibrationdata.tar.gz #标定文件存放目录
[fx,0,cx;0,fy,cy;0,0,1] #标定结果矩阵

 注意:size 9x6是标定板方块交点, square 0.29是方块边长,单位分米。

标定过程如下图,X 和Y 表示标定板在相机中的上下和左右位置;Size 表示占视野尺寸大小;Skew 表示上下左右倾斜位置。 

ROS相机标定过程

 标定结果如下:

image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [775.270656, 0.000000, 293.603808, 0.000000, 775.814093, 295.499837, 0.000000, 0.000000, 1.000000]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.446910, 0.298707, -0.002197, 0.001014, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000]
projection_matrix:
  rows: 3
  cols: 4
  data: [713.076904, 0.000000, 289.372930, 0.000000, 0.000000, 735.468323, 299.107679, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]

camere_matrix是相机内参,distortion_coefficients是相机畸变系数,将标定结果在.yaml文件中进行替换。


最后,运行结果图,我使用的是自己制作的数据集。

水下图像数据集
运行结果
轨迹

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值