笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)

文章目录:

1 系统和摄像头准备

1.1 首先更新apt库

1.2 安装git

1.3 安装cmake

2 安装Eigen

3 安装Pangolin

3.1 安装OpenGL的依赖

3.2 别的一些库

3.3 下载Pangolin

4 安装OpenCV

5 安装BLAS and LAPACK库

6 下载ORB_SLAM2

7 下载数据集(Monocular Examples)

8 测试ORB_SLAM2

9 ROS的安装

10 安装usb_cam驱动

11 接收摄像头消息

12 运行ROS实例

13 单眼增强现实

14 错误总结

14.1 找不到链接目录 

14.2 usleep未定义

14.3 OpenCV  编译报错(1)

14.4 OpenCV  编译报错(2)

14.5  执行实例报错

14.6 打开摄像头报错

15 百度云文件地址


最近研究了一个ORB_SLAM2,即时定位与地图构建,跑了一下代码,

在环境的搭建的过程当中遇到了很多的问题,我会在文章的最后记录出来。

git上也有比较详细的实现过程,地址。

此外安装环境等软件的时候,有的是国外的服务器,下载会很慢,我将我用到的一些安装包上传至我的百度云盘。

1 系统和摄像头准备

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第1张图片

 摄像头没过多要求,我用的是  罗技(Logitech)罗技1000e

系统环境Ubuntu16.04,这里不再叙述Ubuntu的安装过程,

双系统或者虚拟机都可以,网上有很多教程。在桌面创建一个文件夹SLAM的文件夹。

1.1 首先更新apt库

sudo apt-get update

1.2 安装git

sudo apt-get install git

1.3 安装cmake

sudo apt-get install cmake

2 安装Eigen

Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。

Download and install instructions can be found at: Required at least 3.1.0.

从官网下载,至少3.1以上版本。解压出来进行安装。在Eigen文件夹下

mkdir build
cd build
cmake ..
make
sudo make install

3 安装Pangolin

3.1 安装OpenGL的依赖

可以参考这篇文章,文章地址。

3.2 别的一些库

//GLEW:
sudo apt-get install libglew-dev

//Boost:
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

//Python2/Python3:
sudo apt-get install libpython2.7-dev

//编译基础库
sudo apt-get install build-essential

3.3 下载Pangolin

cd SLAM 打开终端

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin

mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
make -j     //make
(建议不要使用make -j,使用make。如果用make -j是使用多处理器编译,可能造成死机)

4 安装OpenCV

相关依赖:

a、必须依赖

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev
libavformat-dev libswscale-dev

b、可选依赖,最好也装上

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

安装OpenCV

从官网下载OpenCV,选择对应的版本,我这里下载的是opencv-3.2.0。

进入OpenCV文件夹,打开终端

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

//编译安装
make
sudo make install

编译过程很慢,耐心等待吧。

sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到。

sudo gedit /etc/ld.so.conf.d/opencv.conf

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第2张图片

执行如下命令使得刚才的配置路径生效

sudo ldconfig 

OpenCV安装好了之后,进行测试一下。

找到 安装的文件夹
cd 到 /home/qiuhao/software/opencv-3.2.0/samples/cpp/example_cmake  的目录下 
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下 

make build
cd build
cmake ..
make 
./opencv_example

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第3张图片

详尽安装可参考该文章。

5 安装BLAS and LAPACK库

sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev

6 下载ORB_SLAM2

cd SLAM 打开终端

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh   //使其可执行

等待编译。=======================================

7 下载数据集(Monocular Examples)

TUM Dataset、KITTI Dataset、EuRoC Dataset  三种数据集

kitti 数据集 比较麻烦,得全部下载,这里选择TUM数据集中的一个。下载地址

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第4张图片

也可以试试别的数据集,国外的服务器,数据集下载比较慢,漫长的等待开始。

=================================================================================

下载好了之后,将其解压到SLAM里,接下来进行测试。

8 测试ORB_SLAM2

此时SLAM下有这三个文件夹

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第5张图片

cd ORB_SLAM2  打开终端执行以下命令。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

TUMX.yaml  中的X要替换掉, 最后一个为数据集的文件夹。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../rgbd_dataset_freiburg1_360/

运行后的效果是:

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第6张图片

接下来我们用自己的摄像头来跑SLAM2。

9 ROS的安装

参考链接:https://blog.csdn.net/qq_39397000/article/details/83753968

10 安装usb_cam驱动

在桌面建创建  catkin_ws/src  文件夹。

在 catkin_ws  目录下,执行命令

catkin_make

下面安装   usb_cam

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

 安装好了后,将以下命令  添加到   home下   的.bashrc  文件(ctrl + h 可取消隐藏)   里

source /home/qiuhao/Desktop/catkin_ws/devel/setup.bash
source ~/.bashrc     //之后  source以下

安装完ros和usb_cam后,home下   的.bashrc  文件

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第7张图片

更改摄像头:在目录   catkin_ws/src/usb_cam/launch   下 。

更改   usb_cam-test.launch   文件夹里的   摄像头序号。

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第8张图片

11 接收摄像头消息

将之前编译的SLAM里的文件夹拷贝到   catkin_ws/src   下

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第9张图片

将 需要运行的   窗口    改为   摄像头的  窗口:

/usb_cam/image_raw   替换掉    /camera/image_raw

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第10张图片

 在  .bashrc   最后  添加  以下路径:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

此时  .bashrc   下   是这样的: 笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第11张图片

 

source ~/.bashrc     //之后  source以下

重新编译ORB_SLAM2,  在ORB_SLAM2  目录下执行:

chmod +x build_ros.sh
./build_ros.sh

12 运行ROS实例

首先启动ROS,再打开usb_cam  ,  在   catkin_ws/src 打开终端,运行以下命令。

roscore

同级目录下,打开另一个终端: 

roslaunch usb_cam usb_cam-test.launch

在  catkin_ws/src/ORB_SLAM2   目录下  运行ROS实例

rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

效果如下

试了以下走动的效果,摄像头最好前后移动:

如果过程中发生了别的错误,解决不了的话就重做系统再来几遍吧!    @_@

13 单眼增强现实

Running Monocular Augmented Reality Demo
This is a demo of augmented reality where you can use an interface to insert virtual cubes in planar regions of the scene. The node reads images from topic /camera/image_raw.

rosrun ORB_SLAM2 MonoAR PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
rosrun ORB_SLAM2 MonoAR Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

 当然这个实例也需要让摄像头发消息,更改  /camera/image_raw。  运行实例效果如图:

14 错误总结

14.1 找不到链接目录 

出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录 ,可参考文章

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第12张图片

查找目录

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第13张图片

将libboost_system.so与libboost_filesystem.so等复制到ORB_SLAM2/lib下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为 

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第14张图片

之后在重新编译。

14.2 usleep未定义

 not declared in this scope
             usleep(3000);
                        ^
/home/qiuhao/Desktop/SLAM/ORB_SLAM2/src/LocalMapping.cc: In member function ‘void ORB_SLAM2::LocalMapping::Run()’:
/home/qiuhao/Desktop/SLAM/ORB_SLAM2/src/LocalMapping.cc:94:28: error: ‘usleep’ was not declared in this scope
                 usleep(3000);
                            ^
/home/qiuhao/Desktop/SLAM/ORB_SLAM2/src/LocalMapping.cc:108:20: error: ‘usleep’ was not declared in this scope
         usleep(3000);
                    ^
/home/qiuhao/Desktop/SLAM/ORB_SLAM2/src/LocalMapping.cc: In member function ‘void ORB_SLAM2::LocalMapping::RequestReset()’:
/home/qiuhao/Desktop/SLAM/ORB_SLAM2/src/LocalMapping.cc:719:20: error: ‘usleep’ was not declared in this scope
         usleep(3000);

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第15张图片

解决办法:文章可参考

在以下文件的开头增加头文件

#include

需要增加unistd.h的文件有:

Examples/Monocular/mono_euroc.cc

Examples/Monocular/mono_kitti.cc

Examples/Monocular/mono_tum.cc

Examples/RGB-D/rgbd_tum.cc

Examples/Stereo/stereo_euroc.cc

Examples/Stereo/stereo_kitti.cc

src/LocalMapping.cc

src/LoopClosing.cc

src/System.cc

src/Tracking.cc

src/Viewer.cc

14.3 OpenCV  编译报错(1)

1、OpenCVError: Unspecified error (The function is not implemented. Rebuildthe library with Windows, GTK+ 2.x or Carbon support. If you are onUbuntu or Debian, install libgtk2.0-dev and pkg-config, then re-runcmake or configure script) in cvShowImage, file/home/lynn/soft/opencv/modules/highgui/src/window.cpp, line293
terminate called after throwing an instance of'cv::Exception'

  what(): /home/lynn/soft/opencv/modules/highgui/src/window.cpp:293:error: (-2) The function is not implemented. Rebuild the library withWindows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian,install libgtk2.0-dev and pkg-config, then re-run cmake or configurescript in function cvShowImage

缺少库导致,解决办法:可参考文章

sudo apt-get install build-essential cmake libgtk2.0-dev libtiff4-dev  libjasper-dev libavformat-dev libswscale-dev libavcodec-dev  libjpeg62-dev pkg-config ffmpeg

再重新编译OpenCV。 

14.4 OpenCV  编译报错(2)

编译OpenCV3.2的时候  缺少ippicv 。

解决办法,可参考文章

下载新的  ippicv  包   替换掉   

/home/qiuhao/software/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e   目录下压缩包。
笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第16张图片

14.5  执行实例报错

执行
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../rgbd_dataset_freiburg1_360/

报错
./Examples/Monocular/mono_tum: error while loading shared libraries: libpangolin.so: cannot open shared object file: No such file or directory 

======================解决办法============================

首先检查一下   这些库文件还在不
不在的话复制到   usr/lib

笔记本 Ubuntu 16.04 单目ORB_SLAM2 + ROS + usb_cam 环境的搭建与实现(地图的构建)_第17张图片

之后在ORB_SLAM2目录下,重新编译  ./build.sh  和   ./builc_ros.sh

14.6 打开摄像头报错

ERROR: cannot launch node of type [image_view/image_view]: image_view
ROS path [0]=/opt/ros/kinetic/share/ros
ROS path [1]=/home/qiuhao/Desktop/catkin_ws/src
ROS path [2]=/opt/ros/kinetic/share
ROS path [3]=...........................................................

原因是不能够打开image_view

解决办法,安装一下ros对应版本的image_view    我的是  kinetic

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

参考文章文章

15 百度云文件地址

程序有的需要下载的东西很慢,我上传至云盘。

链接:https://pan.baidu.com/s/1CP3t1muVz1kzx8ISM7AASg     提取码:gn8e 

 

 

以上内容主要参考

1、https://blog.csdn.net/u79501/article/details/68942174

2、https://blog.csdn.net/u010128736/article/details/52808650

3、https://blog.csdn.net/u013066730/article/details/79411767   opencv安装

4、https://blog.csdn.net/mrphd/article/details/79989569

你可能感兴趣的:(学习笔记)