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

界面大概如此

到这里成功的话,恭喜你, 天选之子.
编译失败的话可以参考下面的解决方式.包括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
-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
)

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_ros.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值