Understanding nodes:理解节点(nodes)

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Understanding nodes:理解节点(nodes)

@[toc]
参考官方文档:Understanding nodes

背景

1. ROS 2 graph(ROS 2 图)

在接下来的几个教程中,你将学习一系列ROS 2的核心概念,这些概念构成了所谓的 "ROS(2)图"。

ROS图是一个由ROS 2元素组成的网络,在同一时间一起处理数据。它包括所有的可执行文件和它们之间的联系,如果你把它们全部映射出来并加以可视化的话。

2. ROS 2 中的节点

ROS中的每个节点应该负责一个单一的、模块的目的(例如,一个节点负责控制车轮马达,一个节点负责控制激光测距仪,等等)。每个节点可以通过(Topic)主题、(Service)服务、(Action)行动或(Parameters)参数向其他节点发送和接收数据。
Nodes-TopicandService.gif
一个完整的机器人系统是由许多节点协同工作组成的。在ROS 2中,一个可执行文件(C++程序、Python程序等)可以包含一个或多个节点。

1. ros2 run命令

ros2 run命令从一个软件包中启动一个可执行文件。

ros2 run <package_name> <executable_name>

要运行turtlesim,打开一个新的终端,并输入以下命令。

ros2 run turtlesim turtlesim_node

正如你在上一个教程(使用 turtlesim 和 rqt)中看到的那样,海龟模拟窗口将打开。在这条命令中,软件包的名称是turtlesim,可执行文件的名称是turtlesim_node。

然而,我们仍然不知道节点的名称。你可以通过使用这条命令找到节点名称。

ros2 node list

2. ros2 node list 命令

ros2 node list 将显示所有运行中的节点的名字。当你想与某个节点进行交互时,或者当你有一个运行着许多节点的系统,需要跟踪它们时,这一点特别有用。

当turtlesim在另一个终端中运行时,打开一个新的终端,并输入以下命令:

ros2 node list

终端将返回节点名称:

/turtlesim

打开另一个新终端,用命令启动teleop节点:

ros2 run turtlesim turtle_teleop_key

返回到你运行ros2 node list的终端,再次运行它。现在你会看到两个活动节点的名字。

/turtlesim
/teleop_turtle

2.1 重映射(Remapping)

重映射允许你将默认的节点属性,如节点名称、主题名称、服务名称等,重新设置为自定义值。在上一个教程中,你在turtle_teleop_key上使用重映射来改变被控制的默认乌龟。

现在,让我们重新设置我们的/turtlesim节点的名称。在一个新的终端,运行以下命令:

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

现在如果你回到运行ros2 node list的终端,并再次运行它,你会看到三个节点名称。

/my_turtle
/turtlesim
/teleop_turtle

3. ros2 node info 命令

当你知道了节点的名字,你可以通过这条命令查看关于它们的更多信息。

ros2 node info <node_name>

例如查看刚才在步骤2.1中打开的节点my_turtle,运行以下命令:

ros2 node info /my_turtle

ros2 node info 返回一个与该节点交互的订阅者(subscribers)、发布者(publishers)、服务(services)和行动(actions)(ROS图连接)的列表。输出应该是这样的:

/my_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/turtle1/cmd_vel: geometry_msgs/msg/Twist

Publishers:

/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/color_sensor: turtlesim/msg/Color
/turtle1/pose: turtlesim/msg/Pose

Service Servers:

/clear: std_srvs/srv/Empty
/kill: turtlesim/srv/Kill
/my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
/reset: std_srvs/srv/Empty
/spawn: turtlesim/srv/Spawn
/turtle1/set_pen: turtlesim/srv/SetPen
/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
/turtle1/teleport_relative: turtlesim/srv/TeleportRelative

Service Clients:

\
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

Action Clients:

现在试着在/teleop_turtle节点上运行同样的命令,看看它的连接与my_turtle有什么不同。

ros2 node info /teleop_turtle

image.png

你将在接下来的教程中学习更多关于ROS图连接的概念,包括消息(message)类型。

现在你已经了解了ROS 2中的节点,你可以继续学习话题(Topic)教程了。话题是连接节点的通信类型之一。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
目录
相关文章
|
存储 XML 网络协议
|
编译器 C语言 C++
【C语言】malloc()函数详解(动态内存开辟函数)
【C语言】malloc()函数详解(动态内存开辟函数)
4927 2
|
移动开发 JavaScript 安全
Vue 应用程序性能优化:代码压缩、加密和混淆配置详解
Vue 应用程序性能优化:代码压缩、加密和混淆配置详解
895 0
|
计算机视觉
YOLO 目标检测 识别框不显示文字标签(已解决)
YOLO 目标检测 识别框不显示文字标签(已解决)
|
10月前
|
人工智能 算法 机器人
2026:具身智能软件——开发者工具、范式与方向
具身智能的未来之战,本质上将是一场软件范式的竞争。正如早期PC和智能手机的革命最终由操作系统和应用生态所定义,具身智能的泛化能力和落地速度,也取决于其软件开发工具链和范式的革新。本报告将聚焦于加速这一转折的三大核心软件范式,深入剖析其技术内涵、主流工具,并为具身智能开发者构建一份面向2026年的前瞻性技能图谱。
2002 4
|
域名解析 小程序 Linux
CentOS搭建内网穿透frp并绑定自定义域名
CentOS搭建内网穿透frp并绑定自定义域名
3993 2
|
机器学习/深度学习 设计模式 自然语言处理
【算法分析与设计】算法概述
【算法分析与设计】算法概述
|
机器人 Python
ROS2教程 03 节点Node
本文是关于ROS2(机器人操作系统2)的教程,介绍了ROS2的节点概念、与ROS1的区别、节点的编写和基本流程、ros2的node相关命令,以及如何对节点名进行重映射,旨在帮助读者理解ROS2中节点的创建和操作。
1072 0
ROS2教程 03 节点Node
|
算法 Java C++
C++和Python在内存管理上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存管理上的主要区别是什么?
627 1
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
2750 0