# 3.1 ROS2节点介绍 本节主要给大家介绍节点,不知道有多少小伙伴看了第一章的扩展阅读,小鱼通过ROS镇长的小故事来和大家讲解了ROS的通信机制。 ## 1. ROS2节点是什么 里面有一个故事是关于李四和王二的,李四是一个作家,每天都会更新一个叫做《艳娘传奇》的小说,王二是个单身汉,最喜欢看的就是李四写的《艳娘传奇》。所以就有了李四发布小说,王二订阅小说。 我们把故事里的李四和王二当成ROS2中的节点看,《艳娘传奇》就是话题。 现在是一个讲究分工合作的社会,所以每一位村民都只专门负责一个单一的模块,比如有一个村民只做木匠、一个村民只卖豆腐、一个村民只造车轮子等等,大家一起构成了一个社会群体,就像一个完整的生态系统。 ROS2中的节点也是如此,每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等) ![image-20210915153915430](3.1ROS2节点介绍/imgs/image-20210915153915430.png) ## 2.节点之间如何交互? 上面举了一个激光雷达的例子,一个节点负责获取激光雷达的扫描数据,一个节点负责处理激光雷达数据,比如去除噪点。 那节点与节点之间就必须要通信了,那他们之间该如何通信呢?ROS2早已为你准备好了一共四种通信方式: - 话题-topics - 服务-services - 动作-Action - 参数-parameters 这四种种通信方式的用途和使用方法,小鱼放到了第四和第五章来介绍,到时候同时会带大家手撸代码。 官方给了一张图,大家先大概看一下,帮助理解![Nodes-TopicandService](3.1ROS2节点介绍/imgs/Nodes-TopicandService.gif) ## 3. 如何启动一个节点? 知道了节点的概念之后,我们该如何启动一个节点呢? 因为工作空间和包的概念,小鱼放到了下一讲,这里大家跟着小鱼一起运行一个节点,感受一下。 使用指令: ``` ros2 run ``` 指令意义:启动 包下的 中的节点。 使用样例: ``` ros2 run turtlesim turtlesim_node ``` 大家可以尝试一下上面的指令,就是我们在第二章中启动小乌龟模拟器的那条指令。 运行之后可以看到一只小乌龟,接下来就可以试试下一节中提到的几个指令来查看节点信息和列表。 ## 4. 通过命令行界面查看节点信息 ### 4.1 ROS2命令行 ROS2的CLI,就是和ROS2相关的命令行操作。什么是命令行界面呢?这里小鱼再讲解一个概念,CLI(Command-Line Interface)和GUI(Graphical User Interface) - GUI(Graphical User Interface)就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。 - CLI(Command-Line Interface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。 很久之前电脑还是没有图形化界面的,所有的交互都是通过命令行实现,就学习机器人而言,命令行操作相对于图形化优势更加明显。 ROS2为我们提供了一系列指令,通过这些指令,可以实现对ROS2相关模块信息的获取设置等操作。 ### 4.2 节点相关的CLI 运行节点(常用) ``` ros2 run ``` 查看节点列表(常用): ``` ros2 node list ``` 查看节点信息(常用): ``` ros2 node info ``` 重映射节点名称 ``` ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle ``` ## 5.总结 通过本节课的学习,希望大家对节点的概念有所了解,下一节小鱼带你一起学习工作空间的相关概念 ------ - ROS2命令行工具源码;[ros2/ros2cli: ROS 2 command line interface tools (github.com)](https://github.com/ros2/ros2cli)