硕士毕业论文使用ORB-SLAM2算法进行水下机器人定位,对于ORB-SLAM2算法编译网络上也有许多教程,但是均不太全面,我这里根据自己研究整理了一份较为全面的安装教程。包括Linux系统安装、算法编译、相机标定三个方面。
Linux系统使用的是Ubuntu 14.04,当然也可以使用Ubuntu16.04,根据自己的经验来看,14.04编译算法问题更少,因此建议使用14.04系统。在Windows中使用虚拟机安装Ubuntu可能会有很多问题,比如无法使用网络链接、屏幕分辨率无法调整、内存不足等问题,建议使用双系统。下面是制作Windows和Linux双系统的步骤。
注意:装双系统要先安装Windows再安装Linux,否则Windows会将Linux系统启动项删除。如果不想安装双系统可以将Linux安装在U盘中,不过这个我没有试过,应该是可行的。
在计算机基本输入输出系统BIOS中,设置U盘启动或在启动项中选择U盘启动;
安装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
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 表示上下左右倾斜位置。
标定结果如下:
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文件中进行替换。
最后,运行结果图,我使用的是自己制作的数据集。