ORB SLAM2 ROS单目摄像头环境搭建

来源:互联网 发布:淘宝网外贸店 编辑:程序博客网 时间:2024/05/16 10:37

ORB SLAM2 ROS单目摄像头环境搭建

平台:arm,windows虚拟机都能成功系统Ubuntu14.04LTS  ROS:Indigo

1 安装ORB SLAM2依赖

l  安装 g++11

$ sudo apt-get install gcc g++

l  安装 Pangolin

$sudo apt-get installlibglew-dev  #安装Glew

$sudo apt-get installcmake        #安装CMake

$sudo apt-get installlibboost-dev libboost-thread-dev libboost-filesystem-dev #安装Boost

$sudo apt-get installlibpython2.7-dev #安装Python2'Python3

下载、编译、安装Pangolin:

$ git clone https://github.com/stevenlovegrove/Pangolin.git

$cd Pangolin

$ mkdir build

$cd build

$ cmake-DCPP11_NO_BOOST=1..

$ make

$ sudo make install

 

安装Pangolin时遇到问题,在make到84%时提示:

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocationR_X86_64_32 against `.rodata.str1.1’ can not be used when making a sharedobject; recompile with -fPIC 
/usr/local/lib/libavcodec.a: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status

解决办法:重新安装ffmpeg[1]

重下载FFmpeg:http://ffmpeg.org/download.html#releases 

重新编译ffmpeg后安装,Pangolin就可以顺利安装了,必要时需要重启Ubuntu在安装Pangolin。

 

$./configure–enable-nonfree –enable-pic –enable-shared

$ make

$ make install

 

注意:不要弄错先后顺序,会出现错误的!!!特别是要先安装好前置依赖再执行cmake

 

l  安装OpenCV

 

$sudo apt-getupdate

$sudo apt-getinstall libcv-dev

 

l  安装Eigen 

 

$ sudo apt-getinstall libeigen3-dev

 

l  BLAS and LAPACK

 

$ sudo apt-getinstall libblas-dev

$ sudo apt-getinstall liblapack-dev

 

2 编译ORB_SLAM2库和例子程序(单目、双目和RGB-D) 

$ git clonehttps://github.com/raulmur/ORB_SLAM2.git #这里,建议在主目录即/home/odroid/内运行命令,将该文件夹放在主目录上。

$ cd ORB_SLAM2

$ chmod +xbuild.sh

 

在运行build.sh之前,需要修改build.sh最后一句make–j,这句的意思是使用多核编译,容易导致死机或者内存不足。然后再运行:

 

$./build.sh

 

若仍然出现内存不足(g++-4.9.real: internal compiler error: Killed(program cc1plus))virtualmemory exhausted: Cannot allocate memory,可以临时增加交换分区2G[2]

这一步需要耐心等待。

临时增加交换分区方法:

这里注意,增加的交换内存为2g,使用free –m可以查看内存


$ sudo dd if=/dev/zeroof=/swapfile bs=64M count=32
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

编译完成后,可以去掉交换分区:

$ sudo swapoff/swapfile
$ sudo rm /swapfile

 

然后再运行:

 

$ chmod +xbuild_ros.sh

$ ./build_ros.sh  #(注意同样要改变build_ros.sh最后一行的make -j

 

进入ORB_SLAM2/Examples/ROS/ORB_SLAM2/src,打开 ros_mono.cc把程序里面的topic改为/usb_cam/image_raw,这里的/usb_cam/image_raw是运行

roslaunch usb_cam usb_cam-test.launch显示的窗口标题而来的,如图:

 

 

这里,修改了文件后需要重新运行./build.sh,这次会快的多~

再运行:

$ roslaunchusb_cam usb_cam-test.launch

$ rosrunORB_SLAM2 Mono /home/odroid/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/odroid/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

 

这里官方的命令为:

rosrun ORB_SLAM2Mono PATH_TO_VOCABULARYPATH_TO_SETTINGS_FILE

其中包含2个参数:

PATH_TO_VOCABULARY:视觉词典,一般可以直接使用catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt 

PATH_TO_SETTINGS_FILE:摄像头内参,可以使用路径catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml,但需要将Asus.yaml中的参数改成自己使用摄像头标定后的参数,摄像头标定[3]可以使用opencv或matlab工具箱。

 

注意:出现初始化不成功需要将摄像头距离稍微拉远一点!

 

出现错误[rosbuild] rospack found package "ORB_SLAM2" at"":

CMake Error at /opt/ros/indigo/share/ros/core/rosbuild/private.cmake:102(message):

  [rosbuild] rospack found package"ORB_SLAM2" at "", but the current

  directory is"/home/odroid/ORB_SLAM2/Examples/ROS/ORB_SLAM2".  You should

  double-check your ROS_PACKAGE_PATH to ensurethat packages are found in the

  correct precedence order.

Call Stack (most recentcall first):

 /opt/ros/indigo/share/ros/core/rosbuild/public.cmake:177(_rosbuild_check_package_location)

  CMakeLists.txt:4 (rosbuild_init)

以上原因是因为没有设置好 ORB_SLAM2 的环境变量[4],打开 ~/.bash.rc文件,添加如下命令,并source ~/.bashrc ,注意要ORB_SLAM2的路径要和自己的路径对应。

 

exportROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/odroid/ORB_SLAM2/Examples/ROS

 

参考链接:

ORB SLAM2ROS实例 单目摄像头

ORB-SLAM2搭建详细过程

Ubuntu下使用单目相机运行ORB SLAM2

 



[1]参考连接:ORB-SLAM2编译遇到的一些问题

 

[2]参考连接:

make的-j命令(加速Linux程序编译)

临时增加虚拟内存

 

[3]参考连接:ROS摄像机的标定

 

[4]参考连接:[Ubuntu]ORB SLAM2 在 ROS 上编译&调试(含AR)