Ubuntu 16 ORB_SLAM2使用KinectV2在ROS上运行总结


基本配置:Ubuntu 16.04 LTS ,ROS::Indigo(kinetic failed!),Opencv2.4.13,主机只有集成显卡,还有KinectV2

KinectV2 驱动libfreenect2

可以参考http://www.cnblogs.com/hitcm/p/5118196.html

或者自己上https://github.com/OpenKinect/libfreenect2

这个过程好像没有出现什么问题

./Protonect gl ./Protonect cl ./Protonect cpu 这三个打开Kinect的性能有差异

iai_kinect2

https://github.com/code-iai/iai_kinect2    可能需要安装依赖库PCL,EIGEN, OPENCL

官方说明不支持opencv3,安装成功后,如果有ROS就可以运行

roscore
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2
rosrun kinect2_viewer kinect2_viewer sd cloud
空格可以保存图片

还可以标定,显示拍照,用的是opencv的棋盘标定,我这里终端会出现错误,但是不影响程序运行,程序操作都在图片的窗体下进行就可以了,还有就是要棋盘被标记了之后才能保存,大家可以留意下。还有使用sd格式的时候,我保存的图竟然是一张RGB与深度合成的图,这里值得注意。

rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record color
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate color

ROS安装

如前面所说我用的是ubantu16,ROS官方提供的非源码安装就只有kinetic,所以我乖乖的安装了kinetic,按照官网提供的方法安装就没什么问题。不过后面就出事了,因为kinetic自带安装opecv3.1.0,同时ROS官方还说opencv3有诸多好处- -!,这里先挖个坑。

kinetic不能用,就只能用别的ROS,这里我选用了indigo。问题来了,怎么安装两个ROS系统呢,其实ROS不同版本只要不安装在同一路径就不会有什么问题。我安装的indigo是源码安装(ubantu 16的痛T T!),也是按照官方说明执行到

./src/catkin/bin/catkin_make_isolated --install-space /opt/ros/indigo --install -DCMAKE_BUILD_TYPE=Release
反正我就是报错了,折腾了一段时间,-DCMAKE_BUILD_TYPE=Release,将Release改成Debug就神奇的编译通过了。

两个ROS是否能同时共存,只要环境变量只有一个版本,这是可以的,输出环境变量主要靠各版本的setup.bash,如果把ROS的工作空间都export了在环境变量中,也要注释掉,因为工作空间会有找创建它的ROS,输出的PATH中会有ROS的路径。还有没有其他方法,这个大家可以分享,大神请指导。

ORB_SLAM2在ROS上运行

这里参考的是高博的文章 视觉SLAM实战(二):ORB-SLAM2 with Kinect2   http://www.cnblogs.com/gaoxiang12/p/5161223.html   按照高博的流程,应该不会有什么问题。

ORB_SLAM2:  https://github.com/raulmur/ORB_SLAM2 提供了很多例子与教程,也支持不同原数据,单目,双目,RGBD。KinectV2就是用RGBD拉。ORB_SLAM2可以在ROS上实时运行,也可以不用ROS,仅使用图片进行离线运行,同时还有很多相关的函数求误差等。 安装方法也是按照官方安装即可,依赖库也需要安装,推荐使用git clone。

我第一次是使用kinetic运行高博的贴出来的代码,果然我也遇到留言的人所说的问题,cmake的链接出错。include_directories中加上ORB_SLAM2的文件路径,主要是要告诉cmake 头文件在哪里,这也跟你调用头文件的方式有关,我是#include"include/System.h"。target_link_libraries中先是要连libORB_SLAM2.so,我还报了两个文件没找到,第一个是pangolin相关的,所以也连上libpangolin.so;另外一个是Eigen3的,说是路径不存在,这个好像是跟Eigen3自己有关系,网上找的解决办法是参考https://askubuntu.com/questions/491067/eigen-installation-seemed-to-work-but-i-still-cant-make-eigen-work里面说的

sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen
但是这个链接做法不太靠谱,这个可能是Eigen更新版本后路径的问题了。搞完这些后,程序就可以在ROS上运行了。

在kinetic上运行时候,到了FileStorage读取yaml配置的时候,程序喷出了一个bad argument的错误,定位在ros自身的opencv3.1.0中,有机会把这个贴出来,因为现在我的ROS是indigo,错误不在了。网上只有一个人发过跟我一样的问题,唯一的留言竟然是I have the same problem with you.  这叫人崩溃啊。看了源码,opencv3.1.0中FileStorage多了一个2参的构造函数,可能原因是在这里。同时kinetic是优先获取opencv3的,官网有说怎么使用opencv2,但是我没有成功。值得注意的是,这个问题我在单独使用ROS读取yaml文件的时候,却没有出现。

在我用不了kinetic执行ORB_SLAM2,又没有安装成功indigo的时候,我改了iai里面viewer.cpp,让其作为拍照的功能,图片保存下来,把图片送去ORG_SLAM2中让其脱离ROS执行,这里计一下,就是我使用qhd以上的格式时候程序运行得非常慢。最后说一下在indigo上的ORB_SLAM2的执行情况,效果还是可以的,其他地方有待研究。



猜你喜欢

转载自blog.csdn.net/Fate_fjh/article/details/52074140
今日推荐