ROS2机器人数据采集与诊断工程 - 第1节
1. ROS2与传感器概述
1. ROS2与传感器概述
大家好,欢迎来到《ROS2传感器接入与数据处理实战》的第一章。
我是你们这门课的老朋友。做了十几年机器人,从ROS1一路折腾到ROS2,踩过的坑比走过的路还多。今天咱们先不急着写代码,先把地基打牢。
你想想看,一个机器人要感知世界,靠的是什么?说白了就是传感器。而ROS2,就是把这些传感器数据串起来、用起来的那根“线”。
1.1 ROS2发展史:从实验室到工业级
ROS最早是2007年斯坦福大学和Willow Garage搞出来的。那时候大家觉得,机器人软件太封闭了,得有个开源框架。
ROS1确实火了一把。但用久了问题就出来了——实时性差、通信不稳定、多机器人支持弱。我记得2018年做一个AGV项目,ROS1的节点一多,Master就崩,那叫一个头疼。
所以2017年,ROS2正式立项。它基于DDS(数据分发服务)重写了底层通信,解决了ROS1的三大痛点:
- 去中心化:没有Master节点,不会单点故障
- 实时性:支持硬实时系统
- 安全性:支持加密和认证
到2024年,ROS2已经发布了Humble、Iron、Jazzy等多个长期支持版本。我个人建议,新项目直接上Humble或Jazzy,稳定。
核心观点:ROS2不是ROS1的简单升级,而是面向工业级机器人场景的彻底重构。
1.2 ROS2核心概念:节点、话题、服务、动作
这四个概念,是ROS2的“四梁八柱”。我一个个说。
1.2.1 节点(Node)
节点就是机器人系统里的一个“小工人”。比如一个激光雷达驱动是一个节点,一个路径规划器也是一个节点。每个节点只干一件事,但合起来就能干大事。
嗯,这里要注意:ROS2里节点是可执行进程,不是线程。我刚开始学的时候老搞混。
1.2.2 话题(Topic)
话题是异步通信的通道。一个节点发布数据,其他节点订阅。比如激光雷达节点发布/scan话题,导航节点订阅它。
说白了,话题就是“广播”——谁爱听谁听,发布者不管。
1.2.3 服务(Service)
服务是同步通信。客户端发请求,服务端回响应。比如“给我一个地图”这种一问一答的场景。
我曾经在项目里用服务做参数查询,结果并发一高就超时。后来改成话题+回调,问题就解决了。所以记住:服务适合低频、短时的交互。
1.2.4 动作(Action)
动作是带反馈的异步任务。比如让机械臂“移动到A点”,过程中要不断反馈进度,还能随时取消。
动作 = 话题 + 服务 + 可取消。ROS2里用actionlib实现,非常实用。
我的习惯:传感器数据用话题,参数查询用服务,长时间任务用动作。别混用,否则代码会变得很难维护。
1.3 传感器在机器人系统中的作用
传感器是机器人的“五官”。没有传感器,机器人就是个瞎子。
常见的传感器类型:
| 传感器类型 | 典型设备 | 作用 |
|---|---|---|
| 距离传感器 | 激光雷达、超声波 | 测距、建图、避障 |
| 视觉传感器 | 摄像头、深度相机 | 目标检测、SLAM |
| 惯性传感器 | IMU(加速度计+陀螺仪) | 姿态估计、导航 |
| 力/触觉传感器 | 力矩传感器、触觉阵列 | 力控、抓取 |
在ROS2里,传感器数据通常以标准消息类型发布。比如激光雷达用sensor_msgs/LaserScan,摄像头用sensor_msgs/Image。这样做的好处是——换传感器不用改上层代码。
避坑指南:我曾经买过一个非标激光雷达,厂家给的驱动不兼容ROS2。结果花了三天自己写驱动。所以选传感器时,一定确认它有没有ROS2官方驱动。
1.4 课程项目概览
这门课不是光讲理论。我们会做一个完整的项目:基于ROS2的多传感器融合小车。
项目会用到:
- 激光雷达(2D/3D)
- IMU
- 摄像头
- 里程计
最终实现小车的自主导航+避障+目标跟随。每一章都会有一个可运行的Demo,代码全部开源。
为什么选这个项目?因为我在实际项目中遇到过太多传感器数据打架的情况——激光雷达说前面有墙,摄像头说没有,IMU又说车在转。怎么融合?怎么取舍?这些坑,我会在课程里一一拆解。
一句话总结本章:ROS2是机器人开发的“操作系统”,传感器是机器人的“感官”,而我们要学的,就是如何让它们高效协作。
这张图就是咱们这门课的整体脉络。从ROS2核心出发,连接各类传感器,经过数据处理,最终落地到实际应用。每一章都会围绕这个框架展开。
好,第一章就到这里。记住这四个核心概念,后面我们会反复用到它们。