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上也有比较详细的实现过程,地址。
此外安装环境等软件的时候,有的是国外的服务器,下载会很慢,我将我用到的一些安装包上传至我的百度云盘。
摄像头没过多要求,我用的是 罗技(Logitech)罗技C 1000e
系统环境Ubuntu16.04,这里不再叙述Ubuntu的安装过程,
双系统或者虚拟机都可以,网上有很多教程。在桌面创建一个文件夹SLAM的文件夹。
sudo apt-get update
sudo apt-get install git
sudo apt-get install cmake
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
可以参考这篇文章,文章地址。
//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
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是使用多处理器编译,可能造成死机)
相关依赖:
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
执行如下命令使得刚才的配置路径生效
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
详尽安装可参考该文章。
sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
cd SLAM 打开终端
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh //使其可执行
等待编译。=======================================
TUM Dataset、KITTI Dataset、EuRoC Dataset 三种数据集
kitti 数据集 比较麻烦,得全部下载,这里选择TUM数据集中的一个。下载地址
也可以试试别的数据集,国外的服务器,数据集下载比较慢,漫长的等待开始。
=================================================================================
下载好了之后,将其解压到SLAM里,接下来进行测试。
此时SLAM下有这三个文件夹
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/
运行后的效果是:
接下来我们用自己的摄像头来跑SLAM2。
参考链接:https://blog.csdn.net/qq_39397000/article/details/83753968
在桌面建创建 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 文件
更改摄像头:在目录 catkin_ws/src/usb_cam/launch 下 。
更改 usb_cam-test.launch 文件夹里的 摄像头序号。
将之前编译的SLAM里的文件夹拷贝到 catkin_ws/src 下
将 需要运行的 窗口 改为 摄像头的 窗口:
/usb_cam/image_raw 替换掉 /camera/image_raw
在 .bashrc 最后 添加 以下路径:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS
source ~/.bashrc //之后 source以下
重新编译ORB_SLAM2, 在ORB_SLAM2 目录下执行:
chmod +x build_ros.sh
./build_ros.sh
首先启动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
效果如下
试了以下走动的效果,摄像头最好前后移动:
如果过程中发生了别的错误,解决不了的话就重做系统再来几遍吧! @_@
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。 运行实例效果如图:
出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录 ,可参考文章
查找目录
将libboost_system.so与libboost_filesystem.so等复制到ORB_SLAM2/lib下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为
之后在重新编译。
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);
解决办法:文章可参考
在以下文件的开头增加头文件
#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
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。
编译OpenCV3.2的时候 缺少ippicv 。
解决办法,可参考文章
下载新的 ippicv 包 替换掉
/home/qiuhao/software/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e 目录下压缩包。
执行
./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
之后在ORB_SLAM2目录下,重新编译 ./build.sh 和 ./builc_ros.sh
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
参考文章文章
程序有的需要下载的东西很慢,我上传至云盘。
链接: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