这些天在学习高博ORB-SLAM2,入手一台kinect1相机,个人建议先理论,后实践。理论从推导公式做起,这里写点实践过程,以及总结遇到的一些问题:
安装过程参考:https://blog.csdn.net/u010128736/article/details/52808650
ORB-SLAM是15年一个西班牙博士做的,工程效果来看,是目前最好的了。ORB-SLAM是针对单目做的slam,最新的是ORB-SLAM2,支持单目、双目和RGB-D接口。这里对ORB-SLAM2的环境搭建做一个记录,里面遇到的坑也有解决办法,可以参考。
(1)打开一个终端Ternimal,输入
sudo passwd
然后设置root用户的密码
(2)在catkin_ws/src下新建 3.安装ORB_SLAM:文件夹:
1. mkdir ORB_SLAM2
2. cd ORB_SLAM2
(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
(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的过程中遇到几个问题,想分享下:
这篇博客写的是修改路径的方法 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 注意:一定写自己的绝对地址,不知道的地址的话,查一下文件属性.
参考这个博客: https://blog.csdn.net/weixin_40931266/article/details/81059763
然后又出现了下一个问题.保持耐心很关键.
出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录.
解决方案为:新开一个终端,输入 $locate boost_system 查找目录
$locate boost_filesystem 查找目录
将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 )
保存后,直接编译
参考博客为 https://blog.csdn.net/sinat_38343378/article/details/78883919.非常感谢
配置环境变量如下图所示:
vim.bashrc
source .bashrc
最后删除链接文件
sudo rm -rf opt/ros/kinetic/share/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
安装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
如下图所示:
3.配置launch文件 参考https://www.cnblogs.com/zengcv/p/6021512.html
在解压后的ORB_SLAM2的根目录下新建kinect_orbslam2.launch,内容如下:(根据需要,红色字体改为对应的路径,其他的无需修改
在ORB_SLAM2目录下
roslaunch kinect_orbslam2.launch
6. 跑ORB_SLAM AR
主要参考 https://blog.csdn.net/u79501/article/details/68942174
运行 ROS 中的demo
直接跑MonoAR吧~
开始之前还有个地方需要改:
把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);
在下图目录下重新编译:
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吧,凑合着用吧)
直接放结果:
写了两个小时,先休息会。
7. kinect1+rtabmap 构建办公室环境场景的三维稠密地图
重装了一次系统,把上面的过程又重新跑了一遍。然后安装rtabmap
打开rtabmap
三维稠密地图,轮廓比较清晰
怎么用产生的数据做视觉避障?