天天看点

ROS机器人程序设计(原书第2版)3.8 图像可视化

<b>3.8 图像可视化</b>

在ros系统中,我们可以创建一个节点,在节点中展示来自即插即用摄像头的图像。这是一个复杂数据主题的例子,这些数据可以使用特殊工具更好地可视化或分析。你只需要一个摄像头来完成这些,例如你笔记本上的webcam。在example8节点中,通过调用opencv库实现一段基本的摄像头捕捉程序,然后在ros中将采集到的cv::mat图像转换到ros图像,这样就可以在主题中发布了。这个节点会在/camera主题里发布图像帧。

我们仅会使用launch文件运行节点并进行图像捕捉和发布工作。节点中的代码对于读者来说可能很陌生,但是在下面的章节中,我们将会介绍如何在ros中使用摄像头和图像,到时候再回来看这些代码,你就会完全理解节点的工作原理和每行代码的含义:

一旦节点运行起来,我们就能够列出主题列表(rostopic list),并查看是否包含/camera 主题。查看是否正确捕捉到图像有一个简单直接的方法,使用rostopic hz /camera语句查看在主题中收到的图像更新频率是多少。频率通常是30hz,如下图所示:

显示单一图片

想要查看一张图像,我们不能直接使用rostopic echo /camera命令,因为这会使用文本格式输出图片的信息,数据量会非常巨大,不可能进行任何有效的分析。因此,我们会调用下面的命令:

这里使用了image_view节点,在窗口中展示了给定主题(使用image参数)的图像,如下图所示。这样我们就能简单直接地显示在主题内发布的每一幅图像或帧,即使数据来自网络也可以实现。你可以通过在窗口中点击右边的按钮将当前帧保存在硬盘里,通常会存在home目录下或者~/.ros目录下。

ros hydro还有rqt_image_view,支持在一个窗口查看多个图像,但不允许点击右边按钮保存图像。我们可以在gui上手动选择图像主题或使用image_view:

前面命令结果如右图所示:

ros提供了一个基于opencv校准api的摄像头校准界面。我们将在第5章介绍如何使用摄像头,包括单目和双目摄像头以及ros图像管道(image_proc和stereo_image_proc)相关内容,这些能修正摄像头图像失真、计算双目摄像头深度差异,并得到一个点云。

继续阅读