跑别人的数据集总感觉不如自己跑这舒服,所以我就自己用自带的摄像头跑了一次orb_slam2,结果发现坑还不少,所以把坑都写出来,避免以后有和我一样的朋友踩坑,这是一篇资源汇总帖。

我的环境:ubuntu14.04+ros indigo+opencv2.8.4(最开始是3.1,后来发现不行,所以就改了)

首先,先标定相机吧,我这里用的是MATLAB标定工具箱,我觉得能够用工具箱解决的,没有必要自己再去写一遍,我参考这篇标定博客

这里我给出我标定用的图片,用A4纸打印就好!

1.在MATLAB中找到标定工具箱

在app里面找到标定工具箱

打开工具箱。

2.导入图像,按住shift,把需要导入的图像全部导入

打开导入图像。

按住shift一次全部导入。

3.开始标定

最开始会要求输入实际尺寸,就是每一格的实际尺寸,我这里是20mm。

接下来需要,开始标定了,点击按钮即可。

运行结束之后,如图所示:

看,右上角,有显示标定误差,一般标定误差在0.3以内比较好。

4.得到需要的8个数据

接下来,把数据导出来,点击按钮即可。

这里导出数据的时候,只选相机参数就可以。然后返回matlab主界面,把数据读出来就好了。

内参矩阵

径向畸变

切向畸变

我这里的数据是 [公式] [公式] [公式] [公式] [公式] [公式] [公式] [公式]

把相机标定完了,就进入ubuntu系统,准备开始跑orb_slam。

第二步,先安装好ros,这个没啥坑,具体的安装步骤见ros官网,我觉得这个是最完整的。由于官网已经很全了,自己就没有标。

第三步,构建catkin_ws工作空间。

mkdir  -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

构建好空间之后,我们需要安装一个软件包,ros已经提供了,这里我们可以直接安装。

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 

接下来我们可以检验一下是否安装完成。

打开ros

roscore

运行

roslaunch usb_cam usb_cam-test.launch
 

如果是外接的摄像头,需要在src/usb_cam-develop/launch文件中的launch文件里面更改。具体的步骤,可以看这篇博客在ROS中使用usb摄像头跑ORB SLAM2

第三步,编译orb_slam2及相关库。根据orb_slam列出来的依赖项都需要安装。

安装Pangolin

先安装一些依赖项

sudo apt-get install libglew-dev  
sudo apt-get install cmake  
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

然后安装Pangolin

git clone https://github.com/stevenlovegrove/Pangolin.git  
cd Pangolin  
mkdir build  
cd build  
cmake -DCPP11_NO_BOOST=1 ..  
make -j 

安装Eigen3

sudo apt-get install libeigen3-dev

Eigen与其他库不同,它是一个由头文件搭建起来的库,Eigen头文件的默认安装位置在“/usr/include/eigen3/”中。我们在使用时,只需引入Eigen头文件,不需要链接它的库文件,在CMakeLists.txt里添加Eigen头文件的目录。

下载orb_slam2

把orb_slam2安装在我们最开始建立的catkin_ws空间里面。

cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

接下来,我们就需要安装orb_slam的一些依赖项。先安装g2o,安装g2o之前,需要先安装一下依赖项。这里最后一个需要注意一下,具体可以看我的博客slam安装中libcholmod-dev文件找不到的解决办法 - hitfangyu的博客 - CSDN博客

sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2 
libcholmod-dev
(注:最后一个依赖项需要table键来填充名称)

然后安装orb_slam提供的g2o工具

cd catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake ..
make

接下来编译DBoW2

cd catkin_ws/src/ORB_SLAM2/Thirdparty/DBoW2
mkdir build
cd build
cmake ..
make

一切准备就绪,接下来编译orb_slam2

cd catkin_ws/src/ORB_SLAM2
mkdir build 
cd build 
cmake ..
make 

接下来需要编译ROS的example,这里需要注意,我们这里需要先进行一下更改,不然摄像头的帧传不到orb_slam2里面。catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src 打开ros_mono.cc

把这一行注释掉,换为如下:

ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);

这一行代码的意思是:将subscribe的话题改为/usb_cam/image_raw。

然后我们再开始编译ROS的example

cd catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/
mkdir build
cd build
cmake ..
make 

到此为止,我们已经编译完成了。

更改参数配置

打开orb_slam2文件夹下面的Examples/ROS/ORB_SLAM2路径下的Asus.yaml文件中,改为如下参数:

这里是我的参数。

到此为止,就基本完成了配置。

开始运行

1.首先打开ros的终端

roscore

2.打开摄像头

roslaunch usb_cam usb_cam-test.launch

3.运行orb_slam

rosrun ORB_SLAM2 Mono /home/电脑名字/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/电脑名字/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

这里的电脑名字,请替换为你自己的。

这里说一下,如果你装的是opencv3.1或者3.3的话,应该都会报错,无法启动,错误类型是opencvError,提示你有地方要求是2.4.8。我在这里找了很久,发现是因为ros把openv版本写死了,他只认这个版本,所以没办法,我只能改了。我在官网也没找到2.4.8的,后来在github上面找到了,这里把地址贴出来:opencv2.4.8.

4.打开rqt_graph

rqt_graph 

这时候,你需要进行进行初始化,拿着电脑多走走吧。最后,贴上我的图吧

整体感觉,效果还是很不错的,在特征点多的地方比较好使,有时候也不太好使,总是提示进行重定位!