ROS2的基石:节点Node
01. ROS2 graph
在接下来的几个教程中,您将了解构成“ROS2 graph”的一系列核心 ROS 2 概念。
ROS2 graph是一个由 ROS 2 元素同时处理数据的网络。如果你要将它们全部映射出来并可视化它们,可以发现它包含所有可执行程序以及之间的连接(connection)。
02. ROS2中的Nodes
ROS2中的每个节点Node都应该是一个模块化的、负责单一的功能目的,譬如,控制车轮电机的功能可以抽象为一个节点;从激光测距仪发布传感器数据的功能可以抽象为一个节点。
一个完整的机器人系统由许多节点组成,这些功能节点之间协同工作。在ROS2中,某个可执行文件可以包含一个或多个节点,每个节点都有一个唯一的名称,用于标识和通信。
03. 关于节点的几个操作
在上一节,我们已经安装好了完整的ROS2开发环境以及相关命令行工具。在本小节,我们学习如何通过ROS2自带的命令行工具来操作节点、调查其工作状态。
3.1 ros2 run
命令
命令 ros2 run 从软件包中启动可执行文件。它的语法是:
ros2 run <package_name> <executable_name>
回顾上节课的几个命令:
ros2 run turtlesim turtlesim_node
这里,包名是 turtlesim,可执行文件名是 turtlesim_node。
但是,我们仍然不知道节点名称。您可以使用 ros2 node list 查找节点名称。
3.2 ros2 node list
命令
ros2 node list
将显示所有正在运行的节点的名称。当我们想要与节点交互时,或者当系统运行许多节点并需要跟踪它们时,这尤其有用。
在终端中输入以下命令:
ros2 node list
终端将返回节点名称:
/turtlesim
再开一个终端,输入以下命令:
ros2 run turtlesim turtle_teleop_key
再次输入以下命令:
ros2 node list
现在将看到两个活动节点的名称:
/turtlesim
/turtle_teleop_key
3.3 重映射 Remapping
通过重映射 Remapping, 我们可以将默认节点属性(如节点名称、主题名称、服务名称等)重新设定为自定义值。 现在,让我们重新分配 /turtlesim 节点的名称。在新终端中,运行以下命令:
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
由于我们再次在 turtlesim 上调用 ros2 run
,这将打开另一个 turtlesim 窗口。
如果我们再次运行 ros2 node list
,我们将看到三个节点名称:
/my_turtle
/turtlesim
/turtle_teleop_key
3.4 ros2 node info
命令
通过上述命令ros2 node list
,我们可以获取节点名称。但是,我们如何获取有关节点的更多信息呢?这时候,ros2 node info
命令就派上用场了,语法如下:
ros2 node info <node_name>
要检查您的最新节点 my_turtle
,请运行以下命令:
ros2 node info /my_turtle
ros2 node info
返回订阅者、发布者、服务和操作的列表。即与该节点交互的 ROS 图连接。输出应如下所示:
ahaha, do it yourself
课堂作业: 同学补全,然后发给我.
现在尝试在 /teleop_turtle
节点上运行相同的命令,并查看其连接与 my_turtle
的连接有何不同。
04. 总结及下一步
- 节点是基本的 ROS 2 元素,在机器人系统中用于单一的模块化用途。
- 在本教程中,我们通过运行可执行文件
turtlesim_node
和turtle_teleop_key
来利用在turtlesim
包中创建的节点。 - 学习了如何使用
ros2 node list
来发现活动节点名称和ros2 node info
来introspect单个节点。这些工具对于了解复杂、真实的机器人系统中的数据流至关重要。
下一步:
- 现在我们已经了解了 ROS 2 中的节点,下一节将继续学习topics通信。主题通信是连接节点的通信类型之一(ROS2中有四种通信类型:topics, services, parameters, actions)。
05. 课后作业
apt-get update
更新系统。- 请在终端中运行
ros2 run turtlesim turtlesim_node
和ros2 run turtlesim turtle_teleop_key
,并使用键盘控制海龟。 - 请在终端中运行
ros2 node list
和ros2 node info
,并查看输出结果。
要求:将运行结果截图并飞书提交。
06. 作业答疑及其它安排
- 学号统计(@Wenqing)
- 志愿者安排(@Liudong x4, @Kyle x3)
- 学生自己修订教程(学会用简单的
Markdown
),并教会别人注册Qwen-plus的API Key (@Heng, @Yanling)
07. 课堂综合拓展
让敲命令更省力,配置zsh及插件: zsh一键安装包
备注:oh-my-zsh
安装脚本
讲解要点:
- 可执行文件的权限。
- 配置文件的加载;
source
的作用(以alias
为例)。 - 体会shell脚本编程的本质(胶水语言,命令行工具的组合)。
附录1: source命令常识
- Author: Zhenming ZHANG
附录2: apt-get 命令的使用
Author:
- xxx
附录3: zsh脚本编程
求助AI助手,理解或猜测以下伪代码的含义, 如果有错误,请修正:
if input "1" then print "hello" else input "2" print "world"
for i in 1..10 do echo $i
if [ -f "file.txt" ] then echo "file exists" else echo "file not found"
for i in $(ls) do ls -l $i
Author:
- yyy (1~2)
- zzz (3~4)
注意:以上代码仅供参考,可能存在语法错误; 我们是zsh编程,不是bash编程或fish编程(语法有差异)。