3.7 绘制标量数据图
我们可以使用ROS中现有的一些通用工具轻松地绘制标量数据图。当然非标量数据也可以绘制,但是要分别在不同的标量域里进行。我们之所以在此仅讨论标量数据,是因为对于大多数非标量数据,有专门的工具能够更好地对其进行表示,我们会在后面进行部分介绍,例如图形、位姿、方向和角度等。
用rqt_plot画出时间趋势曲线
在ROS系统中,标量数据可以根据消息中提供的时间戳作为时间序列绘制。然后,我们就能够在y轴上使用rqt_plot工具绘制标量数据。rqt_plot工具有一套功能强大的参数语法,允许我们在结构化消息中指定多个字段(当然使用了相当简明的方式),也可以在GUI中手动添加或删除主题和字段。
为了能够实际展示rqt_plot工具,我们使用example4节点,它在两个不同的主题中分别发布一个标量和一个矢量(非标量),这两个主题分别是温度(temp)和加速度(accel)。在这些消息中的值是随机生成的,所以它们没有实际意义,仅用于示范曲线绘制。那么首先以下面的命令运行节点:
为了能够画出消息,我们必须知道具体的格式;如果你不知道具体格式则使用rosmg show?<msg type>获取。对于标量数据,我们通常使用data作为字段名来表示实际的值。因此,对于temp主题,数据格式为Int32,运行下面命令:
只要节点正常运行,我们就能看到曲线图随输入消息一直变化。如下图显示。
在示例节点提供的accel主题里,我们看到一个Vector3的消息(你可以通过rostopic type/accel来查看),我们可以在一个plot图中分别绘制三个字段的曲线。Vector3消息包含三个字段x、y和z。我们可以使用逗号(,)来区分字段或者像下面一样使用更加简洁的方式:
绘制的曲线图如下:
我们还可以将每个字段分开绘制。由于rqt_plot不直接支持这个功能,因此我们需要使用rqt_gui将三个图表手动分开,如下图所示:
rqt_plot的GUI支持三种绘图前端。在ROS hydro之前,只有matplotlib支持。现在,我们可以使用更快的QT前端,同时它支持更多的时间序列。可以点击配置(configuration)按钮选择(如右图所示):