ROS有各种工具可以帮助用户使用ROS。应该指出,这些GUI工具是对输入型命令工具的补充。如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大。其中,本文讨论的工具是对于ROS编程非常有用的辅助工具。

本章涵盖的工具是:

  • RViz 三维可视化工具
  • rqt 基于Qt的ROS GUI开发工具
  • rqt_image_view 图像显示工具(rqt的一类)
  • rqt_graph 以图形显示节点和消息之间的相关关系的工具(rqt的一类)
  • rqt_plot 二维数据绘图工具(rqt的一类)
  • rqt_bag 基于GUI的bag数据分析工具(rqt的一类)

1 三维可视化工具(RViz)

RViz是ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD,Point Cloud Data),从相机获取的图像值等。

另外 ,利用用户指定的多边形( polygon )支持各种表现形式 ,交互标记(Interactive Markers)可以表达接收来自用户节点的命令和数据并互交的过程。在ROS中,机器人以URDF描述,它可以表示为三维模型,并且每个模型可以根据自由度进行移动或驱动,因此可以用于仿真或控制。

1.1 RViz安装与运行

ros- [ROS_DISTRO] -desktop-full命令安装ROS时,RViz会默认被安装。如果未安装“desktop-full”或未安装RViz,请使用以下命令进行安装。

$ sudo apt-get install ros-kinetic-rviz

RViz的运行命令如下。就像任何其他的ROS工具一样,roscore必须运行。作为参

考,您也可以使用节点运行命令“rosrun rviz rviz”运行它。

$ rviz

1.2 RViz画面布局

1.3 RViz显示屏

使用RViz的过程中最常用的菜单应该是显示屏(display)菜单。该显示屏菜单用于选择三维视图(3D View)画面所显示的信息,各项目的说明请参照下表。

2 ROS GUI开发工具(rqt)

除了三维可视化工具RViz之外,ROS还为机器人开发提供各种GUI工具。例如,有一个将每个节点的层次结构显示为图形,且显示当前节点和话题状态的graph;将消息显示为二维图形的plot,等。从ROS Fuerte版本开始,这些GUI开发工具被称为rqt,它集成了30多种工具,可以作为一个综合的GUI工具来使用。另外,RViz也被集成到rqt的插件中,这使rqt成为ROS的一个不可缺少的GUI工具。

另外,顾名思义,rqt是基于Qt开发的,而Qt是一个广泛用于计算机编程的GUI编程的跨平台框架,用户可以方便自由地添加和开发插件。本节介绍rqt插件中的rqt_image_view、rqt_graph、rqt_plot和rqt_bag。

2.1 rqt安装与运行

ros-[ROS_DISTRO]-desktop-full命令安装ROS时,rqt会默认安装。如果未安装“desktop-full”或未安装rqt,请使用以下命令进行安装。

$ sudo apt-get install ros-kinetic-rqt*

运行rqt的命令如下。只需键入rqt。作为参考,用户可以使用节点执行命令rosrun rqt_gui rqt_gui执行它。

$ rqt

运行rqt将显示rqt的GUI界面,如下图所示。如果是第一次,它将只显示菜单,此外没有任何内容。这是因为还没有指定rqt直接运行的插件程序。

rqt的各菜单如下。

  • 文件(File) 只有一个退出rqt的子菜单。
  • 插件(Plugins) 有30多个插件。可以选择并使用它。
  • 动作(Running) 显示当前运行的插件,在不需要的时候可以停止。
  • 全景(Perspectives) 用于保存当前运行的插件组,并在下次运行相同的插件组。

如果从rqt的顶部菜单中选择[插件(Plugins)] ,则可以看到大约30个插件。大部分是非常有用的rqt的默认插件。非官方的插件也可以添加到此,需要的话用户也可以添加自己开发的rqt插件。 很难说明所有的插件,所以在本文中,我们只了解一下最常用的rqt_image_view、rqt_bag、rqt_graph和rqt_plot插件。

2.2 rqt_image_view

这是一个显示相机的图像数据的插件。这不是一个图像处理过程,它只是在简单地查看图像时非常有用。一般的USB摄像头支持UVC,所以用户可以使用ROS的uvc_camera功能包。首先,使用以下命令安装uvc_camera功能包。

$ sudo apt-get install ros-kinetic-uvc-camera

将USB摄像头连接到计算机的USB接口,然后使用以下命令运行uvc_camera功能包中的uvc_camera_node节点。

$ rosrun uvc_camera uvc_camera_node

然后用“rqt”命令运行rqt,之后从菜单中选择[Plugins]→[Image View]。如果在左上方的消息选择下拉列表中选择“/image_raw”,则可以看到摄像头拍摄的图像。

除了从rqt菜单中选择插件之外,还可以使用专用的运行命令,如下所示。

$ rqt_image_view

2.3 rqt_graph

rqt_graph是用图形表示当前活动中的节点与在ROS网络上传输的消息之间的相关性的工具。这对了解当前ROS网络情况非常有用。用法很简单。如以下示例所示,为了查看turtlesim功能包中的turtlesim_node和turtle_teleop_key,以及uvc_camera功能包中的uvc_camera_node节点,将他们分别在不同的终端中运行。

$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
$ rosrun uvc_camera uvc_camera_node
$ rosrun image_ view image_view image:=image_raw

运行rqt_graph时,节点和话题的相关性会如下图所示。

在上图中,椭圆表示节点(/teleop_turtle、/turtlesim),方块(/turtle1/cmd_vel)表示话题消息。箭头表示发送和接收消息。可以看到,这两个节点正在以平移速度和旋转速度的消息类型(话题名称:/turtle1/cmd_vel)发送和接收键盘的方向键值。

uvc_camera功能包也可以通过rqt_graph确认uvc_camera节点在发出/image_raw话题消息,并且image_view_xxx节点在订阅它。这已经通过简单的几个节点确认过,但在实际的ROS编程中,会有数十个节点发送和接收各种话题消息。此时,rqt_graph对于检查当前ROS网络上节点的相关性会非常的有用。

2.4 rqt_plot

使用下面的命令运行rqt_plot,用户也可以使用节点执行命令rosrun rqt_plot rqt_plot运行它。

$ rqt_plot

rqt_plot12是一个二维数据绘图工具。绘图意味着绘制坐标。换句话说,它接收到ROS消息并将其撒在坐标系上。例如,假设要标记turtlesim节点pose消息的x和y坐标。首先,运行turtlesim功能包中的turtlesim_node。

$ rosrun turtlesim turtlesim_node

然后在rqt_plot上方的Topic栏中输入/turtle1/pose/,则会在二维(x轴:数据值,y轴:时间)坐标系中绘制/turtle1/pose/节点。或者,您可以使用下一个命令立即运行它,包括指定要图示的话题。

$ rqt_plot /turtle1/pose/

接下来,运行turtlesim功能包中的turtle_teleop_key来移动屏幕上的乌龟。

$ rosrun turtlesim turtle_teleop_key

如下图所示,可以看到在显示龟的x位置、y位置、theta方向和平移转速。这是显示二维数据坐标的有用的工具。这里表示了turtlesim功能包,但rqt_plot也可以用于表达用户开发的节点的二维数据。特别地,适合于随着时间的推移显示传感器值,例如速度和加速度。

2.5 rqt_bag

rqt_bag是一个可以将消息进行可视化的GUI工具。ROS日志信息中的rosbag是基于文本的,但是rqt_bag对于图像数据类的消息管理是非常有用的,因为rqt_bag多了可视化功能,因此可以立即查看摄像机的图像值。在测试之前,运行rqt_image_view和rqt_graph的工具说明中提到的turtlesim和uvc_camera中的所有相关节点。接下来,用如下命令生成为一个bag文件,记录相机的/image_raw和turtlesim的/turntlesim/turtle1/cmd_vel值

为了利用rqt_bag的特点,将USB摄像头图像保存为一个bag文件,然后使用rqt_bag进行播放。

$ rosrun uvc_camera uvc_camera_node
$ rosbag record /image_raw
$ rqt

使用 “ rqt ” 命令运行rqt ,然后从菜单中选择[插件( Plugins ) ] → [日志(Logging)]→[包(Bag)]。然后选择左上方的文件夹图标(Load Bag)加载刚才录制的*.bag文件。然后,如下图所示,用户可以在时间轴上查看相机图像的变化。还可以进行放大、回放和查看各时间点的数据值。如果右键单击鼠标按钮,则会出现“Publish”选项来重新发送消息。

参考:

《ROS_Robot_Programming》第六章

ROS学习笔记九:ROS工具的更多相关文章

  1. ROS学习笔记1-引言

    该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...

  2. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  3. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  4. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  5. Oracle RAC学习笔记02-RAC维护工具集

    Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...

  6. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  7. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

  8. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  9. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

随机推荐

  1. Oracle 用户表空间查看、修改大小、设置自增长等

      分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: ...

  2. 【Nginx】定时器事件

    转自:烟雨江南 Nginx事件管理主要是网络事件和定时器事件.下面介绍定时器事件管理,即超时管理. 为什么进行超时管理? Nginx有必要对可能发生超时的事件 进行统一管理,并在事件超时时作出相应的处 ...

  3. [RxJS] Implement RxJS `switchMap` by Canceling Inner Subscriptions as Values are Passed Through

    switchMap is mergeMap that checks for an "inner" subscription. If the "inner" su ...

  4. Office EXCEL 中如何让一个单元格的数据链接到另一个工作表的数据

    比如我在Sheet2中定义了几个数据,这些都是简单的数字,而在Sheet1中让要被绑定的单元格等于Sheet2的对应单元格地址(比如Sheet2!B1,Sheet2!B2之类的)   然后就可以一改全 ...

  5. 爬取指定网页的源代码显示在GUI中

    建立一个GUI图形界面用来用来输入网址和代码显示的区域 #encoding=utf-8 __author__ = 'heng' #创建一个可以抓取输入网址源代码的GUI from urllib2 im ...

  6. scikit-learn:class and function reference(看看你究竟掌握了多少。。)

    http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition Reference This is t ...

  7. Oracle可插拔数据库的jdbc连接串写法

    我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...

  8. Page 实例的生命周期

    注册页面 · 小程序 https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html

  9. 集成到Buildroot中的Helloword程序【转】

    本文转载自:http://www.openloongson.org/forum.php?mod=viewthread&tid=85 本帖最后由 gt945 于 2015-7-5 17:06 编 ...

  10. YTU 1001: A+B Problem

    1001: A+B Problem 时间限制: 1 Sec  内存限制: 10 MB 提交: 4864  解决: 3132 [提交][状态][讨论版] 题目描述 Calculate a+b 输入 Tw ...