ROS 机器人操作系统¶
欢迎学习 ROS(Robot Operating System)!本模块将带你从零开始掌握 ROS 的核心概念和实践技能。
什么是 ROS?¶
ROS 是一个用于编写机器人软件的灵活框架,它提供了类似于操作系统的服务,包括硬件抽象、底层设备控制、常用功能实现、进程间消息传递和包管理。
为什么使用 ROS?¶
┌─────────────────────────────────────────────────────────────┐
│ ROS 的核心价值 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 模块化设计 │
│ └── 每个功能独立为一个节点(Node) │
│ │
│ 2. 通信机制 │
│ └── 节点之间通过话题(Topic)/ 服务(Service)通信 │
│ │
│ 3. 社区生态 │
│ └── 浓厚的社区提供丰富的现成功能包 │
│ │
│ 4. 跨平台 │
│ └── 支持 Linux、macOS、Windows(WSL) │
│ │
│ 5. 仿真支持 │
│ └── 与 Gazebo、PyBullet 等仿真器无缝集成 │
│ │
└─────────────────────────────────────────────────────────────┘
ROS 的历史版本¶
| 版本 | 发行年份 | 状态 | 特点 |
|---|---|---|---|
| ROS 1 (Noetic) | 2020 | LTS (维护中) | 成熟稳定,社区资源丰富 |
| ROS 2 (Humble) | 2022 | LTS | 改进的实时性、安全性、多机器人支持 |
Tip
本课程主要使用 ROS Noetic,因为它在工业和学术界仍然广泛使用。
课程路线图¶
flowchart TB
A([开始学习 ROS]) --> B[环境配置]
B --> C[ROS 基础]
C --> D[通信机制]
D --> E[感知模块]
E --> F[路径规划]
F --> G[SLAM]
G --> H[多机器人]
H --> I[真实机器人]
B -.-> B1[安装 ROS]
B -.-> B2[创建工作空间]
B -.-> B3[配置环境]
C -.-> C1[节点]
C -.-> C2[话题]
C -.-> C3[服务]
D -.-> D1[发布者/订阅者]
D -.-> D2[服务端/客户端]
D -.-> D3[Launch 文件]
E -.-> E1[相机驱动]
E -.-> E2[图像处理]
E -.-> E3[目标检测]
F -.-> F1[导航栈]
F -.-> F2[路径规划算法]
F -.-> F3[避障]
G -.-> G1[gmapping]
G -.-> G2[cartographer]
G -.-> G3[RTAB-Map]
H -.-> H1[多机通信]
H -.-> H2[任务分配]
H -.-> H3[编队控制]
I -.-> I1[硬件接口]
I -.-> I2[调试技巧]
I -.-> I3[部署上线]
学习路径¶
第一阶段:环境准备¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | 环境配置 | 安装 ROS Noetic 和 Gazebo | 环境配置 |
| 2 | 工作空间 | 创建和管理 catkin 工作空间 | 环境配置 |
| 3 | 环境变量 | 理解 setup.bash 和 .bashrc | Linux 101 |
第二阶段:ROS 基础¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | ROS 通信 | 话题、服务、动作 | ROS 通信 |
| 2 | 发布者/订阅者 | 创建 Publisher 和 Subscriber | ROS 通信 |
| 3 | Launch 文件 | 启动多个节点 | ROS 通信 |
第三阶段:感知模块¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | 感知基础 | ROS 感知系统概述 | 感知节点 |
| 2 | 相机驱动 | 使用 USB 相机获取图像 | 感知节点 |
| 3 | 目标检测 | 使用 YOLO 进行目标检测 | 感知模块 |
第四阶段:路径规划¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | 导航栈 | ROS Navigation Stack | 路径规划 |
| 2 | 路径规划算法 | A*、Dijkstra、RRT | 路径规划 |
| 3 | 避障 | 动态避障策略 | 路径规划 |
第五阶段:SLAM¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | SLAM 基础 | 同时定位与建图 | SLAM |
| 2 | gmapping | 2D 激光 SLAM | SLAM |
| 3 | cartographer | Google 的 SLAM 方案 | SLAM |
第六阶段:进阶主题¶
| 序号 | 主题 | 描述 | 链接 |
|---|---|---|---|
| 1 | 多机器人通信 | 跨主机通信 | 多机器人 |
| 2 | 真实机器人 | 硬件接口和调试 | 真实机器人 |
| 3 | tmux 使用 | 终端复用工具 | 工具 |
核心概念¶
1. 节点(Node)¶
节点是 ROS 中的基本计算单元,每个节点执行一个特定的任务。
#!/usr/bin/env python3
import rospy
# 初始化节点
rospy.init_node('my_node', anonymous=True)
# 节点运行
rospy.spin()
2. 话题(Topic)¶
话题是节点之间异步通信的通道,使用发布/订阅模式。
┌─────────────┐ ┌─────────────┐
│ Publisher │ ──── Topic ────▶ │ Subscriber │
│ (发布者) │ /camera/image │ (订阅者) │
└─────────────┘ └─────────────┘
3. 服务(Service)¶
服务是节点之间同步通信的方式,使用请求/响应模式。
┌─────────────┐ ┌─────────────┐
│ Client │ ──── Request ───▶ │ Server │
│ (客户端) │ ◀─── Response ─── │ (服务端) │
└─────────────┘ └─────────────┘
4. 消息(Message)¶
消息是节点之间传递的数据结构,定义在 .msg 文件中。
5. Launch 文件¶
Launch 文件用于同时启动多个节点。
<launch>
<node name="camera" pkg="usb_cam" type="usb_cam_node" />
<node name="detector" pkg="yolo" type="detector_node" />
</launch>
常用命令¶
ROS 命令行工具¶
# 查看节点列表
rosnode list
# 查看话题列表
rostopic list
# 查看话题内容
rostopic echo /topic_name
# 发布消息
rostopic pub /topic_name std_msgs/String "data: 'Hello'"
# 查看服务列表
rosservice list
# 调用服务
rosservice call /service_name "arg1: value1"
# 查看参数
rosparam list
# 获取参数值
rosparam get /parameter_name
catkin 命令¶
# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
# 编译工作空间
catkin_make
# 设置环境
source devel/setup.bash
# 创建包
catkin_create_pkg my_package rospy std_msgs
# 安装依赖
rosdep install --from-paths src --ignore-src -r -y
实验列表¶
根据你的飞书课程,以下是完整的实验列表:
| 实验 | 主题 | 描述 |
|---|---|---|
| Lab 1 | Linux 基础 | Linux 系统基础和环境配置 |
| Lab 1-2 | ROS 基础 | ROS 安装和基本概念 |
| Lab 2-1 | 感知系统基础 | ROS 感知模块概述 |
| Lab 2-2 | 工作空间和通信 | 创建工作空间、发布者/订阅者、Launch 文件 |
| Lab 3 | YOLO 视觉模型 | 使用 YOLO 进行目标检测 |
| Lab 3-1 | 路径规划 | ROS 导航栈和路径规划 |
| Lab 4 | SLAM | 同时定位与建图 |
| Lab 4-2 | 真实机器人使用 | 真实机器人操作 |
| Lab 5 | 真实机器人 | 综合项目实践 |
补充资源¶
官方文档¶
社区资源¶
视频教程¶
下一步¶
选择一个学习路径开始你的 ROS 学习之旅: