跑别人的数据集总感觉不如自己跑这舒服,所以我就自己用自带的摄像头跑了一次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 打开http://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
这时候,你需要进行进行初始化,拿着电脑多走走吧。最后,贴上我的图吧
整体感觉,效果还是很不错的,在特征点多的地方比较好使,有时候也不太好使,总是提示进行重定位!
评论(0)
您还未登录,请登录后发表或查看评论