ROS 2 初识学习笔记
1. 什么是 ROS 2?
ROS (Robot Operating System) 并不是真正意义上的操作系统(如 Linux 或 Windows),而是一个运行在操作系统之上的中间件(Middleware)和软件框架。
从后端开发的视角来看,ROS 2 本质上是一个面向机器人的分布式微服务架构。它提供了一套标准化的通信机制、硬件抽象层和一系列工具,让你能把复杂的机器人系统(比如感知、决策、控制)拆解解耦成独立运行的小模块。
与 ROS 1 相比,ROS 2 最大的改进是引入了 DDS (Data Distribution Service) 协议,实现了真正的去中心化(移除了单点故障的 Master 节点),并提升了实时性和安全性。
2. 核心通信机制 (重点)
ROS 2 的核心在于各个模块之间如何交换数据。理解以下四个概念是掌握 ROS 2 的关键:
2.1 节点 (Node)
- 定义:ROS 2 中最小的执行单元。一个节点负责执行一个具体的任务(例如:读取激光雷达数据、控制电机转动)。
- 特性:节点之间是互相独立的进程,可以运行在同一台机器上,也可以跨网络运行在不同的机器上。
- 类比:一个 Node 就相当于一个独立的 Go 微服务实例或一个 Java Spring Boot 应用。
2.2 话题 (Topic)
- 通信模式:发布/订阅 (Publish / Subscribe)。
- 特点:单向、异步、多对多。数据流是连续的,发布者只管发,不关心谁在听;订阅者只管收,不关心谁在发。
- 适用场景:高频、连续的数据流(如摄像头画面、传感器实时数据)。
- 类比:非常类似后端的 Kafka 或 RabbitMQ 的 Pub/Sub 模式。
2.3 服务 (Service)
- 通信模式:请求/响应 (Request / Response)。
- 特点:双向、同步(或基于回调的异步)、一对一。客户端发送请求,服务端处理后返回结果。
- 适用场景:快速执行的、离散的、需要确认结果的操作(如“查询当前电池电量”、“打开特定传感器”)。
- 类比:标准的 HTTP RESTful API 或 gRPC 调用。
2.4 动作 (Action)
- 通信模式:目标 (Goal) + 反馈 (Feedback) + 结果 (Result)。
- 特点:双向、异步、可抢占/可取消。它是基于 Topic 和 Service 组合出来的高级封装。
- 适用场景:耗时较长、且执行期间需要实时了解进度的复杂任务(如“导航到指定坐标点”、“机械臂抓取物体”)。
- 类比:提交一个耗时的异步任务(Job),客户端可以通过长连接或轮询不断获取当前执行进度,并在最终完成时拿到结果。同时,客户端随时有权取消这个 Job。
3. 工程与构建系统
在实际开发中,ROS 2 有自己的一套代码组织和编译规范。
3.1 工作空间 (Workspace)
- 定义:一个包含 ROS 2 代码的特定目录结构。通常包含
src(源码目录)、build(中间编译文件)、install(最终的可执行文件和库)、log(日志)四个子目录。
3.2 功能包 (Package)
- 定义:ROS 2 代码组织的基本单元。一个 Package 可以包含多个相关的 Node。
- 语言支持:原生支持 C++ (
rclcpp) 和 Python (rclpy)。你可以用 Python 写高层逻辑 Node,用 C++ 写底层性能敏感的 Node,它们可以无缝通信。 - 类比:类似于 Go 的 module 或者是 Java 的 Maven/Gradle 模块。
3.3 编译工具 (Colcon)
- 定义:ROS 2 的官方构建工具。用于遍历工作空间下的所有 Package 并解决依赖进行编译。
- 常用命令:
colcon build - 类比:相当于后端的
go build或mvn clean install。
4. 运行与调试概念
- Setup/Source 环境:在运行任何 ROS 2 程序前,必须在终端执行
source /opt/ros/<版本>/setup.bash以及自己工作空间的setup.bash。这类似于配置后端的环境变量或$GOPATH,用来告诉系统去哪里找包和依赖。 - CLI 工具:ROS 2 提供了强大的命令行工具(如
ros2 node list,ros2 topic echo),方便开发者不写代码就能监听网络中的数据走向,极大地降低了调试分布式系统的难度。
评论 (0)