Skip to content

ROS2的基石:节点Node

01. ROS2 graph

在接下来的几个教程中,您将了解构成“ROS2 graph”的一系列核心 ROS 2 概念。

ROS2 graph是一个由 ROS 2 元素同时处理数据的网络。如果你要将它们全部映射出来并可视化它们,可以发现它包含所有可执行程序以及之间的连接(connection)。

02. ROS2中的Nodes

ROS2中的每个节点Node都应该是一个模块化的、负责单一的功能目的,譬如,控制车轮电机的功能可以抽象为一个节点;从激光测距仪发布传感器数据的功能可以抽象为一个节点。

Nodes and Services

一个完整的机器人系统由许多节点组成,这些功能节点之间协同工作。在ROS2中,某个可执行文件可以包含一个或多个节点,每个节点都有一个唯一的名称,用于标识和通信。

03. 关于节点的几个操作

在上一节,我们已经安装好了完整的ROS2开发环境以及相关命令行工具。在本小节,我们学习如何通过ROS2自带的命令行工具来操作节点、调查其工作状态。

3.1 ros2 run 命令

命令 ros2 run 从软件包中启动可执行文件。它的语法是:

Shell
ros2 run <package_name> <executable_name>

回顾上节课的几个命令:

Shell
ros2 run turtlesim turtlesim_node

这里,包名是 turtlesim,可执行文件名是 turtlesim_node

但是,我们仍然不知道节点名称。您可以使用 ros2 node list 查找节点名称。

3.2 ros2 node list 命令

ros2 node list 将显示所有正在运行的节点的名称。当我们想要与节点交互时,或者当系统运行许多节点并需要跟踪它们时,这尤其有用。

在终端中输入以下命令:

Shell
ros2 node list

终端将返回节点名称:

Shell
/turtlesim

再开一个终端,输入以下命令:

Shell
ros2 run turtlesim turtle_teleop_key

再次输入以下命令:

Shell
ros2 node list

现在将看到两个活动节点的名称:

Shell
/turtlesim
/turtle_teleop_key

3.3 重映射 Remapping

通过重映射 Remapping, 我们可以将默认节点属性(如节点名称、主题名称、服务名称等)重新设定为自定义值。 现在,让我们重新分配 /turtlesim 节点的名称。在新终端中,运行以下命令:

Shell
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

由于我们再次在 turtlesim 上调用 ros2 run ,这将打开另一个 turtlesim 窗口。

如果我们再次运行 ros2 node list ,我们将看到三个节点名称:

Shell
/my_turtle
/turtlesim
/turtle_teleop_key

3.4 ros2 node info 命令

通过上述命令ros2 node list,我们可以获取节点名称。但是,我们如何获取有关节点的更多信息呢?这时候,ros2 node info 命令就派上用场了,语法如下:

Shell
ros2 node info <node_name>

要检查您的最新节点 my_turtle,请运行以下命令:

shell
ros2 node info /my_turtle

ros2 node info 返回订阅者、发布者、服务和操作的列表。即与该节点交互的 ROS 图连接。输出应如下所示:

ahaha, do it yourself

课堂作业: 同学补全,然后发给我.

现在尝试在 /teleop_turtle 节点上运行相同的命令,并查看其连接与 my_turtle 的连接有何不同。

04. 总结及下一步

  • 节点是基本的 ROS 2 元素,在机器人系统中用于单一的模块化用途。
  • 在本教程中,我们通过运行可执行文件 turtlesim_nodeturtle_teleop_key 来利用在 turtlesim 包中创建的节点。
  • 学习了如何使用 ros2 node list来发现活动节点名称和 ros2 node info来introspect单个节点。这些工具对于了解复杂、真实的机器人系统中的数据流至关重要。

下一步:

  • 现在我们已经了解了 ROS 2 中的节点,下一节将继续学习topics通信。主题通信是连接节点的通信类型之一(ROS2中有四种通信类型:topics, services, parameters, actions)。

05. 课后作业

  1. apt-get update更新系统。
  2. 请在终端中运行 ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key,并使用键盘控制海龟。
  3. 请在终端中运行 ros2 node listros2 node info,并查看输出结果。

要求:将运行结果截图并飞书提交。

06. 作业答疑及其它安排

  1. 学号统计(@Wenqing)
  2. 志愿者安排(@Liudong x4, @Kyle x3)
  3. 学生自己修订教程(学会用简单的Markdown),并教会别人注册Qwen-plusAPI Key (@Heng, @Yanling)

07. 课堂综合拓展

让敲命令更省力,配置zsh及插件: zsh一键安装包

备注:oh-my-zsh 安装脚本

讲解要点:

  1. 可执行文件的权限。
  2. 配置文件的加载;source的作用(以alias为例)。
  3. 体会shell脚本编程的本质(胶水语言,命令行工具的组合)。

附录1: source命令常识

  • Author: Zhenming ZHANG

附录2: apt-get 命令的使用

Author:

  • xxx

附录3: zsh脚本编程

求助AI助手,理解或猜测以下伪代码的含义, 如果有错误,请修正:

  1. if input "1" then print "hello" else input "2" print "world"
  2. for i in 1..10 do echo $i
  3. if [ -f "file.txt" ] then echo "file exists" else echo "file not found"
  4. for i in $(ls) do ls -l $i

Author:

  • yyy (1~2)
  • zzz (3~4)

注意:以上代码仅供参考,可能存在语法错误; 我们是zsh编程,不是bash编程或fish编程(语法有差异)。