目录
一、前言:为什么要学 ROS2?
ROS 是机器人领域的事实标准框架,而 ROS2 则是在 ROS1 的基础上彻底重构、提升实时性、跨平台性、分布式、可靠性的新一代系统。
松灵机器人推出的《松灵ROS2开讲啦》聚焦ROS 2技术的学习平台,课程涵盖了ROS 2基础、Gazebo仿真、ROS 2建图算法、视觉模块等知识,帮助大家深入认知ROS 2在机器人开发中的应用和发展。
二、ROS 的历史与 ROS1 / ROS2 的区别
2.1 ROS 的发展历程
-
2007:第一个版本诞生
-
2010:ROS1 正式发布
-
2017:ROS2 Ardent
-
2022:ROS2 Humble LTS

2.2 ROS1 的优势

2.3 ROS1 的不足
ROS1 所有节点都依赖 ROS Core(Master),这是最大的架构缺陷。

2.4 ROS2 的设计优势
ROS2 去掉 Master,最底层由 DDS 提供通讯支持:
-
真·分布式(无中心 Master)
-
高实时性(DDS QoS)
-
更安全
-
跨 Linux、Windows、Mac
-
多种 QoS(可靠/不可靠、保持历史等)
三、ROS2 开发前需掌握的 Linux 基础
3.1 指令表格
| 指令 | 作用 |
|---|---|
| ls | 列出文件 |
| cd | 切换目录 |
| pwd | 查看路径 |
| mkdir | 创建目录 |
| cat | 查看文件内容 |
| vim | 编辑文件 |
| sudo | 提权执行命令 |
3.2 指令示例

四、ROS2 常用命令
| 类型 | 命令 | 作用 |
|---|---|---|
| 节点 | ros2 node list | 查看节点 |
| 节点 | ros2 node info /name | 查看节点详情 |
| 话题 | ros2 topic list | 查看话题 |
| 话题 | ros2 topic echo /topic | 订阅话题 |
| 话题 | ros2 topic pub /topic ... | 发布话题 |
| 服务 | ros2 service list | 查看服务 |
| 服务 | ros2 service call /srv ... | 调用服务 |
| 参数 | ros2 param list | 查看参数 |
| 参数 | ros2 param set ... | 设置参数 |
详细ROS2常用指令可以参考我之前写过的文章,链接如下:
五、ROS2 通讯机制:话题与服务
5.1 话题(Topic)通信:异步、单向、无反馈
话题机制 = 发布者(Publisher)→ 订阅者(Subscriber)
特点:
-
异步通信
-
无需建立连接
-
单向传输(只发送消息)
-
无反馈机制
-
可以多对多(一个话题可以 N 个发布者、N 个订阅者)
简而言之:
发布者 / 发布节点 只管发,不管有没有人收;
订阅者 / 订阅节点 一直收,也不管消息是否为空。
使用场景: 定位 / 速度 / 激光雷达等实时流式数据。


5.2 服务(Service)通信:同步、请求-响应
服务机制 = 客户端(Client)↔ 服务端(Server)
特点:
-
有“请求 → 回复”的闭环
-
必须有人响应
-
类似于函数调用
-
一个 Service 服务器可对应多个客户端
-
同步通信(典型)
简而言之:
服务端只会在客户端调用时才响应。
使用场景:
清除地图、重置位置、控制机械臂抓取、设置参数……


5.3 话题 VS 服务:对比总结
| 对比项 | Topic | Service |
|---|---|---|
| 通信方式 | 异步 | 同步 |
| 方向 | 单向 | 双向 |
| 是否有回复 | ❌ 无 | ✔ 有 |
| 典型用法 | 传感器数据、速度指令 | 清除、生成、计算、获取值 |
| 连接 | 不要求 | 必须建立连接 |
话题与服务的最大区别:是否有反馈机制。
六、ROS2 节点(Node)结构
-
Node1:服务端 + 发布者
-
Node2:客户端 + 订阅者
-
Node3:订阅者
这是 ROS2 分布式系统的典型结构,每个节点只负责一种功能,模块化极强。

七、小乌龟实操
1)启动仿真小乌龟
ros2 run turtlesim turtlesim_node
2)键盘控制
ros2 run turtlesim turtle_teleop_key
3)查看节点图(rqt_graph)
ros2 run rqt_graph rqt_graph

4)查看 话题 &服务 列表
ros2 topic list
ros2 service list

5)调用清除轨迹服务
ros2 service call /clear std_srvs/srv/Empty
6)召唤一个小乌龟
ros2 service call /spawn turtlesim/srv/Spawn "{x: 3.0, y: 3.0, theta: 0.0, name: ''}"
注意两点:
- Tab 键补齐
- ros2 service call /spawn turtlesim/srv/Spawn 填写完后 打 “x, 然后tab补全

1817

被折叠的 条评论
为什么被折叠?



