ROS基础¶
ROS定义¶
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。
ROS/介绍 - ROS Wiki --- ROS/Introduction - ROS Wiki
ROS组成¶
通信机制¶
ROS1 中的通信机制采用 松耦合分布式架构,核心理念如下:
- 松耦合(Loose Coupling)
系统模块通过中介机制(ROS Master) 通信,而非彼此直接调用或依赖; - 分布式(Distributed)
各节点可部署在不同设备/计算机上,通过网络通信协同工作; - 点对点通信
节点注册与发现通过 ROS Master 实现,后续通信走点对点连接(TCP/UDP)。
松耦合的关键特性:
-
解耦设计(Loose Coupling)
-
发布者与订阅者互不依赖,不需了解对方;
- 只需统一话题名与消息类型即可通信;
-
节点可动态启动、重启、替换,不影响系统运行。
-
点对点连接(Peer-to-Peer)
-
通信由节点之间直接建立 TCP 或 UDP 连接完成;
-
ROS Master 仅在注册和撮合阶段参与,通信阶段不介入。
-
可扩展 & 易调试
-
各节点支持独立开发、单独部署、模块化测试;
- 支持跨设备分布式部署,适合构建大型复杂机器人系统。
通信机制的结构组成:
组件 | 说明 |
---|---|
Node(节点) | ROS 的基本功能单元,每个节点负责一个模块任务(如激光雷达驱动、路径规划) |
ROS Master | 中央协调器,负责节点注册、话题匹配、服务发现等 |
Topic(话题) | 异步消息通信机制,支持多对多消息广播 |
Service(服务) | 同步请求-响应机制,适合请求式控制通信(如“开始识别”) |
Action(动作) | 具备异步反馈、进度更新与中止支持,适合长时间任务(如导航、机械臂移动) |
Message(消息) | 节点通信数据格式,由 .msg 文件定义 |
开发工具¶
应用功能¶
生态系统¶
ROS核心概念¶
ROS的概念分为三个层次:文件系统层、计算图层、社区层
ROS文件系统层次¶
文件系统层概念主要指在硬盘里能看到的ROS目录和文件,例如:
- Packages(功能包): Packages是在ROS中整理及组织软体的主要单元。一个Packages包含节点(ROS runtime processes)、ROS程式库(ROS-dependent library)、数据集(datasets)、配置文件(configuration files)⋯⋯等等。Packages是您在ROS中能建立及分享的最小单元。
- Metapackages: Metapackages 是一组具体的服务相关的功能包。大部分的metpackages 只作为转换rosbuild Stacks的向后兼容的备选。
- Package Manifests(功能包清单): Manifests (package.xml) 描述一个package的元信息,包括了package的名字,版本,功能简述,证书信息,依赖关系,以及一些其他的被export的package所有的信息。关于package.xml 的文件说明,参考REP-0127.
- Repositories: 代码仓库是使用VCS版本控制系统的软件包集合,软件包利用版本控制维持同一版本,它能使用catkin自动发布工具bloom进行发布。这些代码仓库常通过映射来进行转换 rosbuild Stacks.仓库可以是只有一个软件包。
- Message (msg) types: 存储在my_package/msg/MyMessageType.msg的Message文件,主要定义了ROS系统的messages传输的数据结构。
- Service (srv) types: 存储在 my_package/srv/MyServiceType.srv的服务services文件,定义了ROS的服务通信时的请求(request )和响应(response )相关的数据结构。
ROS计算图层次¶
计算图是ROS在点对点网络里整合并处理数据的过程。基本计算图概念是 节点, 主机, 参数服务器, 消息, 服务, 话题, and 数据包,它们通过不同的方式提供数据给图层。
- Nodes(节点):节点是 ROS 中的计算处理单元,用于执行具体功能。ROS 设计为一个细粒度模块化系统,一个完整的机器人控制系统通常由多个节点构成。
例如:一个节点控制激光雷达;一个节点控制轮式电机;一个节点负责定位;一个节点进行路径规划;一个节点提供图形用户界面(GUI)。
每个 ROS 节点是通过 ROS 客户端库(如 roscpp
或 rospy
)编写的。
-
Master(主节点):ROS Master 提供名称注册与查询服务,它是整个计算图的中心协调者。
若没有 Master,节点之间无法相互发现、交换消息或调用服务。 -
Parameter Server(参数服务器):
参数服务器允许通过键值对形式在中央位置存储和共享参数数据。目前,参数服务器是 ROS Master 的一部分。 - Messages(消息):
节点之间通过传递消息(Message)进行通信。消息本质上是一种数据结构,由具有明确类型的字段组成。
支持的类型包括:
- 基本类型:整型、浮点型、布尔型等;
- 基本类型数组;
-
支持结构体嵌套和数组嵌套(类似于 C 语言中的
struct
结构)。 -
Topics(话题):
ROS 采用发布 / 订阅(Publish / Subscribe)机制进行异步通信。节点通过将消息发布到一个话题(Topic)来发送数据,而订阅该话题的节点则会接收到这些消息。
- 话题是用于标识消息内容的名称;
- 一个话题可以同时拥有多个发布者与订阅者;
- 同一个节点可以同时发布和/或订阅多个话题;
- 发布者与订阅者互不感知彼此存在,实现了通信的解耦;
-
可以将话题视为一种强类型的消息总线(message bus) ,只要消息类型匹配,任何人都可以通过这个总线进行通信。
-
Services(服务):
虽然发布/订阅机制灵活,但由于其多对多、单向通信的特性,不适用于需要请求/响应交互的场景。
这种一对一、同步交互由**服务(Service)**机制实现。
服务通过一对消息结构来定义:一个用于请求,另一个用于响应。
提供服务的节点以名称注册服务,客户端节点通过发送请求消息并等待响应来使用该服务。
在编程接口中,ROS 客户端库通常将其抽象为远程过程调用(RPC)形式,方便开发者调用。 * Bags(包文件):
Bag 是 ROS 中用于保存和回放消息数据的一种文件格式。
它在以下场景中非常重要:
- 保存传感器数据;
- 离线分析;
- 算法开发与测试。
Bag 文件允许开发者在没有真实硬件的情况下进行回放调试。
ROS通信机制¶
ROS(Robot Operating System)提供了多种通信机制,以满足不同模块间的数据交换和协同控制需求。主要包括四大通信机制:Topic、Service、Action 和 Parameter Server。
Topic¶
话题通信
- 特点:异步、多对多通信
- 机制:基于发布(Publisher)/订阅(Subscriber)模型
- 适用场景:适合传输连续不断的数据流,如图像、激光、IMU 等传感器数据
- 优点:解耦、扩展性强,不阻塞发送方
示例:摄像头节点发布图像,多个图像处理节点同时订阅进行处理。
Service¶
服务通信
- 特点:同步、一对一通信
- 机制:客户端发出请求,服务端响应,完成一次交互
- 适用场景:适合短时间的命令交互,如“获取参数”、“启动任务”等
- 优点:简单直接,阻塞调用
示例:导航控制节点请求路径规划节点生成路径,等待结果返回。
Parameter Server¶
参数服务器
- 特点:集中式参数管理机制
- 机制:以键值对(key-value)形式存储数据,节点通过 ROS Master 共享和访问这些参数
- 适用场景:适用于全局配置参数或静态标定数据的共享,如传感器参数、PID 控制参数、机器人模型路径等
-
优点:
-
各节点统一读取和更新共享参数,避免硬编码
- 支持运行时动态修改参数
- 可从 launch 文件加载,增强灵活性
示例:
- 控制节点从参数服务器读取
max_velocity
控制最大速度 - 图像处理节点读取
camera_intrinsics
获取相机内参
Action¶
Action(动作通信) 并不是 ROS 最基础的通信机制,而是在 Service 基础上扩展的一种异步任务机制,用于处理长时间执行任务,支持反馈与中止。
它通过底层封装多个话题和服务实现,属于更高级的通信抽象层。
- 特点:异步、有反馈、可取消的任务通信机制
- 机制:客户端发送目标,服务器执行,并周期性反馈进度,可中途取消
- 适用场景:适合耗时任务,如“移动到指定位置”、“机械臂抓取”
- 优点:灵活,支持状态反馈与中断控制
示例:控制机械臂从 A 移动到 B,可在中途查看进度或取消任务。
通信对比¶
特性 | Topic | Service | Action | Parameter Server |
---|---|---|---|---|
通信类型 | 异步 | 同步请求响应 | 异步+反馈+取消 | 配置参数共享 |
一对多支持 | ✅ | ❌ | ✅ | ✅(多节点可访问) |
是否阻塞 | 否 | 是 | 否 | 否(访问阻塞较低) |
使用场景 | 数据流传输 | 控制指令请求 | 长时间任务 | 配置、标定参数 |
ROS文件系统¶
ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构大致可以如下图所示: