Ubuntu16.04+Ros+Usb攝像頭跑ORB SLAM2

分享一下我搭建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

https://blog.itswcg.com/2018-03/orb-slam2-run.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章