分享一下我搭建ORB SLAM2環境的過程。
實驗環境:Ubuntu 16.04 + Ros Kinetic + Opencv3 + 羅技C170 usb攝像頭
安裝Ubuntu 16.04
參考:http://www.cnblogs.com/Duane/p/6776302.html
作者在文中安裝的雙系統,如果安裝獨立的Ubuntu16.04系統,可參考其他步驟。
opencv 3.2安裝
參考:https://blog.csdn.net/weixin_42595525/article/details/83105036
查看已安裝Opencv版本,命令是:pkg-config --modversion opencv
Ros安裝
參考:https://www.jianshu.com/p/68f88e377850
這裏我安裝的是“ROS-Kinetic”版本。
ROS運行命令:$ roscore
ORB SLAM2安裝
配置Ros環境
$ mkdir -p ~/SLAM/src
$ cd ~/SLAM/src $ catkin_init_workspace
$ cd ..
$ catkin_make
$ echo "source ~/SLAM/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
編譯usb_cam
$ cd ~/SLAM/src
$ git clone https://github.com/ros-drivers/usb_cam.git
$ cd usb_cam
$ mkdir build
$ cd build
$ cmake ..
$ make
在運行usb_cam的時候出現了找不到“image-view”的錯誤,解決方式是:在終端輸入:sudo apt-get install ros-kinect-image-view
;
注意此處我的ROS版本是“ros-kinect”。
編譯ORB_SLAM2
# 安裝 g++
$ sudo apt-get install gcc g++
# 安裝 Pangolin
$ sudo apt-get install libglew-dev #安裝Glew
$ sudo apt-get install cmake #安裝CMake
$ sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev #安裝Boost
$ sudo apt-get install libpython2.7-dev #安裝Python2'Python3
$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake -DCPP11_NO_BOOST=1 ..
$ make
$ sudo make
# 安裝Opencv
$ sudo apt-get update
$ sudo apt-get install libcv-dev
# 安裝Eigen
$ sudo apt-get install libeigen3-dev
# 安裝BLAS,LAPACK
$ sudo apt-get install libblas-dev
$ sudo apt-get install liblapack-dev
# 編譯ORB SLAM2
$ cd SLAM/src
$ git clone https://github.com/raulmur/ORB_SLAM2.git
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh #如果運行電腦卡死的話,請修改build.sh文件中所有的make -j爲make
$ ./build_ros.sh
如果./build_ros.sh
遇到報錯:
Undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
解決方法可參考:https://github.com/raulmur/ORB_SLAM2/issues/494
我的解決方法是:
打開ORB_SLAM2/Examples/ROS/ORB_SLAM2文件夾下的CMakeLists.txt,在set(LIBS …)中添加-lboost_system
,如下:
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)
運行
修改 ros_mono.cc
進入SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src 打開ros_mono.cc。
把ros::Subscriber sub = nodeHandler.subscribe(“/camera/image_raw”, 1, &ImageGrabber::GrabImage,&igb);
中的camera改爲usb_cam
重新編譯
$ ./build_ros.sh
啓動
#打開3個終端
roscore #啓動ROS
roslaunch usb_cam usb_cam-test.launch #調用攝像頭
rosrun ORB_SLAM2 Mono ~/SLAM/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml #這裏的`Asus.yaml`根據自己的文件修改名稱;
參考:
https://blog.csdn.net/lixujie666/article/details/80475451