DAY1--ROS基本认知
1.ROS基本框架
ROS架构如下图所示,可以将其分为三个层次:OS层、中间层和应用层。

1.1 应用层
应用层是用户直接交互的部分,包含以下核心组件:
-
Master:
ROS的核心协调者,负责节点(Node)的注册、发现和通信管理。节点启动时向Master注册自身信息(如话题、服务名称),Master帮助节点建立直接连接(如发布者-订阅者)。 -
Node:
节点的多个实例,代表系统中的独立功能单元。每个节点负责执行特定任务(如传感器数据处理、运动控制),通过ROS通信机制(话题、服务、动作)与其他节点交互。 -
...:
表示应用层可能包含的其他组件,如可视化工具(Rviz)、仿真环境(Gazebo)或用户自定义的功能包。
1.2 中间层
中间层是ROS的核心功能实现层,提供通信、编程接口和优化机制:
-
ClientLibrary:
ROS客户端库(如roscpp、rospy、roslisp),为开发者提供编程接口。这些库封装了ROS通信的底层细节,简化节点的开发。 -
TCPROS/UDPROS:
-
--TCPROS:基于TCP协议的通信方式,提供可靠、有序的数据传输,适用于大多数场景(如传感器数据流)。
-
--UDPROS:基于UDP协议的通信方式,支持低延迟、高效率的数据传输,适用于实时性要求高的场景(如控制指令)。
节点间通过这两种协议直接通信(无需Master转发),Master仅负责初始连接的建立。 -
Nodelet API:
用于在同一进程中运行多个节点(Nodelet),避免进程间通信的开销,显著提升数据密集型任务(如图像处理)的性能。
1.3 OS层
OS层是ROS运行的底层操作系统支持:
- Linux:
ROS1主要依赖Linux(尤其是Ubuntu),其底层功能(如进程管理、网络通信、硬件驱动)由Linux操作系统提供。ROS2已扩展支持更多操作系统(如Windows、macOS),但传统ROS1架构通常与Linux深度绑定。
2.功能包
1)config:放置功能包中的配置文件,由用户创建,文件名可以不
同。
2)include:放置功能包中需要用到的头文件。
3)scripts:放置可以直接运行的Python脚本。
4)src:放置需要编译的C++代码。
5)launch:放置功能包中的所有启动文件。
6)msg:放置功能包自定义的消息类型。7)srv:放置功能包自定义的服务类型。
8)action:放置功能包自定义的动作指令。
9)CMakeLists.txt:编译器编译功能包的规则。
10)package.xml:功能包清单
3.ROS常用命令

3.1话题通信机制
在ROS中有两个节点:一个是发布者Talker,另一个是订阅者
Listener。两个节点分别发布、订阅同一个话题,启动顺序没有强制要
求,此处假设Talker首先启动,可分成图中所示的七步来分析建立通信
的详细过程。

-
1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所发布消息的话题名;ROS Master会将节点的注册信息加入注册列表中。 -
2.Listener注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要订阅的话题名。 -
3.ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的发布者,则等待发布者的加入;如果找到匹配的发布者信息,则通过RPC向Listener发送Talker的RPC地址信息。 -
4.Listener发送连接请求
Listener接收到Master发回的Talker地址信息,尝试通过RPC向Talker发送连接请求,传输订阅的话题名、消息类型以及通信协议
(TCP/UDP)。 -
5.Talker确认连接请求
Talker接收到Listener发送的连接请求后,继续通过RPC向Listener确认连接信息,其中包含自身的TCP地址信息。 -
6.Listener尝试与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接。 -
7.Talker向Listener发布数据
成功建立连接后,Talker开始向Listener发送话题消息数据。
从上面的分析中可以发现,前五个步骤使用的通信协议都是RPC,最后发布数据的过程才使用到TCP。ROS Master在节点建立连接的过程中起到了重要作用,但是并不参与节点之间最终的数据传输。节点建立连接后,可以关掉ROS Master,节点之间的数据传输并不会受到影响,但是其他节点也无法加入这两个节点之间的网络。
3.2服务通信机制
服务是一种带有应答的通信机制,通信原理如下图所示。与话题的通信相比,其减少了Listener与Talker之间的RPC通信。

-
1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所提供的服务名;ROS Master会将节点的注册信息加入注册列表中。 -
2.Listener注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要查找的服务名。 -
3.ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的服务提供者,则等待该服务的提供者加入;如果找到匹配的服务提供者信息,则通过RPC向Listener发送Talker的TCP地址信息。 -
4.Listener与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接,并且发送服务的请求数据。 -
5.Talker向Listener发布服务应答数据
Talker接收到服务请求和参数后,开始执行服务功能,执行完成后,向Listener发送应答数据。
浙公网安备 33010602011771号