Skip to content

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 文件中。

# 查看消息类型
rosmsg show std_msgs/String

# 输出
string data

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 学习之旅:

环境配置 ROS 通信 感知模块