视觉SLAM ORB

您所在的位置:网站首页 orbslam2运行 视觉SLAM ORB

视觉SLAM ORB

2024-02-29 01:46| 来源: 网络整理| 查看: 265

视觉SLAM ORB-SLAM2 双目相机实时实验 双目相机矫正  配置文件

博文末尾支持二维码赞赏哦 _

一 ORB-SLAM2 安装

ORBSLAM2在Ubuntu14.04上详细配置流程

参考安装

1 安装必要工具

首先,有两个工具是需要提前安装的。即cmake和git。

sudo apt-get install cmake

sudo apt-get install git

2 安装Pangolin,用于可视化和用户接口 Pangolin: https://github.com/stevenlovegrove/Pangolin 官方样例demo https://github.com/stevenlovegrove/Pangolin/tree/master/examples 安装文件夹内 Pangolin函数的使用: http://docs.ros.org/fuerte/api/pangolin_wrapper/html/namespacepangolin.html 是一款开源的OPENGL显示库,可以用来视频显示、而且开发容易。 是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。 可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。 安装依赖项: http://www.cnblogs.com/liufuqiang/p/5618335.html  Pangolin安装问题 Glew:    sudo apt-get install libglew-dev CMake: sudo apt-get install cmake Boost: sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev Python2 / Python3: sudo apt-get install libpython2.7-dev sudo apt-get install build-essential 先转到一个要存储Pangolin的路径下,例如~/Documents,然后 git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. make -j sudo make install3 安装OpenCV  

最低的OpenCV版本为2.4.3,建议采用OpenCV 3.2.0以上。从OpenCV官网下载OpenCV3.2.00。

然后安装依赖项:

sudo apt-get install libgtk2.0-dev sudo apt-get install pkg-config 将下载的OpenCV解压到自己的指定目录,然后cd到OpenCV的目录下。 cd ~/Downloads/opencv-3.2.0 mkdir release cd release cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local .. make sudo make install  

4 安装Eigen3 最低要求版本为3.1.0。在http://eigen.tuxfamily.org 下载Eigen3的最新版本, 一般是一个压缩文件,下载后解压,然后cd到Eigen3的根目录下。 mkdir build cd build cmake ..

make

5 安装ORBSLAM2 先转到自己打算存储ORBSLAM2工程的路径,然后执行下列命令 git clone https://github.com/raulmur/ORB_SLAM2.git oRB_SLAM2 cd ORB_SLAM2 修改编译 线程数(不然编译时可能会卡住): vim build.sh 最后 make -j 改成  make -j4 加执行权限

sudo chmod 777 build.sh

安装

./build.sh 之后会在lib文件夹下生成libORB_SLAM2.so, 并且在Examples文件夹下生成 mono_tum,mono_kitti, mono_euroc  in Examples/Monocular 单目相机, rgbd_tum   in Examples/Monocular  RGB-D相机,

stereo_kitti 和 stereo_euroc  in Examples/Stereo 双目立体相机。

 

6 数据集 KITTI dataset 对于 单目 stereo 或者 双目 monocular http://www.cvlibs.net/datasets/kitti/eval_odometry.php EuRoC dataset 对于 单目 stereo 或者 双目 monocular http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets TUM dataset 对于 RGB-D 或者 单目monocular https://vision.in.tum.de/data/datasets/rgbd-dataset

7论文参考 ORB-SLAM: [Monocular] Raúl Mur-Artal, J. M. M. Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5, pp. 1147-1163, 2015. (2015 IEEE Transactions on Robotics Best Paper Award). http://webdiis.unizar.es/%7Eraulmur/MurMontielTardosTRO15.pdf ORB-SLAM2: [Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras. IEEE Transactions on Robotics, vol. 33, no. 5, pp. 1255-1262, 2017. https://128.84.21.199/pdf/1610.06475.pdf 词袋模型: [DBoW2 Place Recognizer] Dorian Gálvez-López and Juan D. Tardós. Bags of Binary Words for Fast Place Recognition in Image Sequences. IEEE Transactions on Robotics, vol. 28, no. 5, pp. 1188-1197, 2012. http://doriangalvez.com/papers/GalvezTRO12.pdf8单目测试 在http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载一个序列,并解压。 转到ORBSLAM2文件夹下,执行下面的命令。 根据下载的视频序列freiburg1, freiburg2 和 freiburg3将TUMX.yaml分别转换为对应的 TUM1.yaml 或 TUM2.yaml 或 TUM3.yaml (相机参数文件)。 将PATH_TO_SEQUENCE_FOLDER 更改为解压的视频序列文件夹。 ./Examples/Monocular/mono_tum 词典路径 参数文件 数据集

例如我下载的 rgbd_dataset_freiburg1_xyz

运行示例:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.bin Examples/Monocular/TUM1.yaml /home/ewenwan/ewenwan/learn/vSLAM/date/rgbd_dataset_freiburg1_xyz9双目测试

在 http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

下载一个序列 Vicon Room 1 02  大小1.2GB

./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH_TO_SEQUENCE/cam0/data PATH_TO_SEQUENCE/cam1/data Examples/Stereo/EuRoC_TimeStamps/SEQUENCE.txt

双目参数文件详解

a. Camera.bf中的b指基线baseline(单位:米), f是焦距fx(x轴和y轴差距不大),bf=b*f, 和ThDepth一起决定了深度点的范围: bf * ThDepth / fx 即大致为b * ThDepth。 基线在双目视觉中出现的比较多, 如ORB-SLAM中的双目示例中的EuRoC.yaml中的bf为47.9,ThDepth为35,fx为435.2, 则有效深度为bf * ThDepth / fx = 47.9*35/435.3=3.85米; KITTI.yaml中的bf为387.57,ThDepth为40,fx为721.54, 则有效深度为387.57*40/721.54=21.5米。 这里的xtion的IR基线(其实也可以不这么叫)bf为40, ThDepth为50,fx为558.34,则有效深度为3.58米(官方为3.5米)。 b. RGBD中  DepthMapFactor: 1000.0这个很好理解, depth深度图的值为真实3d点深度*1000. 例如depth值为2683,则真是世界尺度的这点的深度为2.683米。  这个值是可以人为转换的(如opencv中的convert函数,可以设置缩放因子), 如TUM中的深度图的DepthMapFactor为5000, 就代表深度图中的5000个单位为1米。10 词带  关键字数据库  用于加快 重定位 回环检测  orb词带txt载入太慢,看到有人转换为binary,速度超快,试了下,确实快. 链接:https://github.com/raulmur/ORB_SLAM2/pull/21/commits/4122702ced85b20bd458d0e74624b9610c19f8cc      Vocabulary/ORBvoc.txt >>> Vocabulary/ORBvoc.bin

#CMakeLists.txt 最后添加 ## .txt >>> .bin 文件转换 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/tools) add_executable(bin_vocabulary tools/bin_vocabulary.cc) target_link_libraries(bin_vocabulary ${PROJECT_NAME}) # build.sh 转换 .txt >>> .bin 最后添加 cd .. echo "Converting vocabulary to binary" ./tools/bin_vocabulary #### 新建转换文件 tools/bin_vocabulary.cc #include #include "ORBVocabulary.h" using namespace std; bool load_as_text(ORB_SLAM2::ORBVocabulary* voc, const std::string infile) { clock_t tStart = clock(); bool res = voc->loadFromTextFile(infile); printf("Loading fom text: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); return res; } void load_as_xml(ORB_SLAM2::ORBVocabulary* voc, const std::string infile) { clock_t tStart = clock(); voc->load(infile); printf("Loading fom xml: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } void load_as_binary(ORB_SLAM2::ORBVocabulary* voc, const std::string infile) { clock_t tStart = clock(); voc->loadFromBinaryFile(infile); printf("Loading fom binary: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } void save_as_xml(ORB_SLAM2::ORBVocabulary* voc, const std::string outfile) { clock_t tStart = clock(); voc->save(outfile); printf("Saving as xml: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } void save_as_text(ORB_SLAM2::ORBVocabulary* voc, const std::string outfile) { clock_t tStart = clock(); voc->saveToTextFile(outfile); printf("Saving as text: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } void save_as_binary(ORB_SLAM2::ORBVocabulary* voc, const std::string outfile) { clock_t tStart = clock(); voc->saveToBinaryFile(outfile); printf("Saving as binary: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } int main(int argc, char **argv) { cout loadFromBinaryFile(strVocFile);//bin格式打开 if(!bVocLoad) { cerr


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3