ROS GUI开发工具(rqt)
rqt常用命令总结(写在前面)
rosrun rqt_plot rqt_plot //画出发布在topic上的数据变化图
rosrun rqt_graph rqt_graph //画出node关系图
rosrun rqt_console rqt_console //属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息
rosrun rqt_reconfigure rqt_reconfigure //参数动态配置工具
rosrun rqt_tf_tree rqt_tf_tree //tf树
(仅作学习笔记)
ROS为机器人开发提供各种GUI工具。例如,有一个将每个节点的层次结构显示为图形,且显示当前节点和话题状态的graph;将消息显示为二维图形的plot,等。从ROS Fuerte版本开始,这些GUI开发工具被称为rqt6,它集成了30多种工具,可以作为一个综合的GUI工具来使用。另外,RViz也被集成到rqt的插件中,这使rqt成为ROS的一个不可缺少的GUI工具。另外,顾名思义,rqt是基于Qt开发的,而Qt是一个广泛用于计算机编程的GUI编程的跨平台框架,用户可以方便自由地添加和开发插件。本节介绍rqt插件中的rqt_image_view、rqt_graph、rqt_plot和rqt_bag。
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界面,如图6-8所示。如果是第一次,它将只显示菜单,此外没有任何内容。这是因为还没有指定rqt直接运行的插件程序。
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菜单中选择插件之外,还可以使用专用的运行命令,如下所示。
rqt_image_view
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”运行rqt并从菜单中选择[Plugins]→[NodeGraph]即可。请注意,用户也可以在终端中运行“rqt_graph”,而无需直接从菜单中选择插件。
运行rqt_graph时,节点和话题的相关性会如图所示显示。
rqt
在图中,椭圆表示节点(/teleop_turtle、/turtlesim),方块(/turtle1/cmd_vel)表示话题消息。箭头表示发送和接收消息。在前面的例子中,运行turtle_teleop_key时,会运行teleop_turtle节点;运行turtlesim_node节点时,会运行turtlesim节点。可以看到,这两个节点正在以平移速度和旋转速度的消息类型(话题名称:/turtle1/cmd_vel)发送和接收键盘的方向键值。
uvc_camera功能包也可以通过rqt_graph确认uvc_camera节点在发出/image_raw话题消息,并且image_view_xxx节点在订阅它。这已经通过简单的几个节点确认过,但在实际的ROS编程中,会有数十个节点发送和接收各种话题消息。此时,rqt_graph对于检查当前ROS网络上节点的相关性会非常的有用。
4、rqt_plot
这一次,我们使用下面的命令运行rqt_plot,而不是在rqt界面中选择插件。作为参考,用户可以使用节点执行命令rosrun rqt_plot rqt_plot运行它。
rqt_plot运行后,点击程序右上角的齿轮形状的选项图标。可以如图所示选择一个选项,其默认设置为“MatPlot”。除MatPlot外,还提供了PyQtGraph和QwtPlot。请参阅相关的安装说明并使用所需的图形库。
例如,如果要使用PyQtGraph作为默认绘图而不是MatPlot,请从以下下载地址下载并安装最新的python-pyqtgraph_0.9.xx-x_all.deb文件。安装PyQtGraph之后,用户可以使用PyQtGraph。
■■ http://www.pyqtgraph.org/downloads/
rqt_plot是一个二维数据绘图工具。绘图意味着绘制坐标。换句话说,它接收到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也可以用于表达用户开发的节点的二维数据。特别地,适合于随着时间的推移显示传感器值,例如速度和加速度。
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值。
使用rosbag程序将ROS上的各种话题消息作为bag文件进行保存、回放和压缩。rqt_bag是rosbag的GUI版本,和rosbag一样,它可以存储、回放和压缩话题消息。另外,由于它是一个GUI程序,所有的命令都是用按钮制作的,所以它很容易使用,并且用户可以用类似使用视频编辑器一样,在时间轴上来回查看摄像机图像。
为了利用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”选项来重新发送消息。