Advertisement

Ubuntu16.04下用kinect v2实现RTABMAP-ROS建图

阅读量:

Ubuntu16.04下用kinect v2实现RTABMAP-ROS建图

我最近首次接触了Visual SLAM的相关知识,在深入研读了高翔教授的《视觉SLAM十四讲》后,对于理论部分目前还存在诸多疑问。

最近再次开始尝试运用Kinect V2来进行RTABMAP建图工作。 网络上查阅了许多相关资料后发现 大多数关于SLAM的内容都是基于ROS平台开发的 因此我也加入了这一领域继续探索 但在过程中遇到了不少挑战 最终经过一番努力后终于实现了目标 并为了便于以后查阅参考 在此特别记录下来

一、前期准备

1.安装ROS环境:<>

第二步:完整步骤说明

  1. 下载并安装Kinect V2驱动程序
    在完成上述步骤后,请按照以下完整步骤说明进行操作:
  • 首先下载适合您操作系统的Kinect V2驱动程序
  • 按照提示完成安装过程
  • 确保安装路径正确配置
  • 打开ROS IDE或其他推荐的开发工具
  • 进入ROS环境并执行相应的初始化命令
  • 确认摄像头已正确连接并识别物体

二、安装rtabmap-ros包

1.参考文章

官网:http://introlab.github.io/rtabmap/
技术说明:
github外文参考文章:https://github.com/introlab/rtabmap_ros#installation
网上搜索发现的一篇较为详尽的技术说明:https://www.ncnynl.com/archives/201709/1991.html

2.安装

安装方法总共分两种, 一种是直接deb安装,一种是源码安装。

安装源码可参考上文中的示例程序。本人曾亲手尝试过一次,在编译RTABMAP过程中遇到**/usr/bin/ls无法定位到lBoost::timer**的问题。为了消除这一问题,我花了两个星期的时间可惜最终未果。

所以这里不建议大家去折腾源码安装,费力不讨好。

我也试着将源码rtabmap_ros复制至~/'catkin_ws/src'目录中。
接着前往~/'catkin_ws'目录中运行 catkin_make。
然而却遇到了编译错误。
这种方法最终也被放弃了。

实际上,GitHub官方已有明确说明,rtabmap已实现了对ROS的整合。因此只需完成一项操作即可实现目标(需关注所使用的ROS版本号)。

复制代码
    sudo apt-get install ros-kinetic-rtabmap-ros

三、运行测试

在众多测试方法中尝试启动深度相机时(采用该技术的方法包括rtabmap等),我却经常遇到连接设备失败的情况。经过分析发现原因在于设置界面中缺少kinect v2相关选项(导致无法识别目标),这一问题看似已经存在但一直未能解决。尽管用户也意识到该选项并未直接可用(但用户却发现该选项并未直接可用),却始终未能实现选择。

欢迎各路大神给予方案建议。

1.参考文章

参考相关资源http://wiki.ros.org/rtabmap_ros/Tutorials/HandHeldMapping
博客<> 提供了详细介绍了基于移动机器人平台实现视觉目标跟踪与避障的技术方案;
另一篇博客<> 则全面阐述了基于改进算法的实时三维环境重建方法及其在机器人路径规划中的具体应用;
此外,在实践环节中我们重点研究了如何通过优化算法提升系统的运行效率;

2. kinect v2 准备

①运行指令:

复制代码
    roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true

这时,kinect2的红外灯会亮一会然后熄灭, 白灯也会过一段时间熄灭。

打印日志[1478769022.036459690]: [Kinect2Bridge::main] 正在等待客户端建立连接。

如果遇到下面的问题:

在这里插入图片描述

请执行:

复制代码
    source ~/catkin_ws/devel/setup.bash

②查看相关节点,与测试无关,但有助于后边指令的理解

查看kinect2启动后的topic :

复制代码
    rostopic list

出现结果:
该 kinect 2 系列文件夹下包含了多分辨率下的图像数据节点。
在 hd 分辨率下的 camera_info 节点中存储有 color 图像数据以及其压缩版本。
hd 分辨率下的 image_color_rect 数据集提供了深度矩形图的压缩信息。
同样地,在 qhd 分辨率下也有对应的 image_color 和 image_depth_rect 数据集。
sd 分辨率下的 image_mono 节点则包含了单色图像及其相关的深度信息。
需要注意的是, qhd 和 sd 分辨率下的 image_mono 数据集中都包含了矩形图的压缩版本。
此外, 在 sd 分辨率下还存在 image_ir 数据节点, 其中 ir 表示红外图像。
这些红外图像数据同样具有对应的压缩版本以供后续处理使用。
值得注意的是, 该目录结构中还包含多个 ros 输出日志节点, 包括原始输出以及其聚合版本的日志记录。

其中,
hd 代表1920×1080分辨率(即1080P),而 qhd 则是 hd 的四分之一尺寸,
即缩至960×540分辨率。
sd 应为640×480分辨率,
其实际尺寸则为高度:424像素、宽度:512像素。

能够观察到其中主要包含三个不同的类别:hd、qhd和sd。每个类别都包含了相机信息、彩色图像、深度数据以及红外传感器的相关数据。同时,在输出部分也包含了这些信息。

使用对应工具去 查看感兴趣的topic, 可以使用image_view查看,例如:

复制代码
    rosrun image_view image_view image:=/kinect2/qhd/image_color

也可以使用kinect2_view查看深度图(12位,image_view看不了)。

3.建图模式

在线可视化可以选择rtabmapviz或rviz作为工具。
在线可视化可以选择rtabmapviz作为工具的情况下,
借助RVIZ插件进行建图操作时,
点云数据可以逐步添加到RVIZ中。
但是采用rtabmapviz时,
在线可视化界面应当呈现出类似独立版本教程的界面布局。

请根据以下启动文件配置参数rviz:=true使其运行rviz并启用rtabmapviz以进行可视化

用默认的rtabmapviz进行建图

①执行官方给的指令tf

复制代码
    rosrun tf static_transform_publisher 0 0 0 -1.5707963267948966 0 -1.5707963267948966 camera_link kinect2_link 100

此指令主要包含前段静态变换(推测可能是坐标系或标定过程),其余部分则关注于传感器选择以及相应的帧来源。

此指令预设为QHD分辨率(960×540),即为960×540的显示设置。其对应的帧率为Kinect 2 RGB光学帧率(Kinect2_rgb_optical_frame),无需特别关注。

当配置为hd摄像头时, 相应的frame为kinect2_rgb_optical_frame. hd和qhd分辨率下的分辨率图像均基于rgd镜头. 因此, 它们的各自frame是rgb摄像头对应的帧.

当采用SD技术时,则相应的帧名称为kinect2_ir_optical_frame以及红外镜头下的帧名称。

比如上面指令可以改成

rosrun tf static_transform_publisher \ 0\ 0\ 0\ (-π/2)\ radians\ (单位为弧度) \ camera_link \ kinect2_rgb_optical_frame \ 100

②启动rtabmap_ros_

复制代码
    roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rgb_topic:=/kinect2/qhd/image_color_rect depth_topic:=/kinect2/qhd/image_depth_rect camera_info_topic:=/kinect2/qhd/camera_info

指令解析:

使用ros-launch启动程序 ,其作用域为.linux化配置文件 ,相当于执行rtabmap_ros ROS节点的初始化配置

rtabmap_args:="–delete_db_on_start" 是说启动前先删除数据库db下的数据。

rgb_topic := /kinect2/qhd/red-green-blue-彩色图像矩形, depth_topic := /kinect2/qhd/深度信息-深度图像矩形, camera_info_topic := /kinect2/qhd/相机信息

topic涉及的是ROS系统中的架构设计。 这一步骤的核心在于配置rgb彩色数据、深度数据以及相机参数信息一一对应到各自的topic节点。 这也解释了为何在之前的阶段中会列出Kinect V2的所有相关主题节点。

通过这种方式, 人们可以根据个人需求选择适合的高清、超高清或标准分辨率的数据源, 然后生成相应的建图指令。

rtabmap.launch参数解析
来自:<>

在这里插入图片描述

终端指令小结

一般使用默认情况下的qhd即可:

复制代码
    建立连接:
    roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true
    静态tf:
    rosrun tf static_transform_publisher 0 0 0 -1.5707963267948966 0 -1.5707963267948966 camera_link kinect2_link 100
    启动文件:
    roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rgb_topic:=/kinect2/qhd/image_color_rect depth_topic:=/kinect2/qhd/image_depth_rect camera_info_topic:=/kinect2/qhd/camera_info

地图数据保存在 ~/.ros/rtabmap.db

可利databaseViewer工具查看数据库

复制代码
    rtabmap-databaseViewer ~/.ros/rtabmap.db

①在三维点云数据平台中点击右键解除Z轴绑定后即可切换视角至上帝视角以观察三维模型
②Indigo型号与Kinect型号之间的mapdata格式存在明显差别 且不同型号间的数据发布与订阅操作会导致无TF输出的现象出现(不是很清楚)

原地转2圈,手持深度相机进行测试,结果图如下:

在这里插入图片描述
用rviz建图

在启动.launch文件的指令后边添加一句设置即可

复制代码
    rviz:= true

进去后可以有很多参数进行设置,可自行玩耍

全部评论 (0)

还没有任何评论哟~