ubuntu12.04+ros fuerte 跑ORB_SLAM代码

来源:互联网 发布:java输出所有汉字 编辑:程序博客网 时间:2024/05/16 15:57

前言:之前我们在ubuntu12.04上跑通了LSD的代码,下面将阐述如何类似的跑通ORB代码,在此之前我们假定已经安装好了ubuntu12.04和ros fuerte.


首先我们直接home目录下,git ORB的源代码到ROS并构建工作目录:

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

之后

rosws init ~/ORB_SLAM /opt/ros/fuerte
设置工作空间。


安装第三方的库依赖

1.

 sudo apt-get install libboost-all-dev
 sudo apt-get install libsuitesparse-dev
 sudo apt-get install libblas-dev
 sudo apt-get install liblapack-dev
 sudo apt-get install libeigen3-dev2.之后我们编译进入ORB_SLAM/Thirdparty文件夹下的g2o.编译g2o需要依赖Eigen3和Cmake,剩下的Qt5(http://qt-project.org)等为可选,如果不需要的话可以暂时不用安装。mkdir buildcd buildcmake ..make这里如果碰到了No Instruction vmfxxx这种问题可以把CmakeLists里面的{CMAKE_C_FLAGS_RELEASE} -O3 -march=native -mno-avx") 加上-mno-avx。3.进入ORB_SLAM/Thirdparty文件夹下的Do2W文件夹,编译该文件。编译DBo2W需要依赖Dlib以及opencv,我们先安装Dlib,下载链接https://github.com/dorian3d/DLib之后安装opencv,这里我官网下载最新的没能编译通过,于是改装opencv2.4.9后编译成功。完成上面两步后,我们进入DBo2W,编译该文件成功。4.进入ORB_SLAM编译源文件首先要设置ROS环境变量export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:(你的ORB_SLAM文件夹绝对路径)mkdir build
cd build
cmake ..
make

正常情况下会没错的,(听说会有找不到opencv2的问题,如果有将manifest.xml中 <depend package="opencv2"/> 删除就好了)

自此编译完成。

///////////////////////////////华丽丽的分割线/////////////////////////////////////////////////////////////////////////

运行程序,开四个终端,并且2.3.4记得export环境变量

1.roscore   #启动ros服务2.rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true 3.rosrun rviz rviz -d Data/rviz.rviz 
4.rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.yml Data/Settings.yaml   #运行ORB_SLAM , 其中ORBvoc.yml(txt)需要先解压
5. 打开新的终端执行,进入Example.bag所在文件夹,执行
 rosbag play --pause Example.bag  #执行图片发布程序,执行后,按空格键开始
/**********************这里我们为了方便直接使用launch文件启动程序跳过上面的2.3.4**************************/
roslaunch ExampleFuerte.launch
rosbag play --pause Example.bag  #执行图片发布程序,执行后,按空格键开始总结:

编译过程中碰到了一个很坑爹的问题,就是我通过在线安装的eigen3版本是3.05但是ORB后面需要编译Do2W需要的最低版本是3.1.0,所有不得不去eigen官网下载,
自己重新编译安装。官网http://eigen.tuxfamily.org/,现在下来以后参照readme:mkdir build 之后 cmake .. 然后make install 安装完成。
(但是但是,这个eigen感觉问题比较多, 后面会在AVX里面包含的两个头文件里面爆出XX not in scope的问题,仔细看了出错的问题,之后更改头文件中相关
代码:找到出错的packageMath.h和mathFunctions.h文件,将出错的__FMA__注释掉,将出错的 r 不赋初值。之后编译通过。

0 0
原创粉丝点击