天天看點

agx 安裝ros opencv_ORBSLAM 2 + Ubuntu 16.04 + ROS Kinetic 安裝全過程

@ORBSLAM 2 + Ubuntu 16.04 + ROS Kinetic 安裝全過程

ORBSLAM 2 + Ubuntu 16.04 + ROS Kinetic 安裝全過程

最近開始學習SLAM, 跑通整個過程還是麻煩的,在這裡記錄一下.

OpenCV 安裝

https://github.com/raulmur/ORB_SLAM2 這裡官網編譯使用3.2.0, 為了防止之後出現版本不相容問題,建議安裝 opencv3.2.0 安裝的時候cmake 標明 安裝位置,之後再在編譯前修改Cmakelist 尋找我們安裝的着一個版本的 opencv

git clone https://github.com/opencv/opencv/tree/3.2.0-rc  opencv
cd opencv
mkdir build
cd build 
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/lib
make -j
sudo make install           

注意:如果之前安裝過opencv, 最好将上面的 /usr/local/lib 修改為自己建立或者已知的檔案夾, 并且記錄,防止之後出現版本不相容問題.

ROS Kinetic install

Ros安裝 參考:https://www.jianshu.com/p/68f88e377850

說明:

source /opt/ros/kinetic/setup.zsh

當你使用zsh 終端時, 同樣的,建立新的ros 環境 source setup.zsh, 使用 bash 當你用bash 終端.

ORB SLAM2 配置

這裡參考 https://www.jianshu.com/p/dbf39b9e4617 理論上在這裡不會有什麼問題 建立工作區:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin_make           

設定ros workspace :

source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash           

USB CAM

$ cd catkin_ws/src
$ git clone https://github.com/ros-drivers/usb_cam.git
$ cd usb_cam
$ mkdir build
$ cd build
$ cmake ..
$ make           

ORB_SLAM

# 安裝 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 catkin_ws/src
$ git clone https://github.com/raulmur/ORB_SLAM2.git           

直到最後 編譯

cd ORB_SLAM2 

##這裡也應該修改所需要的opencv 路徑, 打開CMakeLists, 參考本文最後,修改為find_package( OpenCV 3.2.0  EXACT PATHS /home//OpenCV-3.2.0 
./build.sh           

如果也沒有問題 可以嘗試下

./build_ros.sh           

可以測試:

# 3個終端
$ roscore
$ roslaunch usb_cam usb_cam-test.launch
$ rosrun ORB_SLAM2 Mono src/ORB_SLAM2/Vocabulary/ORBvoc.txt src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml           
agx 安裝ros opencv_ORBSLAM 2 + Ubuntu 16.04 + ROS Kinetic 安裝全過程

界面大概如此

到這裡成功的話,恭喜你, 天選之子. 編譯失敗的話可以參考下面的解決方式.包括opencv 以及部配置設定置問題

問題及解決方式

1 undefined reference to symbol '_ZN5boost6system15system_categoryEv

這裡是因為boost_system 沒有被包含

cd Examples/ROS/ORB_SLAM2/
vim CMakeLists.txt           

找到

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
)           

改成

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
)           

### 2 Cannot Lauch node image_view

這個比較好解決, 缺少這個node 安裝就可以了.

sudo apt-get install ros-kinetic-image-view           

3 OpenCV 相關問題

Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName

網上看了很多人都碰到這個問題了 Ros 和opencv 版本比對問題, 這個比較複雜. ROS 中使用cv_bridge 對opencv 和ros 進行連結, 出現問題有兩種可能:

  1. 安裝cv_bridge 時所連結的版本與實際我們ORB_SLAM 編譯時使用的 opencv 版本不一緻
  2. 二者所依賴的opencv 庫與 ORB_SLAM 不一緻. 解決方式 參考了https://www.cnblogs.com/cv-pr/p/5366764.html 我們在安裝ros 時候自帶安裝了 ros-kinetic-cv-bridge 需要強行解除安裝
sudo apt-get remove ros-indigo-cv-bridge           

接着我們自己手動在這個 workspace 裡編譯 cv_bridge

cd catkin_ws/src  #進入src
git clone https://github.com/ros-perception/vision_opencv.git   # 下載下傳vision_opencv
cd vision_opencv/cv_bridge           

打開 CMakeLists.txt 找到 

- find_package(OpenCV 3 REQUIRED
-   COMPONENTS
-     opencv_core
-     opencv_imgproc
-     opencv_imgcodecs
-   CONFIG
- )
+ 
 -set(_opencv_version 3)           
删除

, 并且添加

find_package( OpenCV 3.2.0  EXACT PATHS /home/OpenCV-3.2.0 )           

這裡opencv3.2.0 所對應的path 是 /home/OpenCV-3.2.0,你應該修改成你需要的位置, 這裡強制讓cv_bridge 尋找到我們需要的version. 我們回到工作空間中

cd ../../..
catkin_make --pkg cv_bridge           

對cv_bridge 進行編譯. 此時 ,我們ROS 中對應的opencv版本已經固定為3.2.0了. 我們接着編譯ORB_SLAM

cd src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/           

同樣找到CMakeLists.txt 删除下面幾行

-find_package(OpenCV 3.0 QUIET)
-if(NOT OpenCV_FOUND)
-   find_package(OpenCV 2.4.3 QUIET)
-   if(NOT OpenCV_FOUND)
-      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
-   endif()
-endif()           

添加

find_package( OpenCV 3.2.0  EXACT PATHS /home/OpenCV-3.2.0 ) #與上一步一緻           

這裡和上一步是一樣的,目的是為了我們編譯時使用同一個opencv

到這裡就結束了,可以回到

cd ORB_SLAM2
./build.sh
./build_ros.sh           

繼續閱讀