第二章:ROS2能干什么——了解它的实际用途¶
2.1 ROS2 主要解决什么问题¶
机器人是个复杂的系统,有:
- 眼睛(摄像头)
- 耳朵(麦克风)
- 脚(轮子/腿)
- 大脑(计算机)
- ……
这些东西要协调工作,ROS2 主要帮你解决三个问题:
问题一:通信问题¶
举个例子:
实际场景
机器人的摄像头看到前面有堵墙,
它得告诉控制轮子的程序:
"哥们儿,前面有东西,别往前走了!"
这个"告诉"的过程,就是 通信。
ROS2 提供了好几种通信方式:¶
1. 话题(Topic)—— 像广播电台¶
工作原理
- 一个节点不停地"广播"数据
- 其他想听的节点就"收听"
- 发的人不管谁在听
- 听的人也不管谁在发
适用场景: 传感器数据这种持续产生的数据流
举例:
- 摄像头节点不停地发图像
- 图像处理节点订阅这些图像来处理
- 显示节点订阅来显示给你看
大家各干各的,互不干扰。
2. 服务(Service)—— 像打电话¶
工作原理
- 你发一个请求
- 对方处理完了给你回复
- 你得等着对方回复才能继续
适用场景: "问一下"的场景
举例: 问问机器人现在电量多少
3. 动作(Action)—— 像网购¶
工作原理
- 你下单(发送目标)
- 然后物流一直告诉你到哪了(反馈)
- 最后收到货(结果)
- 中间你还能取消订单
适用场景: 需要较长时间的任务
举例: 让机器人走到某个地方
问题二:硬件抽象¶
不同厂家的摄像头、雷达、电机,底层接口都不一样。
没有 ROS2 的情况
如果你要直接跟硬件打交道,
每换一个设备就得重新学一遍,烦死了。
ROS2 的解决方案¶
统一接口
- 不管你用什么牌子的摄像头,图像数据都是同一种格式
- 不管什么牌子的激光雷达,数据格式也是统一的
好处:
你写的程序换个设备也能用,不用改代码。
问题三:工具支持¶
ROS2 自带很多实用工具:
RViz2¶
- 可以 3D 显示机器人的状态
- 显示传感器数据
- 显示规划的路径
用途: 调试的时候特别有用
Gazebo¶
- 是个仿真器
- 可以在虚拟环境里测试机器人
为什么需要仿真
真机器人贵啊,撞坏了心疼,
在仿真里随便撞。
ros2 bag¶
- 可以把机器人运行时的数据录下来
- 之后回放分析
rqt 系列图形化工具¶
- 画图
- 看日志
- 查看节点关系
都挺方便的。
2.2 ROS2 都用在哪些地方¶
说几个常见的:
1. 移动机器人¶
应用实例
- 扫地机器人
- 送餐机器人
- 仓库搬运机器人
主要功能:
- SLAM 建图
- 导航避障
ROS2 都有现成的包。
2. 机械臂¶
应用实例
- 工厂里焊接的
- 喷漆的
- 现在挺火的协作机器人
核心框架:
ROS2 有个叫 MoveIt2 的框架,专门做运动规划的,挺好用的。
3. 无人机¶
应用实例
- 航拍的
- 农业喷药的
- 送快递的
4. 自动驾驶¶
很多自动驾驶公司的原型系统就是基于 ROS 开发的。
实际情况
当然真正上路的产品可能会换成自己的系统,
但研发阶段用 ROS 很普遍。
2.3 举个具体例子¶
场景设定¶
假设我们要做一个能在室内自己走的机器人,它需要:
- 建立地图
- 知道自己在哪
- 规划路径
- 控制轮子
- 遇到障碍物要躲开
在 ROS2 里的软件架构¶
最底层:传感器层¶
- 激光雷达节点
- 摄像头节点
- IMU(惯性测量单元)节点
各自有个节点,不停地往外发数据。
中间层:感知层¶
- SLAM 节点 → 处理雷达数据建地图
- 定位节点 → 算机器人在哪
- 目标检测节点 → 处理图像
上层:决策层¶
- 导航决策节点
- 综合这些信息
- 决定往哪走、怎么躲障碍物
底层:执行层¶
- 底盘控制节点
- 把决策转化成轮子的转速
架构优势¶
每个框都是一个独立的节点,它们通过话题交换数据。
这样设计的好处
- 换个雷达? 只改雷达节点就行,其他不用动
- 想加个摄像头? 加个摄像头节点就行,不影响原来的
- 某个节点崩了? 其他节点还能继续跑
2.4 ROS2 的典型工作流程¶
步骤一:感知¶
传感器采集环境信息:
- 摄像头拍图像
- 雷达扫描周围
- IMU 测量姿态
步骤二:处理¶
处理节点分析数据:
- 图像识别出了什么
- 雷达建出了地图
- 定位算出了位置
步骤三:决策¶
决策节点综合信息:
- 分析当前状态
- 规划下一步动作
步骤四:执行¶
控制节点执行命令:
- 给电机发指令
- 控制机器人运动
步骤五:反馈¶
- 执行结果反馈给感知层
- 形成闭环
闭环控制
这个循环不断进行,机器人就能自主工作了。
2.5 实际应用案例分享¶
案例一:仓库搬运机器人¶
需求:
- 在仓库里自动搬运货物
- 能自主导航
- 能避开障碍物和人
ROS2 方案:
传感器节点(激光雷达)
↓
SLAM 节点(建图定位)
↓
导航节点(路径规划)
↓
控制节点(执行运动)
案例二:服务机器人¶
需求:
- 在餐厅送餐
- 能认人
- 能语音交互
ROS2 方案:
摄像头节点 → 人脸识别节点
麦克风节点 → 语音识别节点
↓
决策节点
↓
导航节点 + 语音合成节点
案例三:巡检机器人¶
需求:
- 在工厂巡检
- 检测设备异常
- 自动充电
ROS2 方案:
热成像摄像头 → 异常检测节点
GPS + 雷达 → 定位导航节点
电池监控 → 充电管理节点
本章小结¶
通过这一章,你应该已经了解到:
- ROS2 主要解决的问题:
- 通信问题(话题、服务、动作)
- 硬件抽象(统一接口)
-
工具支持(仿真、可视化、调试)
-
ROS2 的应用领域:
- 移动机器人
- 机械臂
- 无人机
-
自动驾驶
-
ROS2 的软件架构:
- 模块化设计
- 节点通信
- 数据流动
下一章预告¶
下一章我们会讲:
ROS2 的前身 ROS1——知道它从哪来
了解 ROS1 和 ROS2 的区别,为什么要学 ROS2。