ROS系统中提供了多种可视化工具,可以满足我们可视化显示、三维仿真等开发需求。接下来我们将讲解三类可视化工具的使用方法。

一、Rviz

ROS系统中使用频度最高、且最为重要的一个可视化工具就是Rviz。

一句话说明Rviz的功能,只要有数据,他就可以可视化显示。比如机器人摄像头拍到的图像,机器人的三维模型结构,机器人所处环境的地图信息,机器人在导航过程中规划的各种路径, 只有我们想不到的,没有Rviz做不到的。

Rviz的核心框架是基于Qt可视化工具打造的一个开放式平台,官方出厂就自带了很多机器人常用的可视化显示插件,只要我们按照ROS中的消息发布对应的话题,就可以看到图像化的效果了。如果我们对显示的效果不满意,或者想添加某些新的显示项,也可以在Rviz这个平台中,开发更多可视化效果,方便打造我们自己的上位机。

接下来我们一起启动Rviz试一下。

打开终端,输入如下命令行,即可看到如图1-1所示的提示,提示我们没有启动ROS master,Rviz也是ROS里面的一个节点,前提也需要启动ROS master。 

$ rosrun rviz rviz 

图1-1 启动提示

所以我们先选择取消,然后再单独打开一个终端,输入如下命令行,启动roscore,启动完成后再来进行启动Rviz,Rviz启动成功后,如图1-3所示。

$ roscore 

图1-2 roscore

图1-3 Rviz

 以上是我们启动Rviz的第一种方式,第二种启动Rviz的方式就是直接输入rviz命令,如图1-4所示,这里同样也是需要事先启动ROS master。

$ rviz

图1-4 Rviz启动

图-3所示,Rviz是我们ROS里面最为常用的一个可视化上位机,里面一共分为几个区域,中间区域最为明显,它是一个三维可视化区域,后续我们机器人模型、地图路径、导航规划等都会在这样一个空间里面显示,这里中间是默认会有一个网格效果,每个网格是1m的距离,它用于我们后续机器人移动过程当中可以作为参考的一个坐标。右边是整个中间三维可视化区域的可视的视角调整,大家可以在上面列表里面选择不同的视觉去查看整个区域,如图6-32所示,同时也可以利用鼠标左键、中键及右键在中间三维可视化区域去调整我们的视角,方便我们去查看各个角度下机器人的可视化效果。

图1-5 视角设置

上方是我们的一个工具栏,如图1-6所示,比如在菜单栏File里面我们可以选择一些我们预先设置好的配置,或者把我们当前配置好的Rviz这样一个界面效果保存下来,以及在菜单栏Panels里面,除了ROS官方给我们提供的一些工具栏、显示区等,我们也可以自己基于Rviz标准的接口来开发自己的上位机功能,因为Rviz是一个开放的平台,我们可以自己开发一些qt插件插入进来,比如我们想去做一个显示的仪表盘、想做一些按键、想做一些滑动条都是没有任何问题的,Help菜单栏是一个帮助信息,除此之外,工具栏上面还有一些基本的常用工具,比如调整视角以及做机器人导航目标点给定等。

图1-6 工具栏

除以上几个区域外,最重要的区域是左边的一个显示插件区,也就说要在中间三维可视化区域显示什么就要在左边区域配置什么,比如说我要配置一个机器人模型,那我们就需要通过该区域“Add”来进行添加一些显示项,如图1-7右边所示,这里有Rviz官方给我们内置了很多的显示内容,比如坐标系、相机、深度信息、力、栅格、图像等,所以我们机器人一些通用的数据已经在Rviz里面内置好了,那如果里面找不到合适的信息,我们也可以自己去开发一些特殊的显示项目。

图1-7 显示插件区

接下来,我们来给大家演示一下显示某个图像的流程,因为Rviz是来做数据可视化显示的,所以前提就是一定要有数据,如果没有数据的话就是巧妇难为无米之炊,Rviz并不是一个仿真软件,而是一个显示软件。现在我们需要显示一个图像,我们就需要把相机跑起来,让图像数据能够给发布出来,首先我们需要安装一个相机的驱动,在ROS里面针对相机这样USB的设备有很标准的驱动,我们可以直接进行安装,打开终端,输入如下命令行进行安装,安装完成后,驱动运行后就可以直接用相机并且去发布图像话题,另外需要注意如果大家运用的是虚拟机就需要把外部相机设备连接到虚拟机里面来才能进行使用,如果用的是双系统就没有这个问题,如果我们用的是笔记本电脑,大家就可以直接按照如图1-9所示进行连接外部设备。

$ sudo apt install ros-noetic-usb-cam

图1-8 相机驱动安装

图1-9 外部设备连接

接下来我们就可以运行安装好的USB相机的驱动来发布图像话题,打开终端,输入如下命令行进行启动。这个launch会启动两个节点,一个是用来驱动相机的节点,另一个是用来显示驱动图像数据的节点

$ roslaunch usb_cam usb_cam-test.launch

图1-10 启动相机驱动

启动完成后,大家就可以看到一个弹窗,如图1-10所示,当前这个弹窗就是由ROS驱动给我们提供的一个图像,接下来我们就要把这个图像在Rviz里面做显示,这里先把这个弹窗进行最小化,如果我们需要在Rivz里面显示某个内容,我们就需要点击显示列表区里面的“Add”按键进行添加,在这里,我们需要去显示image,只要我们的图像按照image这个结构去进行发布就可以显示出来。

图1-11相机图像

图1-12添加image显示

选择完毕后,我们就可以在左边看到一个新增的窗口,在这里目前显示的是“no image”,因为我们还没有告诉它需要去订阅哪一个话题,我们选择左边上方的image,选择image topic,在这里我们需要去选择当前发布的图像话题,这里我们选择image_raw,选择完成后就可以看到image处已经显示出了当前图像信息,以上就是Rviz里面可视化某项数据的完整流程,大家未来去显示任何的模型、地图等需要使用类似的方式来添加Add,显示对应的插件,然后再去配置它去订阅的数据,拿到数据后,上位机就会来渲染数据。

图1-13添加image话题

 

图1-14为界面分区:

  • 0 :3D视图区
  • 1 :工具栏
  • 2 :显示项列表
  • 3:视角设置区
  • 4:时间显示区

图1-14 Rviz区域划分


二、rqt

刚才学习的Rviz类似一个可视化平台,如果我们不想显示或者配置那么多东西,也可以使用ROS中的qt工具箱,我们依次来尝试一下常用的四种工具。

这四种常用工具我们都需要命令行来启动,首先我们来启动终端,为了后续方便显示,我们还是先把小海龟例程运行起来,首先我们需要启动ROS master,如图2-1所示。

$ roscore

图2-1 roscore

启动成功后,我们再来运行海龟仿真器。

$ rosrun turtlesim turtlesim_node

$ rosrun turtlesim turtle_teleop_key

图2-2 海龟仿真器

2.1 rqt_graph

接下来,我们再来启动rqt工具,我们先来启动rqt_graph。该工具可以显示当前整个ROS环境的节点关系,如图2-4所示。

$ rqt_graph

图2-3 rqt_graph

图2-4 计算图可视化工具——rqt_graph

2.2 rqt_console

图2-6所示,rqt_console是一个日志显示工具,可以看到当前系统里面的日志信息,比如我们用键盘控制小海龟去撞墙,该日志里面就会显示一些预警信息,从这里我们可以清楚的看到每个日志的序号、内容、级别、节点、话题、时间、位置等,通过日志信息可以方便我们后续去调试机器人的各种功能,去查看调试过程中出现的问题等,也可以通过下方搜索栏去搜索我们需要的关键内容,加速我们调试的效率,帮助我们对日志去做管理与筛选。

$ rqt_ console

图2-5 rqt_graph

 

图2-6 日志输出工具——rqt_console

2.3 rqt_plot

接下来我们再看第三个工具——rqt_plot,这是一个数据绘图工具,比如这里我们可以把小海龟pose数据进行该工具绘制出来,在topic里面选择pose,点击“+”号进行绘制,利用键盘使海龟动起来就可以看到变化的数据图形,如图2-8所示。

$ rqt_plot

图2-7 rqt_plot

图2-8 数据绘图工具——rqt_plot

2.4 rqt_image_view

接下来,我们再来看最后一个工具——rqt_image_view,这个工具是用来去显示某一个图像话题,如图2-10所示。在这里我们需要去运行我们相机驱动,然后再选择相应的话题,就会显示当前系统正在发布的可视化话题。

$ rqt_image_view

图2-9 rqt_image_view

图2-10 图像渲染工具——rqt_image_view

以上就是我们在rqt工具箱里面常用到的四种工具。


三、Gazebo

以上这些基于Qt的工具都是用来做数据可视化的。如果我们没有数据,甚至没有实物机器人,怎么办呢?这时就需要仿真软件了。

ROS系统中最为常用的三维物理仿真软件是Gazebo,该软件包含动力学引擎支持,可以模拟出和现实场景一样的机器人或周边环境,包括摩擦力、弹性系数等等,也都可以做仿真。

一句话说明Gazebo的功能,没有机器人,Gazebo帮我们创造机器人。

比如我们开发火星车,那就可以在Gazebo中模拟一个火星表面的环境,再比如我们做无人机,续航和限飞都导致我们没有办法频繁用实物做实验,此时不妨使用Gazebo先做仿真,等算法开发的差不多了,再部署到实物上来运行。

图3-1 Gazebo

图3-2 Feature

接下来我们一起来运行下Gazebo。

打开终端,输入如下命令行,启动Gazebo。

$ gazebo 

图3-3 启动Gazebo

图3-4所示,就是我们Gazebo界面,中间区域是一个三维仿真界面,未来机器人和周边场景都会在中间进行显示,左边区域是来显示实际有哪些仿真模型。上面的工具栏可以调整我们仿真模型的视角和大小,此外也提供一些基本的三维物体,比如正方体、球体、圆柱体,也可以设置光线位置。这些都是一些基本的模型,后面我们需要去添加一些机器人模型和环境仿真模型,这就需要我们去ROS里面创建机器人URDF仿真模型或者是Gazebo的STF的模型,这些我们将会在后续的内容进行介绍。

图3-4 Gazebo

这里我们先来介绍下如何去加载一些离线的模型包,离线模型包可以去配置一些比较基础的仿真环境,而且可以加速Gazebo启动效率,大家可以点击仿真软件窗口上方的insert标签,在这个标签页下会把我们当前本地的模型列出来,在这里我们还没有什么模型,大家就需要提前按照链接https://github.com/osrf/gazebo_models,将模型文件库下载并放置到~/.gazebo/models下。

图3-5 离线模型

放置完成后,接下来我们再来启动Gazebo,然后再次点击insert就可进行放置离线模型,如图3-6所示。

图3-6 离线模型放置

 如图3-7为Gazebo界面的区域划分:

  • 0 :3D视图区
  • 1 :工具栏
  • 2 :模型列表
  • 3:模型属性项
  • 4:时间显示区

图3-7 Gazebo区域划分


以上就是本篇介绍的ROS系统中三类可视化编程工具。其中Rviz、和ROS中的qt工具箱s适用于将已有数据可视化,而Gazebo作为三维物理仿真软件,可以模拟出场景和机器人并获得数据。