平台:arm,windows虚拟机都能成功系统Ubuntu14.04LTS ROS:Indigo
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
/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
$ 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工具箱。
注意:出现初始化不成功需要将摄像头距离稍微拉远一点!
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)