1.3 启动第一个机器人
对于ROS 2 开发的初学者而言,其内置的经典示例—海龟模拟器(TurtleSim),凭借轻量化、可视化的特点,是理解ROS 2 核心概念(如节点、话题、消息、服务等)的最佳入门学习示例。
通过启动海龟模拟器并实现对虚拟海龟的运动控制,我们不仅能快速掌握ROS 2 的基本命令行工具与通信逻辑,更能建立“发布-订阅”“请求-响应”等机器人开发的核心思维模式,为后续深入学习ROS 2 打下坚实基础。本节将介绍如何启动海龟模拟器、使用键盘控制海龟运动的方法,以及使用rqt工具查看和分析节点之间的关系等。
1.3.1 启动图形模拟器
前面介绍过,ROS 2应用是以“节点(Node)”为基本单位的,每个节点负责一项具体的功能。例如,海龟模拟器节点只负责渲染虚拟海龟与环境,而控制海龟移动则需要另外创建节点。本小节主要介绍如何运行海龟模拟器节点及其命令各参数的含义。
在Ubuntu系统中使用组合键Ctrl+Alt+T打开终端,输入海龟模拟器节点运行命令,如下所示:
ros2 run turtlesim turtlesim_node
输入以上命令到终端后运行,如图1.53所示。

图1.53 运行海龟模拟器节点命令
启动命令共由4个部分组成。其中,ros2 run表示运行ROS 2程序,turtlesim表示仿真功能包的名称,turtlesim_node表示海龟仿真节点可执行程序。这条命令的具体作用是使用ros2运行仿真功能包turtlesim中的仿真节点可执行程序turtlesim_node。运行后,将出现海龟模拟器界面,如图1.54所示。

图1.54 海龟模拟器界面
可以看到,图形界面中出现了一只小海龟,但是现在还不能对这个小海龟进行控制。
备注:一般情况下,我们在Windows系统中应该操作过一些基于图形界面的应用程序,操作其中对象的运动控制可以直接在这个图形界面下通过消息机制捕获键盘动作来完成。但在ROS 2 中是以节点为基础,因此对图形界面中对象的控制也应该创建相应的控制节点对其进行控制,这就是后面将要介绍的ROS 2 通信机制中的话题通信。
1.3.2 控制模拟器运行及分析
在1.3.1节中,我们已经启动了海龟模拟器界面,现在需要另外运行一个控制节点对其进行控制。本小节将介绍如何启动键盘控制节点控制海龟运动,以及使用rqt工具查看、分析节点之间的关系等。
使用组合键Ctrl+Alt+T重新打开一个终端,但不要关闭1.3.1节中已经启动的海龟模拟器。在新打开的终端中输入以下命令运行一个海龟键盘控制节点:
ros2 run turtlesim turtle_teleop_key
将上述命令输入新终端后,如图1.55所示。

图1.55 启动海龟键盘控制节点
这条命令的含义与1.3.1节中启动海龟模拟器界面的命令基本一致,即使用ros2运行仿真功能包turtlesim中的海龟键盘控制节点turtle_teleop_key。运行后,我们就可以使用键盘方向键对海龟进行方向控制了,如图1.56所示。

图1.56 使用键盘控制节点控制海龟运动
备注:由于键盘输入信息是由键盘控制节点捕获的,因此我们在控制时为了使控制节点能够捕获到键盘的输入,需要将控制节点的窗口界面一直保持活动状态。否则,控制节点将无法捕获键盘输入信息,海龟模拟器中的海龟也就无法移动和控制了。
我们使用键盘控制节点完成了对海龟运动的控制,那么为什么两个窗口界面中可以通过键盘控制节点界面实现海龟运动路径的控制呢?接下来,在不关闭以上两个窗口界面的情况下,我们重新打开一个终端并输入命令rqt,使用rqt工具来查看一下两个节点之间的关系以及节点间的通信连接情况,如图1.57所示。

图1.57 rqt工具界面
在rqt界面的工具栏中依次选择Plugins→Introspection→Node Graph选项,打开后单击刷新按钮,以获取当前系统中最新的节点之间的关系,如图1.58所示。

图1.58 rqt工具的Node Graph插件
可以看到,键盘控制节点/teleop_turtle和海龟模拟节点/tuetlesim之间有一条从键盘控制节点指向海龟模拟节点的连线,并标记了名称/turtle1/cmd_vel,该标记即为话题名称。而该话题的起点/teleop_turtle即是发布者,终点/tuetlesim即是订阅者,当发布者接收到我们的键盘输入信息后,会将输入信息转换为符合geometry_msgs/msg/Twist消息类型的运动命令,并通过话题/turtle1/cmd_vel持续对订阅者进行发布。
同时,订阅者也会实时监听该话题上的消息,一旦接收到运动命令,即会按照命令驱动虚拟海龟作出相应的动作。
这种“发布-订阅”模式即为话题通信,它完全符合ROS 2开发中的分布式通信机制。两个节点无须知道彼此的具体实现细节,仅通过约定的话题名称和消息类型就可以完成数据交互,这体现了ROS 2模块化设计的核心优势。
备注:ROS 2的话题通信在数据传输的底层目标上与套接字(Socket)通信类似。
本小节通过ROS 2中内置的经典示例—海龟模拟器,主要介绍了话题通信中的发布者和订阅者如何通过话题进行通信实现数据交互。其中,发布者节点的核心职责是将我们的键盘输入(例如,方向键的上、下、左、右操作)转化为标准的运动控制命令。而订阅者节点则在启动后持续“监听”话题。通过海龟模拟器的示例,我们能够直观地看到话题通信的实时性和单向性,这对于理解ROS 2的话题通信有着极大的帮助。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)