Ubuntu14.04(indigo)实现RGBDSLAMv2(数据集和实时Kinect v2)

一、在.bag数据集上跑RGBDSLAMv2

RGBDSLAMv2指的是Felix Endres大神在2014年发表论文,实现的基于RGB-D 摄像头的SLAM系统,用于创建三维点云或者八叉树地图。

安装步骤重点参考原gitbub网址:https://github.com/felixendres/rgbdslam_v2

说明本人台式机硬件配置:

Intel(R)Core(TM)i5-6500 CPU @ 3.20GHz 3.20GHz;
RAM: 16.0GB;
GPU: NVIDIA GeForce GTX 1060 6GB。

1. 在Ubuntu14.04中安装ROS Indigo,参考网址:http://wiki.ros.org/cn/indigo/Installation/Ubuntu

2. 安装opencv2.4.9,参考网址:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/

               http://blog.csdn.net/baoke485800/article/details/51236198

系统更新

sudo apt-get update
sudo apt-get upgrade

安装相关依赖包

sudo apt-get install build-essential libgtk2.-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394--dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev

利用wget获得Opencv2.4.9源文件,等下载完成后解压

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip
unzip opencv-2.4..zip
cd opencv-2.4.9

cmake编译安装opencv源文件包

mkdir build
cd build
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..
make -j4
sudo make install

配置opencv相关

sudo gedit /etc/ld.so.conf.d/opencv.conf

在打开的文件中(空文件也可)添加如下代码并保存

/usr/local/lib

执行以下代码

sudo ldconfig

打开另外一个文件

sudo gedit /etc/bash.bashrc

在文件末尾添加如下并保存退出

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

检查opencv是否安装成功

cd ~/opencv-2.4./samples/c
chmod +x build_all.sh
./build_all.sh
老版本的C语言接口
./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"--scale=1.5 lena.jpg

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"--nested-cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml" --scale=1.5 lena.jpg

新的C++接口

~/opencv-2.4./build/bin/cpp-example-grabcut ~/opencv-2.4./samples/cpp/lena.jpg

OK,测试成功。(更多测试详见上面参考网址)

opencv官网unix版本下载地址:https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/

3. 安装pcl-1.7.2,使用github源码安装,地址:https://github.com/PointCloudLibrary/pcl

4. 创建catkin工作空间:

#为rgbdslam单独创建一个catkin工作空间

mkdir rgbdslam_catkin_ws
cd rgbdslam_catkin_ws
mkdir src
cd ~/rgbdslam_catkin_ws/src

#将其初始化为catkin工作空间的源码存放文件夹

catkin_init_workspace

#进入catkin工作空间目录

cd ~/rgbdslam_catkin_ws/

#编译新建的catkin工作空间,生成build、devel文件夹,形成完整的catkin工作空间

catkin_make

#调用终端配置文件

source devel/setup.bash

5. 源码安装g2o, 参考原gitbub网址:https://github.com/felixendres/rgbdslam_v2

6. 编译安装RGBDSLAMv2

#进入catkin工作空间的源码存放文件夹

cd ~/rgbdslam_catkin_ws/src

#下载github上对应ROS Indigo版本的rgbdslam源码

wget -q http://github.com/felixendres/rgbdslam_v2/archive/indigo.zip

#解压

unzip -q indigo.zip

#进入catkin工作空间目录

cd ~/rgbdslam_catkin_ws/

#ROS依赖包更新

rosdep update
yuanlibin@yuanlibin:~/rgbdslam_catkin_ws$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index.yaml
Add distro "groovy"
Add distro "hydro"
Add distro "indigo"
Add distro "jade"
Add distro "kinetic"
Add distro "lunar"
updated cache in /home/yuanlibin/.ros/rosdep/sources.cache

#安装rgbdslam依赖包

rosdep install rgbdslam

正确运行后显示:#All required rosdeps installed successfully

#编译rgbdslam

catkin_make

正确运行后显示:[100%] Built target rgbdslam

source devel/setup.bash

最后运行

roslaunch rgbdslam rgbdslam.launch

会出现错误:

NODES
/
rgbdslam (rgbdslam/rgbdslam) ROS_MASTER_URI=http://localhost:11311 core service [/rosout] found
ERROR: cannot launch node of type [rgbdslam/rgbdslam]: rgbdslam
ROS path []=/opt/ros/indigo/share/ros
ROS path []=/opt/ros/indigo/share
ROS path []=/opt/ros/indigo/stacks
No processes to monitor
shutting down processing monitor...
... shutting down processing monitor complete

解决方法是将工作空间的路径加到 .bashrc 文件中,如本电脑示例::

echo "source /home/yuanlibin/rgbdslam_catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

至此,RGBDSLAMv2已编译安装完成。

7. 下载TUM的.bag数据集文件,下载地址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download

例如:rgbd_dataset_freiburg1_xyz.bag

查看.bag数据集的信息:

终端1

roscore

终端2

rosbag play rgbd_dataset_freiburg1_xyz.bag

终端3

rostopic info

最后的命令不要按enter键按tab键进行查看

yuanlibin@yuanlibin:~$ rostopic info /
/camera/depth/camera_info /cortex_marker_array
/camera/depth/image /imu
/camera/rgb/camera_info /rosout
/camera/rgb/image_color /rosout_agg
/clock /tf
yuanlibin@yuanlibin:~$

然后修改路径:/home/yuanlibin/rgbdslam_catkin_ws/src/rgbdslam_v2-indigo/launch下的rgbdslam.launch文件

其中第8、9行的输入数据设置

   <param name="config/topic_image_mono"              value="/camera/rgb/image_color"/>
<param name="config/topic_image_depth" value="/camera/depth_registered/sw_registered/image_rect_raw"/>

需要修改为上述数据集相应的信息,修改如下:

   <param name="config/topic_image_mono"              value="/camera/rgb/image_color"/>
<param name="config/topic_image_depth" value="/camera/depth/image"/>

在该文件中可以修改系统使用的特征:

SIFT, SIFTGPU, SURF, SURF128 (extended SURF), ORB.

8. 在数据集上跑RGBDSLAMv2

终端1

roscore

终端2

rosbag play rgbd_dataset_freiburg1_xyz.bag

终端3

roslaunch rgbdslam rgbdslam.launch

最后,就可以看到在数据集上运行RGBDSLAMv2重建的三维点云图了。

二、基于Kinect v1实时运行RGBDSLAMv2

1. 进行ROS indigo下Kinect v1的驱动安装与调试,可参考:http://www.cnblogs.com/yuanlibin/p/8608190.html

2. 在终端执行以下命令:

终端1

roscore

终端2

roslaunch rgbdslam openni+rgbdslam.launch

3. 移动Kinect v1,就可以看到实时重建的三维点云了。

三、基于Kinect v2实时运行RGBDSLAMv2

1. 运行Kinect v2 查看其输出数据信息:

终端1

roslaunch kinect2_bridge kinect2_bridge.launch

终端2(输入命令rostopic info后,不要按enter,要按table键进行查看)

yuanlibin@yuanlibin:~$ rostopic info /
/kinect2/bond
/kinect2/hd/camera_info
/kinect2/hd/image_color
/kinect2/hd/image_color/compressed
/kinect2/hd/image_color_rect
/kinect2/hd/image_color_rect/compressed
/kinect2/hd/image_depth_rect
/kinect2/hd/image_depth_rect/compressed
/kinect2/hd/image_mono
/kinect2/hd/image_mono/compressed
/kinect2/hd/image_mono_rect
/kinect2/hd/image_mono_rect/compressed
/kinect2/hd/points
/kinect2/qhd/camera_info
/kinect2/qhd/image_color
/kinect2/qhd/image_color/compressed
/kinect2/qhd/image_color_rect
/kinect2/qhd/image_color_rect/compressed
/kinect2/qhd/image_depth_rect
/kinect2/qhd/image_depth_rect/compressed
/kinect2/qhd/image_mono
/kinect2/qhd/image_mono/compressed
/kinect2/qhd/image_mono_rect
--More--

2. 在路径/home/yuanlibin/rgbdslam_catkin_ws/src/rgbdslam_v2-indigo/launch下新建一个rgbdslam_kinect2.launch文件,内容如下:

<launch>
<node pkg="rgbdslam" type="rgbdslam" name="rgbdslam" cwd="node" required="true" output="screen">
<!-- Input data settings-->
<param name="config/topic_image_mono" value="/kinect2/qhd/image_color_rect"/>
<param name="config/camera_info_topic" value="/kinect2/qhd/camera_info"/> <param name="config/topic_image_depth" value="/kinect2/qhd/image_depth_rect"/> <param name="config/topic_points" value=""/> <!--if empty, poincloud will be reconstructed from image and depth --> <!-- These are the default values of some important parameters -->
<param name="config/feature_extractor_type" value="ORB"/><!-- also available: SIFT, SIFTGPU, SURF, SURF128 (extended SURF), ORB. -->
<param name="config/feature_detector_type" value="ORB"/><!-- also available: SIFT, SURF, GFTT (good features to track), ORB. -->
<param name="config/detector_grid_resolution" value=""/><!-- detect on a 3x3 grid (to spread ORB keypoints and parallelize SIFT and SURF) --> <param name="config/optimizer_skip_step" value=""/><!-- optimize only every n-th frame -->
<param name="config/cloud_creation_skip_step" value=""/><!-- subsample the images' pixels (in both, width and height), when creating the cloud (and therefore reduce memory consumption) --> <param name="config/backend_solver" value="csparse"/><!-- pcg is faster and good for continuous online optimization, cholmod and csparse are better for offline optimization (without good initial guess)--> <param name="config/pose_relative_to" value="first"/><!-- optimize only a subset of the graph: "largest_loop" = Everything from the earliest matched frame to the current one. Use "first" to optimize the full graph, "inaffected" to optimize only the frames that were matched (not those inbetween for loops) --> <param name="config/maximum_depth" value=""/>
<param name="config/subscriber_queue_size" value=""/> <param name="config/min_sampled_candidates" value=""/><!-- Frame-to-frame comparisons to random frames (big loop closures) -->
<param name="config/predecessor_candidates" value=""/><!-- Frame-to-frame comparisons to sequential frames-->
<param name="config/neighbor_candidates" value=""/><!-- Frame-to-frame comparisons to graph neighbor frames-->
<param name="config/ransac_iterations" value=""/> <param name="config/g2o_transformation_refinement" value=""/>
<param name="config/icp_method" value="gicp"/> <!-- icp, gicp ... --> <!--
<param name="config/max_rotation_degree" value=""/>
<param name="config/max_translation_meter" value="0.5"/> <param name="config/min_matches" value=""/> <param name="config/min_translation_meter" value="0.05"/>
<param name="config/min_rotation_degree" value=""/>
<param name="config/g2o_transformation_refinement" value=""/>
<param name="config/min_rotation_degree" value=""/> <param name="config/matcher_type" value="ORB"/>
-->
</node>
</launch>

注意第3、4、5、7行的输入数据设置,应与上面查看到的信息一致。

在该文件中可以修改系统使用的特征:

SIFT, SIFTGPU, SURF, SURF128 (extended SURF), ORB.

3. 最后基于Kinect v2的实时运行RGBDSLAMv2

终端1

roslaunch rgbdslam rgbdslam_kinect2.launch

终端2

roslaunch kinect2_bridge kinect2_bridge.launch

缓慢移动Kinect v2,就可以看到实时重建的三维点云了。自己实现的三维点云截图如下:

图1所示为实验室工位的全景三维点云图;

图2所示为全景图中红点处的侧视图。

图1. 实验室工位的全景三维点云图

图2. 全景图中红点处的侧视图

Ubuntu14.04(indigo)实现RGBDSLAMv2(数据集和实时Kinect)的更多相关文章

  1. Ubuntu14.04下沙盒数据导入到 Neo4j 数据库(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914   (表示感谢) 前期博客 Neo4j沙盒实验申请过程 ...

  2. ubuntu14.04 and ros indigo install kinect driver--16

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 今日多次测设ros indigo install kinect driver ,提示各种失败,然 ...

  3. ubuntu14.04 rabbitmq安装与使用 --修改RabbitMQ数据存储位置

    参考:https://blog.csdn.net/tianjiewang/article/details/58383062 说明: ubuntu14.04   rabiitmq 默认 安装路径 /va ...

  4. Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践

    目录 [TOC] 1.RabbitMQ介绍 1.1.什么是RabbitMQ?   RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol ...

  5. Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]

    目录 [TOC] 1.CDH介绍 1.1.什么是CDH和CM? CDH一个对Apache Hadoop的集成环境的封装,可以使用Cloudera Manager进行自动化安装. Cloudera-Ma ...

  6. 通过rsync+inotify实现数据的实时备份

    我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...

  7. 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  8. Ubuntu14.04 Django Mysql安装部署全过程

    Ubuntu14.04 Django Mysql安装部署全过程   一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...

  9. Caffe+CUDA7.5+CuDNNv3+OpenCV3.0+Ubuntu14.04 配置参考文献 以及 常见编译问题总结

    Caffe+CUDA7.5+CuDNNv3+OpenCV3.0+Ubuntu14.04  配置参考文献 ---- Wang Xiao Warning: Please make sure the cud ...

随机推荐

  1. Asp.Net Core 轻松学系列-2从安装环境开始

    Asp.Net Core 介绍     Asp.Net Core是微软新一代的跨平台开发框架,基于 C# 语言进行开发,该框架的推出,意味着微软从系统层面正式进击 Linux 服务器平台:从更新速度开 ...

  2. node express4 + 前端自动刷新

    官网快速生成:http://www.expressjs.com.cn/starter/generator.html 1.安装  express 1.应用生成器工具 express-generator  ...

  3. javamail "535 5.7.3 Authentication unsuccessful" 问题排查

    有一家odm的服务器用Javamail发邮件的时候报错  Authentication unsuccessful  其他的有些又是正常的 网上查了一下解决方法如下 JavaMailSenderImpl ...

  4. AngularJS入门教程之数据绑定原理详解

    这篇文章主要是写给新手的,是给那些刚刚开始接触Angular,并且想了解数据帮定是如何工作的人.如果你已经对Angular比较了解了,那强烈建议你直接去阅读源代码. Angular用户都想知道数据绑定 ...

  5. leetcode-102.层序遍历二叉树(正序)· BTree

    题面 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to rig ...

  6. flask 中的ORM ( 二 )

    1 关系映射 1 多对多 1 什么是多对多 A表中的一条数据可以与B表中任意多条数据相关联 B表中的一条数据可以与A表中任意多条数据相关联 2 实现 在数据库中使用第三张表(关联表) 在编程语言中,可 ...

  7. 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别

    领域模型是领域内的概念类或现实世界中对象的可视化表示,又称为概念模型或分析对象模型,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 贫血模型是指使用的领域对象中只有s ...

  8. OSI七层与TCP/IP五层

    OSI七层与TCP/IP五层网络架构详解 OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对运维工程师来说非常有帮助.今天偶又复习了一下: (1)OSI七层模型 OSI中的层 功能 ...

  9. gojs Diagram Events(图表事件)

    GoJS涵盖了三种基本事件:DiagramEvents(图表事件).InputEvents(输入事件)以及ChangedEvents(变更事件).这一页我们讨论前两种事件:至于最后一种事件请见 Cha ...

  10. Anaconda配置Python开发环境

    Anaconda介绍 Anaconda 是在 linux.windows 和 mac os x 上执行 Python/R 数据分析和机器学习的最简单的方式并且它是开源的.它在全球拥有超过 1, 100 ...