Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图

这些天在学习高博ORB-SLAM2,入手一台kinect1相机,个人建议先理论,后实践。理论从推导公式做起,这里写点实践过程,以及总结遇到的一些问题:

 安装过程参考:https://blog.csdn.net/u010128736/article/details/52808650

搭建ORB-SLAM2

ORB-SLAM是15年一个西班牙博士做的,工程效果来看,是目前最好的了。ORB-SLAM是针对单目做的slam,最新的是ORB-SLAM2,支持单目、双目和RGB-D接口。这里对ORB-SLAM2的环境搭建做一个记录,里面遇到的坑也有解决办法,可以参考。

系统环境:ubuntu16.04
1.设置root密码(若为新装的系统):

(1)打开一个终端Ternimal,输入

sudo passwd

然后设置root用户的密码
(2)在catkin_ws/src下新建 3.安装ORB_SLAM:文件夹:

1.  mkdir ORB_SLAM2
2.  cd ORB_SLAM2

2.安装必备软件:

(1)更新apt库

sudo apt-get update

(2)安装git

sudo apt-get install git

(3)安装cmake

sudo apt-get install cmake

(4)安装Pangolin
安装依赖:
a、opengl:
b、GLEW:

sudo apt-get install libglew-dev

c、Boost:

sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

d、Python2/Python3:

sudo apt-get install libpython2.7-dev

e、编译基础库

sudo apt-get install build-essential

在catkin_ws/src目录下安装Pangolin:

1. git clone https://github.com/stevenlovegrove/Pangolin.git
2. cd Pangolin

 直接编译

mkdir build
cd build
cmake ..
make

(5)安装OpenCV
安装依赖:

sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-./build,shdev libtiff5-dev  libjasper-dev libopenexr-dev libtbb-dev

安装OpenCV:
a、官网下载OpenCV 3.2.0 for Linux下载地址,解压到Ubuntu中
b、进入OpenCV文件夹,配置工程

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

进行编译

make
sudo make install

(6)安装Eigen  是头文件组成的库,没有库文件

sudo apt-get install libeigen3-dev

(6)可选安装 PCL

sudo apt-get install libpcl-dev pcl-tools

(7)安装BLAS and LAPACK库

sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev

 3.安装ORB_SLAM:

(1)Clone the repository:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM24.测试ORB_SLAM2

(2)编译:

cd ORB_SLAM2
chmod +x build.sh

 (3)  执行:

  ./build.sh

  ./build_ros.sh

 当然也可以通过下面的方法编译ORB_SLAM2

     在编译ORB_SLAM2的过程中遇到几个问题,想分享下:

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第1张图片

这篇博客写的是修改路径的方法 https://www.2cto.com/kf/201707/661021.html  但是我用了之后感觉还是有问题,路径添加不进去.

在catkin_ws中 source ~/devel/setup.bash

用下面的解决办法:输入 sudo ln -s /home/xm/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2 /opt/ros/kinetic/share/ORB_SLAM2 注意:一定写自己的绝对地址,不知道的地址的话,查一下文件属性.

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第2张图片

 参考这个博客: https://blog.csdn.net/weixin_40931266/article/details/81059763

 然后又出现了下一个问题.保持耐心很关键.

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第3张图片

 出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录.

解决方案为:新开一个终端,输入 $locate boost_system     查找目录

                                                             $locate boost_filesystem 查找目录

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第4张图片

 将libboost_system.so与libboost_filesystem.so复制到ORB_SLAM2/lib(注意是catkin_ws/src/ORB_SLAM2/lib)下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为
在set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
加入${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so )

保存后,直接编译

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第5张图片

参考博客为 https://blog.csdn.net/sinat_38343378/article/details/78883919.非常感谢

配置环境变量如下图所示:

vim.bashrc

source .bashrc

最后删除链接文件

sudo rm -rf  opt/ros/kinetic/share/ORB_SLAM2

 4.测试ORB_SLAM2

这里下载了一个单目相机的测试数据集进行测试。数据集下载地址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download

参考博客 https://www.cnblogs.com/bigzhao/p/6246084.html

1.按照要求下载数据集,我下载的是rgbd_dataset_freiburg2_pioneer_360,将其解压到你的 catkin_ws/src/ORB_SLAM2.我个人放在了orbslam2工程目录下面了.

2.下载 associate.py.放在/ORB_SLAM2/Examples/RGB-D/目录下面.

3.打开终端,进入到associate.py所在目录,即/ORB_SLAM2/Examples/RGB-D/,之后运行

python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

在该目录中将会生成一个associations.txt文件.

4.参照所给链接中的第3步,https://github.com/raulmur/ORB_SLAM2,即

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

 PATH_TO_SEQUENCE_FOLDER文件夹即为数据库所在文件夹,我放在orbslam2工程下面,ASSOCIATIONS_FILE即为第3步中生成的associations.txt,给出目录位置

5.至此,可以运行,#cd ORB_SLAM2 #./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM2.yaml /home/zty/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360 /home/zty/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/associations.txt

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第6张图片

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第7张图片

 5.用kinect1相机跑ORB_SLAM2

   安装kinect1驱动

1.安装驱动

安装ROS软件包
以下2种方式,任选一种即可,当然全部安装也没有问题

1)使用openni_launch

sudo apt-get install ros-kinetic-openni-camera ros-kinetic-openni-launch

注意:openni2_launch已经不再支持Kinect任何产品。

2)使用freenect_launch

1. sudo apt-get install libfreenect-dev

2. sudo apt-get install ros-kinetic-freenect-camera ros-kinetic-freenect-stack ros-kinetic-freenect-launch

2.软硬件准备

硬件准备:kinect1接12V电源,用自身的USB接到PC机

软件准备: roslaunch openni_launch openni.launch 或者roslaunch freenect_launch freenect.launch

验证驱动是否安装成功

rostopic list 查看ORB_SLAM2需要两个topic: /camera/rgb/image_raw      /camera/depth_registered/image_raw

roscore

rosrun rqt_image_view rqt_image_view

 如下图所示:

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第8张图片

 

 3.配置launch文件  参考https://www.cnblogs.com/zengcv/p/6021512.html

     在解压后的ORB_SLAM2的根目录下新建kinect_orbslam2.launch,内容如下:(根据需要,红色字体改为对应的路径,其他的无需修改 

   
   

   
     
     
     
     
     
     
     
     
     
     
   

在ORB_SLAM2目录下

roslaunch kinect_orbslam2.launch

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第9张图片

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第10张图片

 6. 跑ORB_SLAM AR

     主要参考 https://blog.csdn.net/u79501/article/details/68942174

     运行 ROS 中的demo

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第11张图片

 

直接跑MonoAR吧~

开始之前还有个地方需要改:

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第12张图片

 

把ros_mono_ar.cc中的

ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);

改为:

ros::Subscriber sub = nodeHandler.subscribe("/camera/rgb/image_color", 1, &ImageGrabber::GrabImage,&igb);

在下图目录下重新编译:

 

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第13张图片

 

1.roscore

2.roslaunch openni_launch openni.launch

3.rosrun ORB_SLAM2 MonoAR /home/xm/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/xm/catkin_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml

(TUM1.yaml是参数设置文件,主要是相机的内参,这个得自己标定。如果懒得标定,直接用TUM1.yaml吧,凑合着用吧)

直接放结果:

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第14张图片

 写了两个小时,先休息会。

 7. kinect1+rtabmap 构建办公室环境场景的三维稠密地图

     重装了一次系统,把上面的过程又重新跑了一遍。然后安装rtabmap

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第15张图片

 打开rtabmap

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第16张图片

三维稠密地图,轮廓比较清晰

Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+rgbd数据集+三维稀疏地图+rtabmap三维稠密地图_第17张图片

 怎么用产生的数据做视觉避障?

你可能感兴趣的:(视觉,SLAM,ROS,Kinect1,图像处理)