slam新人一枚,在配置的过程中出现了很多不必要的bug,由于版本不同或是个人风格的原因很多博主给出的安装运行方法不够周全。刚好跑完完单目实时的,遂决定综合几篇教程写下这篇博文,记录一下遇到的坑也帮助自己加深印象。
1.准备工作
https://blog.csdn.net/radiantjeral/article/details/82193370#32_OpenCV_218
整体大部分流程参照上面链接给出的博主,并在其中增加了单目实时部分。
首先将Ubuntu的设置调整一下。勾选最后一个source code
接着开始安装若干基本编译工具,在终端后输入如下指令:
sudo apt-get install vim cmake
sudo apt-get install gcc g++
2. ROS Kinetic Kame 的安装和配置
http://wiki.ros.org/kinetic/Installation/Ubuntu参考这个网站的安装步骤。
2.1 下载及安装
设置计算机以接受packages.ros.org中的软件。
sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
最开始尝试这个发现连接速度很慢,后来就直接卡掉了。于是还是按照教程先连接清华大学的tuna源
sudo sh -c ‘. /etc/lsb-release && echo “deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main” > /etc/apt/sources.list.d/ros-latest.list’
接着设置密钥
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
然后我们就可以开始安装了。输入以下指令,不同版本的Ubuntu会对应不同的ros版本,比如我这个16.04对应的就是kinetic,而14.04对应的是indigo。ros的安装包也有很多类型,我个人觉得用完整版好一些。
- sudo apt-get update
- sudo apt-get install ros-kinetic-desktop-full
2.2设置环境
使用apt-get方式在 Ubuntu上安装 ROS,在使用前需要激活/opt/ros/kinetic/目录下的setup.bash文件来添加 ROS 环境变量
source /opt/ros/kinetic/setup.bash
在每次打开一个新的 shell 时,我们都需要使用上述命令激活setup.bash文件。这样很繁琐。
因此,可以添加 ROS 的环境变量,这样,当我们打开新的shell时,我们的bash会话中会自动添加环境变量。
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc #(使环境变量设置立即生效)
接着安装rosinstall
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
之后我们就可以开始测试了
开启一个终端在其中输入roscore,若出现tarted core service的字样则表示安装成功。
2.3创建ros的工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
接下来的所有工作都在 ~/catkin_ws/src 目录下完成,即在 catkin workspaces
3.ORB-SLAM2依赖项的安装
所有依赖项放在~/catkin_ws/src目录下,便于管理。
3.1 安装Pangolin,用于可视化和用户接口
安装依赖库
libglew-dev、
libpython2.7-dev、
libboost-dev、
libboost-thread-dev、
libboost-filesystem-dev:
sudo apt-get install libglew-dev libpython2.7-dev libboost-dev libboost-thread-dev libboost-filesystem-dev -y
进入~/catkin_ws/src
下载Pangolin并配置环境
cd ~/catkin_ws/src
git clone https://github.com/stevenlovegrove/Pangolin
cd ..
catkin_make
source ~/catkin-ws/devel/setup.bash
编译并安装Pangolin
cd Pangolin
mkdir build
cd build
cmake ..
make -j4
sudo make install
3.2安装OpenCV
版本最好选择2.4.13,随意挑选版本很容易导致后续出现一些不必要的bug。
首先,安装编译工具
sudo apt-get install build-essential
接着安装依赖包
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
安装可选包
do apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -y
sudo apt-get install libgtk2.0-dev -y
sudo apt-get install pkg-config -y
接!
进入~/catkin_ws/src
从GitHub下载opencv2.4.13,这不是一个 git repository,使用wget。
将下载的OpenCV解压~/catkin_ws/src目录下。
wget https://github.com/Itseez/opencv/archive/2.4.13.zip
unzip 2.4.13.zip
进入OpenCV的目录下。
编译安装OpenCV 2.4.13 源码。
cd opencv-2.4.13/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
配置OpenCV环境变量
配置环境
将opencv的库加入到路径,从而让系统可以找到
sudo vim /etc/ld.so.conf.d/opencv.conf
末尾加入/usr/local/lib,保存退出(:wq)
sudo ldconfig
使配置生效
sudo gedit /etc/bash.bashrc
末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
保存退出
sudo source /etc/bash.bashrc #使配置生效
该步骤可能会报错找不到命令,原因是source是root命令
su #(进入root权限)
有可能此处输入密码后会认证失败,那么输入sudo passwd,重置一下密码就行
source /etc/bash.bashrc
Ctrl+d #(推迟root)
sudo updatedb #更新database
测试实例
//文件名字lena.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main( )
{
Mat image;
//按照自己的目录进行路径更改
image = imread("/home/slam2/catkin_ws/src/lena.png", 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
接着编译
g++ lena.cpp -o lena.o `pkg-config --cflags --libs opencv`
运行 ./lena.o 之后会弹出Lena的照片
安装eigen3
下载并解压 Eigen3.2.10 到~/catkin_ws/src
wget https://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2
tar -xjf 3.2.10.tar.bz2
得到eigen-eigen-b9cd8366d4e8目录,重命名eigen-3.2.10
mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.10
编译安装eigen3.2.10
cd eigen-3.2.10/
mkdir build
cd build
cmake ..
make
sudo make install
4.orb-slam2的安装
注意:要安装在工作区的~/catkin_ws/src文件夹下。
cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
打开build.sh文件,将最后一行编译连接ORB-SLAM2的make -j改为make,避免卡死。如果你电脑性能良好,可自行修改jx,来提高处理速度。
接着就可以进行编译了
./build.sh
待编译完成,在ROS工作空间中就成功安装配置好了ORG-SLAM2项目。下面使用**非实时单目SLAM实例(不需要ROS平台也能运行)**测试ORB-SLAM2是否正确安装。
5运行单目slam跑数据集
在http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载一个序列,并解压。转到ORBSLAM2文件夹下,执行下面的命令。根据下载的视频序列freiburg1, freiburg2 和 freiburg3将TUMX.yaml分别转换为TUM1.yaml,TUM2.yaml,TUM3.yaml。将PATH_TO_SEQUENCE_FOLDER更改为解压的视频序列文件夹。
GitHub上给出的命令执行格式:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txtExamples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
在我的虚拟机里命令样例如下:
./Examples/Monocular/mono_tumVocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/slam2/Downloads/rgbd_dataset_freiburg1_xyz
6.USB_cam安装
1.下载usb_cam源码并配置环境
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
source ~/catkin-ws/devel/setup.bash
2.编译usb_cam
cd usb_cam
mkdir build
cd build
cmake ..
make
3.测试usb摄像头
(1)打开新的终端,运行roscore
(2)回到原终端,先进入launch文件夹,再运行usb_cam中的launch文件,如果可以成功运行看到图像则安装成功。
cd launch
roslaunch usb_cam usb_cam-test.launch
该usb_cam-test.launch是usb_cam中自带的launch文件。其中video_device的默认设备为video0,可以根据情况更改。
如果不了解自己的usb摄像头为video几,可以运行如下命令查看:
ls /dev/video*
如果出现select timeout的问题,多半是由于端口的原因。编辑虚拟机设置,将USB2.0改为3.0并进行重启,一般来说就可以弹出摄像头界面。
7.运行实时slam
首先我们应该对摄像头进行标定,方法很多。自行百度,标定完会得到一个yaml的文件。放到
home/xxx/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2下。
在home目录找到隐藏文件.bashrc,在最下面添加source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
进入catkin_ws/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
在这里可能会遇到一个bug
不要慌张。打开/ros/orb_slam2/src 的cmakelists.txt.文件,在libORB_SLAM2.so的下面加上-lboost_system
再进行./build_ros.sh的编译
编译完成后会的到一个mono文件
那我们就可以运行实时slam了
首先,打开一个终端输入rosrun
再打开一个终端输入,roslaunch usb_cam usb_cam-test.launch
最后打开一个终端输入,rosrun ORB_SLAM2 Mono /home/xxx/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xxx/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/my.yaml