love-her

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发送应答数据。

posted on 2025-03-30 11:40  不想起名字a_a  阅读(169)  评论(0)    收藏  举报

导航