zoukankan      html  css  js  c++  java
  • ORB_SLAM编译运行

    老规矩之甩锅:手敲有风险,copy需谨慎!理解咯~~

    环境 Ubuntu14.04,虚拟机内存 4G,核心数 2,ROS 版本 Indigo

    原作者网页

    1、下载源码

    有的小伙伴要说了,要不要建工作空间呢?毕竟是用 ROS 运行的。之前查了很多资料,大部分都没有建立工作空间,甚至都没有提过这事儿。在这里,我以亲身实践说明一下,这个不需要建立工作空间,不用建 src,不用 catkin_make。

    工作空间不用建,那总要建立个文件夹用来放源码,对吧(如果非要把这个文件夹叫做工作空间,那,,你开心就好。。。)

    我是在 Home 下建立的,文件夹名称任意,所以

    cd ~/

    mkdir orb-slam_ws

    cd orb-slam_ws

    下载源码

    git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM

    安安静静等完代码下完,,虽然很慢很慢……

    然后下载数据包,我用的是作者提到的 Example,在原作者网页可以找到,这里给出下载链接

    然后将数据包移到 ~/orb-slam_ws,实际上你可以放在任何地方,我这里为了方便就这样了。

    2、安装依赖

    sudo apt-get install libboost-all-dev

    sudo apt-get install libblas-dev

    sudo apt-get install liblapack-dev

    sudo apt-get install libeigen3-dev

    然后添加环境变量(不知道对以后的ros工程有没有影响,这个以后出了问题再说,现在先把这个跑通。。)

    sudo gedit ~/.bashrc

    在最后面添加:

    export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/orb-slam_ws

    实际上,这个路径是你下载的 ORB_SLAM 的路径。

    然后保存退出,执行:

    source ~/.bashrc

    说句题外话,新打开的 terminal 中才真正的更新了环境变量,这个窗口中保存的是更改前的。

    3、编译 opencv

    由于这个代码用到了opencv2.4 版本,所以我们要下载对版本。之前一直编译不同,以为是下载的版本有问题,我下载了 2.4.9、2.4.13、2.4.13.5,最后用 2.4.13版本跑通了,当然我不是说 2.4.9、2.4.13.5 等其他 2.4 版本不能跑通。为什么这么说呢?因为我之前之所以出问题编译出错是因为我之前装了 3.1.0的版本,所以不行。所以,你可以试一试,我觉得只要是 2.4. 的版本应该都可以。

    这里我简单交代一下我曲折的编译之路。。。然后再给出正确方法。

    首先说一下 opencv 版本的问题,之前跑另一个程序需要opencv3,,那时候没玩过这,也不懂,就按默认路径安装了 opencv3.1.0,然后它自己就装到了 usr/local/include、usr/local/lib,还有share什么的,好多个文件夹,导致我卸载都很麻烦,要卸载它,你就得手动删掉它所有安装的路径下的相关文件,这些安装信息在安装时保存在了一个什么 install 文件中,具体我忘了(反正我是运行 unintall 不行,所以才手动一个一个删的)。

    就这样,删掉了opencv3.1.0版本,结果还是编译出错,说是找不到一些opencv里的程序,其实是程序找不到opencv在哪里(因为我没有安装到默认路径,这个一会再说)。试了很多方法,最后发现,不光要设置环境变量,还要设置 CMakeLists 文件告诉程序 opencv 的路径。

    那我为什么要改变安装路径,而不是按默认安装到 usr 呢?当然是为了方便管理。如同你在 Windows 中安装软件,谁会默认安装到 C 盘啊?是吧,都是安装到别的盘,这样方便管理,还不会影响系统,重装时也不会丢失。linux下也是一样,改变了安装路径,就可以同时安装多个版本的 opencv,以应对不同程序的需求。切换opencv版本有很多文档,百度一下就行。切换时只需要改变环境变量和 CMakeLists 文件中的设置就行。我下面安装 opencv 的方法就是这种。

    好了,言归正传,首先到官网下载 opencv2.4.13

    将下载好的压缩包解压到你方便的位置,这里我是专门建了一个用来放 opencv 源码的文件夹(我把opencv2.4.9、2.4.13、3.1.0版本源码都放在这里了):
    cd ~/

    mkdir opencv_src

    然后建立一个用于安装 opencv 的文件夹,这个也是自己看着办,我同样是在 Home 下,然后每个opencv版本各占一个文件夹:

    cd ~/

    mkdir opencv-2.4.13

    所以最后我的格局是这样的:

    然后进入解压后的 opencv-2.4.13,建立 build 文件夹并进入

    mkdir build

    cd build

    执行:

    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=~/opencv-2.4.13 ..

    注意不要丢掉最后的两个点!它狠重要!!

    然后执行:

    make

    sudo make install

    如果虚拟机配了双核,为了加快速度可以 make -j2 和 sudo make install -j2

    安装后会发现在安装文件夹 opencv-2.4.13 中的 lib、bin等文件上面有小锁子标志,如果要消除这个小锁子,需要更改权限:

    cd ~/

    sudo chmod 777 opencv-2.4.13 -R

    就可以了

    然后配置 opencv 变量,编辑文件 /etc/ld.so.conf.d/opencv.conf(如果没有就会自动创建):

    sudo gedit  /etc/ld.so.conf.d/opencv.conf

    然后添加 opencv2.4.13 的 lib 路径:

    ~/opencv-2.4.13/lib

    保存退出,执行:

    sudo ldconfig

    编辑 ~/.bashrc ,最后添加:

    #opencv-2.4.13

    export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:~/opencv-2.4.13/lib/pkgconfig

    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:~/opencv-2.4.13/lib

    保存退出,执行:

    source ~/.bashrc

    查看当前 opencv 版本,新开窗口执行:

    pkg-config --modversion opencv

    如果显示 2.4.13,说明当前opencv版本正是刚安装的 2.4.13

    4、编译g2o

    进入 g2o 文件夹:

    cd ~/orb-slam_ws/ORB_SLAM/Thirdparty/g2o

    创建 build 文件夹:

    mkdir build

    cd build

    编译:

    cmake .. -DCMAKE_BUILD_TYPE=Release

    如图:

    make

    如图:

    5、编译DBoW2

    前面的前面说的要在 CMakeLists 文件中添加 opencv 路径,说的就是这里了,因为编译 DBoW2 时需要使用 opencv 库。还有就是如果安装了错误的 opencv 版本导致编译失败,那么在安装了正确的版本后,需要重新编译 ORB_SLAM(下一步会讲),并且需要重新编译 DBoW2,这个很重要,否则即使opencv版本正确,程序仍编译不成功!重新编译的时候删掉 build 里的所有东西,然后重新 cmake 加参数和 make 就好了。

    进入 DBoW2 文件夹:

    cd ~/orb-slam_ws/ORB_SLAM/Thirdparty/DBoW2

    创建 build 文件夹:

    mkdir build

    编辑 Thirdparty/DBoW2 下的 CMakeLists.txt 文件,在第4行左右,添加设置(正是opencv安装的路径):

    set(OpenCV_DIR ~/opencv-2.4.13/share/OpenCV)

    保存退出

    然后进入 build 文件夹开始编译:

    cd build

    编译:

    cmake .. -DROS_BUILD_TYPE=Release

    如图:

    make

    如图:

    6、编译 ORB_SLAM

    终于要开始编译真正的程序源码了,之前的都是编译了需要用到的库。

    首先,因为我的 ROS 版本是 Indigo,所以需要将 ORB_SLAM 下 manifest.xml 中的 opencv2 那一行注释掉,右键用 gedit 打开 manifest.xml,12行左右修改为:

    <!--    <depend package="opencv2"/>    -->

    保存退出(这里我是注释掉了,事实上可以直接删掉这一句)

    同时,由于同样用到了 opencv,所以这里也需要在 CMakeLists 文件中添加opencv路径:

    编辑 ORB_SLAM 下的 CMakeLists.txt 文件,12行左右添加设置:

    set(OpenCV_DIR ~/opencv-2.4.13/share/OpenCV)

    保存退出

    在 ORB_SLAM 下建立 build 文件夹,然后进入:

    mkdir build

    cd build

    开始编译:

    cmake .. -DROS_BUILD_TYPE=Release

    如图:

    make

    如图:

    7、运行

    然后呢,当然是开始跑程序啦~~老司机发车~~~~~~~wuwuwu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    新开窗口启动 ROS:

    roscore

    新开窗口,在 ~/orb-slam_ws/ORB_SLAM 下执行:

    roslaunch ExampleGroovyOrNewer.launch

    这里因为是 Indigo 版本,所以运行这个程序,如果是别的版本,就需要运行不同的指令,详见原作者网页

    这时,就会看到 Rviz 自动运行,同时出现一个黑色没有显示的窗口,这时因为没有数据输入。

    然后新开窗口运行数据包(先进入数据包所在文件夹):

    cd ~/orb-slam_ws

    rosbag play --pause Example.bag

    然后在这个窗口中通过 空格键 来控制数据包的运行与暂停,运行效果如下:

    春节只有两星期假,还要调程序,心里那个不情愿啊aaaaa……假期算是没跑通,各种错误,国内外的帖子翻了好几遍,这不昨天刚弄出来

    山重水复疑无路,柳暗花明又一村!

    千万别放弃,绝处逢生是最有成就感的!!

  • 相关阅读:
    实现LNMP
    iptabes的用法
    实现LAMP
    实现https
    硬盘信息和磁盘分区管理
    awk
    【BZOJ 2288】 2288: 【POJ Challenge】生日礼物 (贪心+优先队列+双向链表)
    【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)
    【BZOJ 1216】 1216: [HNOI2003]操作系统 (模拟+优先队列)
    【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
  • 原文地址:https://www.cnblogs.com/hxzkh/p/8473190.html
Copyright © 2011-2022 走看看