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 
$ source devel/setup.bash 
$ echo $ROS_PACKAGE_PATH

编译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”。
查看usb_cam设备命令是:ls /dev/video*

编译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
)

编译依然报错,尝试source对应的目录,具体操作如下:
打开.bashrc文件,命令是:

$ gedit ~/.bashrc

在.bashrc内容最后添加以下内容:

$ source ~/SLAM/devel/setup.bash

注:此处“setup.bash”文件路径应按照自己的路径设置。

运行

修改 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

你可能感兴趣的:(无人驾驶项目)