写在前面

ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉ROS的朋友起到一个抛砖引玉的作用。本文主要内容:

1.ROS是什么

2.ROS系统整体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的作用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览

9.熟练使用rviz

(1)rviz整体界面

(图29)rviz整体界面

rviz是ROS自带的图形化工具,可以很方便的让用户通过图形界面开发调试ROS。操作界面也十分简洁,如图29,界面主要分为上侧菜单区、左侧显示内容设置区、中间显示区、右侧显示视角设置区、下侧ROS状态区。

(2)添加显示内容

(图30)设置Global Options

如图30,启动rviz界面后,首先要对Global Options进行设置,Global Options里面的参数是一些全局显示相关的参数。其中的Fixed Frame参数是全局显示区域依托的坐标系,我们知道机器人中有很多坐标系,坐标系之间有各自的转换关系,有些是静态关系,有些是动态关系,不同的Fixed Frame参数有不同的显示效果,在导航机器人应用中,一般将Fixed Frame参数设置为map,也就是以map坐标系作为全局坐标系。值得注意的是,在机器人的tf tree里面必须要有map坐标系,否则该选项栏会包error。至于Global Options里面的其他参数可以不用管,默认就行了。

(图31)添加地图显示

如图31,在机器人导航应用中,我们常常需要用rviz观察机器人建立的地图,在机器人发布了地图到主题的情况下,我们就可以通过rviz订阅地图相应主题(一般是/map主题)来显示地图。订阅地图的/map主题方法很简单,首先点击rviz界面左下角[add]按钮,然后在弹出的对话框中选择[By topic],最后在列出的topic名字中找到我们要订阅的主题名字/map,最后点击[OK]就完成了对/map主题的订阅。订阅成功后,会在rviz左侧栏中看到Map项,并且中间显示区正常显示出地图。

(图32)添加tf显示

如图32,在机器人导航应用中,除了观察地图外,我们常常还需要观察机器人在地图中的位置以及各个坐标系的关系是否工作正常,这个时候就需要通过rviz来显示tf。和上面添加显示主题的方法类似,这里添加TF这个类型主题就可以了。说明一下,添加主题可以按主题类型查找,也可以按主题名称查找。上面添加地图主题就是按主题名称查找的,这里添加tf主题是按主题类型查找的。

(图33)添加里程计显示

如图33,我们可以通过rviz订阅里程计来观察机器人的运动轨迹(图中红色箭头连接起来的轨迹)。和上面添加显示主题的方法类似,这里添加/odom这个主题就可以了。这里特别说明一点,我们需要去掉左侧栏中Odometry里面Covariance项后面后面的勾,也就是在Odometry显示中不启用Covariance信息。Covariance是描述里程计误差的协方差矩阵,如果启用Covariance来描述Odometry将导致显示效果很难看,所以建议去掉。

(图34)添加机器人位置粒子滤波点显示

如图34,在机器人导航中,通常采用AMCL粒子滤波来实现机器人的全局定位。通过rviz可以显示全局定位的例子点。和上面添加显示主题的方法类似,这里添加/particlecloud这个主题就可以了。

(图35)添加激光雷达显示

如图35,机器人SLAM和导航中用到的核心传感器激光雷达数据,我们可以通过rviz显示激光雷达数据(图中红色点组成的轮廓)。和上面添加显示主题的方法类似,这里添加/scan这个主题就可以了。

(图36)添加摄像头显示

如图36,rviz还可以订阅摄像头发布的主题,这样在rviz上就可以实现远程视频监控了。和上面添加显示主题的方法类似,这里添加/usb_cam/image_raw这个主题就可以了。

通过上面的实例,我们已经知道在rviz中订阅需要显示的主题了,被订阅的主题会在rviz左侧栏中列出,并且主题的显示与否是相互独立的,可以通过勾选的方式决定是否显现该主题,主题项下拉条目中有很多参数可以设置,这些参数决定显示的风格等等,可以根据需要进行设置。其他一些不常用的主题订阅实例没有给出,有需要可以依葫芦画瓢在rviz中进行订阅显示就行了。

(3)主界面中常用按钮

(图37)rviz显示配置保存

在上面的添加显示内容的实例中,我们在rviz中添加了很多主题显示项,并对各显示项的参数做了相应的设置。为了下次启动rviz时,能直接显示这些内容和风格,我们需要将当前的rviz显示风格以配置文件的方式保存,下次启动rviz后只需要载入这个配置文件就能进入相应的显示风格。很简单,点击rviz左上角[file]菜单,在下拉中选择[Save Config As],在弹出来的对话框中给配置文件取一个名字(我取名为my_cfg1),然后直接Save,my_cfg1.rviz配置文件会被保存到系统中rviz的默认目录。下次启动rviz后,通过点击rviz左上角[file]菜单,在下拉中选择[Open Config],打开相应的配置文件就行了。如图37。

(图38)机器人初始位置设定与导航目标设定

在机器人导航中,当机器人刚启动的时候,机器人位置往往需要人为给定一个大概的估计位置,这样有利于AMCL粒子滤波中粒子点的快速收敛。如图38,点击[2D Pose Estimate]按钮,然后在地图中找到机器人大致的位置后再次点击鼠标左键并保持按下状态,拖动鼠标来指定机器人的朝向,最后松手就完成对机器人初始位置的设定了。其实就是两步,先指定机器人的位置,再指定机器人的朝向。我们可以在地图中指定导航目标点,让机器人自动导航到我们的指定的位置。通过[2D Nav Goal]按钮就可以完成。操作步骤和机器人初始位置的设定是类似的,就不累述了。

(图39)获取地图中指定点的坐标值

有时候我们需要知道地图中某个位置的坐标值,比如我们获取地图中各个位置的坐标值并填入巡逻轨迹中,让机器人按照指定巡逻路线巡逻。通过[Publish Point]按钮就可以知道地图中的任意位置的坐标值,点击[Publish Point]按钮,然后将鼠标放置到想要获取坐标值的位置,rviz底部显示栏中就会出现相应的坐标值。

(4)rviz启动方法

首先需要启动roscore,然后启动rviz,命令如下:

#打开终端,输入下面命令
roscore
#再打开一个终端,输入下面命令
rviz

参考文献 

[1] 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

Github源码:https://github.com/xiihoo/Books_Robot_SLAM_Navigation