我是怎么从0开始跑通ORBSLAM2+kinectv1的(win8或者win10)

我在研0阶段接到的实验室的第一个项目,是和本校的另外一个实验室的合作项目,分给我的第一阶段的任务是对一个简单的室内环境进行三维重建。经过一些自己的调研和向一位远在日本从事SLAM研究的老师的请教,最后决定用V-SLAM的方法来实现第一阶段的任务。经过一段时间的钻研,我个人决定用ORBSLAM2。因为整个项目从头到尾都是我一个人做,摸索了很多,进了很多坑,最后终于跑通了,决定把这整个过程
记录下来。

我最开始的系统是win8(legacy)。所以本文从安装ubuntu开始。

一、安装ubuntu14.04

ubuntu 14.04.1 with ROS indigo
ubuntu的安装没什么好多说的,装个10几次自然就会了。这里的链接是集成了ROS indigo的版本,免去了自己安装ROS的麻烦。另外建议非linux老鸟不要把/usr从根目录里面单独挂载出来,因为很容易一个chmod 777你的sudo就不能用了。另外legacy启动的系统可以挂载ubuntu的GRUB,在windows系统下用EasyBCD修复ubuntu的启动项即可。

二、ubuntu下一些必备的包的安装

0.换源:

更换常规源
更换ROS源:

sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-get update

1.openCV

先安装依赖项

sudo apt-get update

# Ubuntu 14.04
sudo apt-get install --fix-missing build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev

# Ubuntu 16.04
sudo apt-get install --fix-missing build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev

然后去官网下载源码openCV源码下载。推荐下载2.4.*系列。3.0系列据说还不是很完善,一些接口和现在用2.4系列的程序可能也对不上。
然后解压下载的源码包,终端进入解压后的文件夹。

git clone https://gitee.com/linsibo/opencv.git
cd opencv/
git checkout 2.4.13
mkdir build
cd build
cmake ..
make
sudo make install

make消耗的时间会比较长,如果你有勇气的话可以用make -j替换make,速度会快不少,但不能保证稳定性

2.PCL

下载的ubuntu是集成了PCL1.7的,所以就不用再去纠结PPA链接不上的问题了。如果你已经有ubuntu系统不想重装决定自己装ROS以及这些包。那么

# Ubuntu 14.04
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
# Ubuntu 16.04
sudo apt-get install libpcl1.7

校园网经常出现PPA连不上的情况,可以去PCL找源码下载安装,步骤基本同openCV。

3.g2o

安装依赖项

sudo apt-get install --fix-missing libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake libqglviewer-dev

源码包建议使用ORBSLAM2项目里ThirdParty下的g2o,里面有作者新添加的一些点和边的定义。

4.Pangolin

依赖项
就一个sudo apt-get install libglew-dev
然后

git clone https://github.com/zzx2GH/Pangolin.git
cd Pangolin

修改 Pangolin/src/display/device/display_x11.cpp文件,
注释掉 staticint visual_attribs[]={…}里的GLX_SAMPLE_BUFFERS这一行和GLX_SAMPLES这一行。

mkdir build
cd build
cmake ..
make -j

非常简单。

三、安装ORBSLAM2

终于进入正题了。这里有两个版本的ORBSLAM2提供选择。第一个是官方版的ORBSLAM2,不带点云,重建的是单目的稀疏特征点地图。官方版 第二个是清华的高翔博士修改的版本,可以显示点云地图。高博点云版 官方版自带了详细的使用教程,所以我就不说了。我自己把这两个版本整理了一下:

git clone https://gitee.com/qq184861643/ORBSLAM2_PCL.git

然后:

cd ORBSLAM2_PCL/ORB_SLAM2_modified
./build.sh  #运行这一步之前先把build.sh里所有的make -j改为make
cd /Examples/ROS/ORB_SLAM2/

以下要修改的内容我基本都改了问题应该不大,可以直接跳到第四步。如果编译有错误,自己再查一下

打开当前目录下的CMakeList.txt,找到语句find_package(Pangolin REQUIRED),在下一行插入find_package(PCL REQUIRED)
找到语句${Pangolin_INCLUDE_DIRS},在下一行插入${PCL_INCLUDE_DIRS}
找到语句${Pangolin_LIBRARIES},在下一行插入${PCL_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so改为g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension g2o_types_sim3 g2o_types_sba
修改完成之后

cd ../../../..

将文件夹ORB_SLAM2_modified改名为ORB_SLAM2
然后
(1)打开ORB_SLAM2\Examples\ROS\ORB_SLAM2\src\ros_rgbd.cc,在83行左右main函数的SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory.txt");语句下面添加SLAM.SavePointCloud("/home/exbot/ROSExample.pcd");括号里为点云文件保存的位置和文件名,可以修改。
(2)打开ORB_SLAM2\src\pointcloudmapping.cc,在文件的最后添加一个方法

#include 
#include 
void PointCloudMapping::savePointCloud(const string &filename)
{
    globalMap->clear();
    for(size_t i=0;iswap( *tmp );    
    cout<<"Saving Point Cloud as PCD File ..."<

(3)打开ORB_SLAM2\src\System.cc,在namespace ORB_SLAM2{}的作用域里(一般是最后一个大括号之前)添加一个方法:

void System::SavePointCloud(const string &filename)
{
    mpPointCloudMapping->savePointCloud(filename);
}

四、配置ROS工作环境

1.构建工作环境

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
echo "source /home/exbot/catkin_ws/devel/setup.bash" >> ~/.bashrc
echo "export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/exbot/catkin_ws/src/ORB_SLAM2/Examples/ROS" >> ~/.bashrc

source ~/.bashrc

之后将改好名的ORB_SLAM2复制到catkin_ws/src/目录下。

之后

cd catkin_ws/src/ORB_SLAM2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
cd ../Examples/ROS/ORB_SLAM2/
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make

如果在make的过程中提示找不到pcl的头文件,请自行修改cmakeList文件,或者像我一样做个体力活,把/usr/include/pcl-1.7/目录下的所有头文件里的#include语句都改成绝对路径。。。

2.kinect 驱动的安装

sudo apt-get install ros-indigo-openni-* ros-indigo-openni2-* ros-indigo-freenect-*
rospack profile

3.实现

先插上kinect。然后打开三个终端,分别输入:

roscore

roslaunch freenect_launch freenect-registered-xyzrgb.launch

rosrun ORB_SLAM2 RGBD /home/exbot/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/exbot/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/TUM1.yaml

自行将第三条命令里的路径换成自己的绝对路径即可。

五、win10(UEFI)下安装ubuntu

UEFI启动的机器是不能使用EasyBCD的,也最好不要强行使用。实际上安装ubuntu的时候将GRUB安装到win10 boot loader的同一硬盘下(可以在不同分区)即可,然后进入UEFI将ubuntu的启动优先级提到win10之前就可以了,比legacy系统更加简单,因为legacy启动的BIOS的启动顺序不能细分到同一硬盘下,最多只能选择不同的硬盘哪一个更先启动。

使用拍摄好的视频进行三维重建

  1. 下载associate.py到任意目录下。
  2. 下载任意一个rgbd的公开数据集到任意目录下,假设该目录为${Data_Path}。
  3. 运行associate.py: python associate.py ${Data_Path}/rgb.txt ${Data_Path}/depth.txt > ${Data_Path}/association.txt
  4. 假设ORB_SLAM2的主目录是${ORB},进入${ORB}。运行以下命令:
    Example/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Example/RGB-D/TUM1.yaml ${Data_Path} ${Data_Path}/association.txt

你可能感兴趣的:(SLAM)