3.1 第一个ROS例程——小乌龟仿真

本书关于ROS的第一个例程就从可爱的吉祥物——小乌龟例程开始,一方面可以验证ROS是否安装成功,另一方面也可以对ROS有一个初步的认识。

3.1.1 turtlesim功能包

在这个例程中,我们可以通过键盘控制一只小乌龟在界面中移动,而且会接触到第一个ROS功能包——turtlesim。该功能包的核心是turtlesim_node节点,提供一个可视化的乌龟仿真器,可以实现很多ROS基础功能的测试。

每一个ROS功能包都是一个独立的功能,其中可能包含一个或者多个节点,这些功能对外使用话题、服务、参数等作为接口。其他开发者在使用这个功能包时,可以不用关注内部的代码实现,只需要知道这些接口的类型和作用,就可以集成到自己的系统中。现在我们就来看一下turtlesim功能包的接口是怎样的。

(1)话题与服务

表3-1是turtlesim功能包中的话题和服务接口。

表3-1 turtlesim功能包中的话题和服务

(2)参数

表3-2是turtlesim功能包中的参数,开发者可以通过命令、程序等方式来获取这些参数并进行修改。

表3-2 turtlesim功能包中的参数

turtlesim功能包订阅速度控制指令,实现乌龟在仿真器中的移动,同时发布乌龟的实时位姿信息,更新仿真器中的乌龟状态。我们也可以通过服务调用实现删除、新生乌龟等功能。

这么多信息可能让你有些迷惑,学习完本章内容后,你一定可以对这些错综复杂的知识点有一个全新的认识。

在正式开始运行乌龟例程之前,需要使用如下命令安装turtlesim功能包:


$ sudo apt-get install ros-kinetic-turtlesim

3.1.2 控制乌龟运动

在Ubuntu系统中打开一个终端,输入以下命令运行ROS的节点管理器——ROS Master,这是ROS必须运行的管理器节点。


$ roscore

如果ROS安装成功,则可以在终端中看到如图3-2所示的输出信息。

然后打开一个新终端,使用rosrun命令启动turtlesim仿真器节点:


$ rosrun turtlesim turtlesim_node

命令运行后,会出现一个如图3-3所示的可视化仿真器界面。

图3-2 ROS Master启动成功后的日志信息

图3-3 小乌龟仿真器的启动界面

第一个例程会通过键盘控制小乌龟在界面中的移动,现在仿真界面已经出现了,我们还需要打开一个新终端,运行键盘控制的节点:


$ rosrun turtlesim turtle_teleop_key

运行成功后,终端中会出现一些键盘控制的相关说明(见图3-4)。

图3-4 键盘控制终端的信息提示

此时,在保证键盘控制终端激活的前提下,按下键盘上的方向键,仿真器中的小乌龟应该就可以按照我们控制的方向开始移动了,而且在小乌龟的尾部会显示移动轨迹(见图3-5)。

图3-5 小乌龟在仿真器中的移动轨迹

现在你可能会有疑问,仿真界面中为什么会是一只小乌龟?ROS不是机器人操作系统吗,控制一只小乌龟移动能有什么意义?小乌龟为什么会移动呢?这个例程背后有什么含义?

带着这些疑问,下面开始ROS世界的探索实践吧!这个看似简单的小乌龟例程,其实蕴含ROS最基础的原理和机制。