第6章 ROS工具
本章介绍了ROS的实用工具—— RViz 和 rqt 。
RViz是ROS的三维可视化工具,便于三维视图的构建和显示。
rqt是GUI开发工具,便于图像查看,重点介绍了rqt_plot、rqt_bag等常用功能。PS:1024程序员节日快乐!😃
第6章 ROS工具
GUI工具:
6.1 三维可视化工具(RViz)
RViz是ROS的三维可视化工具。
它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。
在ROS中,机器人以URDF(Unified Robot Description Format,统一机器人描述格式)描述,它可以表示为三维模型,并且每个模型可以根据自由度进行移动或驱动,因此可以用于仿真或控制。
6.1.1 RViz安装与运行
以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,RViz会默认被安装。
RViz的运行命令如下:
$ roscore
$ rviz
6.1.2 RViz画面布局
-
3D视图(3D view):
指屏幕的黑色部分。它是可以用三维方式查看各种数据的主屏幕。3D视图的背景颜色、固定框架、网格等可以在左侧显示的全局选项(Global Options)和网格(Grid)项目中进行详细设置。 -
显示屏(Displays):
左侧的显示屏是从各种话题当中选择用户所需的数据的视图的区域。 -
菜单(Menu):
菜单位于顶部。用户可以选择保存或读取显示屏状态的命令,还可以选择各种面板。 -
工具(Tools):
工具是位于菜单下方的按钮,允许用户用各种功能按键选择多种功能的工具,例如
Interact、Move Camera、Select,Focus Camera、Measure、2D Pose Estimate、2D Navigation Goal
以及Publish Point等。 -
视图(Views):
设定三维视图的视点
■Orbit:以指定的视点(在这里称为Focus)为中心旋转。
■FPS(第一人称):显示第一人称视点所看到的画面。
■ThirdPersonFollower:显示以第三人称的视点尾追特定目标的视图。
■TopDownOrtho:这是Z轴的视图,与其他视图不同,以直射视图显示,而非透视法。
■XYOrbit:类似于Orbit的默认值,但焦点固定在Z轴值为0的XY平面上。 -
时间(Time):
显示当前时刻(wall time)、ROS Time以及他们各自经过的时间。这主要用于仿真,如果需要重新启动,请点击底部的[Reset]按钮。
6.1.3 RViz显示屏
显示屏菜单用于选择三维视图(3D View)画面所显示的信息。
(显示屏菜单的项目实在太多,此处不进行列举,参考《ROS机器人编程》P164)
6.2 ROS GUI开发工具(rqt)
ROS为机器人开发提供各种GUI工具,从ROS Fuerte版本开始,这些GUI开发工具被称为rqt,它集成了30多种工具,可以作为一个综合的GUI工具来使用。
rqt是基于Qt开发的,而Qt是一个广泛用于计算机编程的GUI编程的跨平台框架,用户可以方便自由地添加和开发插件。
6.2.1 rqt安装与运行
以“ros-[ROS_DISTRO]-desktop-full”命令安装ROS时,rqt会默认安装。
$ roscore
$ rqt
或者,用户可以使用节点执行命令执行
$ rosrun rqt_gui rqt_gui
rqt菜单:
6.2.2 rqt插件
顶部菜单中选择 [插件(Plugins)] ,则可以看到大约30个插件。
各插件解释见《ROS机器人编程》P167-P169
6.2.3 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
用Image View查看USB摄像头的图像数据的结果:
$ rqt
$ rqt_image_view
6.2.4 rqt_graph
rqt_graph是用图形表示当前活动中的节点与在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)表示话题消息。箭头表示发送和接收消息。
6.2.5 rqt_plot
rqt_plot是一个二维数据绘图工具。
使用rqt_plot遇到了一堆error,查了一下,有说是python和Matplotlib版本的问题,也有可能是没有安装Matplotlib。
参考了下面两个博客,顺利解决问题:
ROS中rqt_plot报错
Ubuntu16.04中rqt_plot出现错误-已解决。
sudo apt install python-pip
python -m pip install -U pip
python -m pip install -U matplotlib
运行小海龟测试,在二维坐标系中绘制/turtle1/pose/节点。
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
$ rqt_plot /turtle1/pose
可以看到在显示龟的x位置、y位置、theta方向和平移转速。这是显示二维数据坐标的有用的工具。这里表示了turtlesim功能包,但rqt_plot也可以用于表达用户开发的节点的二维数据。特别地,适合于随着时间的推移显示传感器值,例如速度和加速度。
6.2.6 rqt_bag
rqt_bag是一个可以将消息进行可视化的GUI工具,对于图像数据类的消息管理是非常有用的,可以查看摄像机的图像值。
rqt_bag是rosbag的GUI版本,和rosbag一样,它可以存储、回放和压缩话题消息。另外,由于它是一个GUI程序,所有的命令都是用按钮制作的,所以它很容易使用,并且用户可以用类似使用视频编辑器一样,在时间轴上来回查看摄像机图像。
$ roscore
$ rosrun uvc_camera uvc_camera_node
$ rosbag record /image_raw
$ rqt
从 rqt 菜单中选择[插件(Plugins)]→[日志(Logging)]→[包(Bag)]。然后选择左上方的文件夹图标(Load Bag)加载刚才录制的*.bag文件。