1.3 启动第一个机器人
ROS 2机器人系统开发实践视频教学版 梁伟、李园奇、李海慧 清华大学出版社【行情 报价 价格 评测】-京东对于ROS 2 开发的初学者而言其内置的经典示例—海龟模拟器TurtleSim凭借轻量化、可视化的特点是理解ROS 2 核心概念如节点、话题、消息、服务等的最佳入门学习示例。通过启动海龟模拟器并实现对虚拟海龟的运动控制我们不仅能快速掌握ROS 2 的基本命令行工具与通信逻辑更能建立“发布-订阅”“请求-响应”等机器人开发的核心思维模式为后续深入学习ROS 2 打下坚实基础。本节将介绍如何启动海龟模拟器、使用键盘控制海龟运动的方法以及使用rqt工具查看和分析节点之间的关系等。1.3.1 启动图形模拟器前面介绍过ROS 2应用是以“节点Node”为基本单位的每个节点负责一项具体的功能。例如海龟模拟器节点只负责渲染虚拟海龟与环境而控制海龟移动则需要另外创建节点。本小节主要介绍如何运行海龟模拟器节点及其命令各参数的含义。在Ubuntu系统中使用组合键CtrlAltT打开终端输入海龟模拟器节点运行命令如下所示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工具查看、分析节点之间的关系等。使用组合键CtrlAltT重新打开一个终端但不要关闭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的话题通信有着极大的帮助。