S01
系统架构与 ROS 2 入门
高中 · 10–12 年级 · 10 课时 × 40–45 分钟
核心问题:一个完整的机器人系统,如何被分解成可复用、可替换的软件模块?
项目目标
- 能画出服务机器人感知—决策—执行的软件架构图
- 掌握 ROS 2 节点、话题、服务、动作、参数的基本用法
- 能用 launch 文件组织一个可复现的机器人系统
领域落点
AI:理解感知模块在系统中的位置与数据接口
硬件:主控/上位机、编码器底盘、激光雷达或 ToF、IMU;八界 6 轴机械臂(结构与坐标演示)
算法:发布订阅、坐标变换、系统集成
10 课时大纲
2 + 6 + 2| 课次 | 课题 / 驱动问题 | 关键知识点 | 学生任务 | 产出 |
|---|---|---|---|---|
| L01 | 从产品到系统:功能框图 一台 DEEBOT 里藏着多少个“软件模块”? | 功能分解:感知/定位/规划/控制/交互;数据流与控制流;实时性与算力约束 | 拆解实机功能,画出“传感器→感知→决策→执行”的数据流图,标注频率与接口。 | 系统功能框图 |
| L02 | ROS 2 架构:节点、话题、服务、动作 为什么机器人软件要用“节点”组织? | 节点与进程;话题(异步)与服务(同步);动作(长任务)与参数 | 运行 Turtlesim 与示例节点,用 rqt_graph 观察拓扑,解释三种通信方式的适用场景。 | 通信方式对比表 |
| L03 | 工作空间与功能包 一个机器人项目怎样组织代码? | colcon 工作空间;package.xml 与 CMakeLists;Python/C++ 包结构 | 创建 `edu_bot` 功能包,写一个发布 `/cmd_vel` 的节点,编译并运行。 | 可编译功能包 |
| L04 | 发布订阅:传感器数据回放 怎样让程序“吃到”真实数据? | 消息类型与 QoS;rosbag 录制/回放;回调与队列 | 录制一段 `/scan` 与 `/odom`,回放并写节点统计雷达最小距离。 | 数据统计节点 |
| L05 | TF 坐标变换 机器人各部分的位置怎样统一? | 坐标系树 map→odom→base_link→sensor;静态/动态 TF;四元数与欧拉角 | 用 tf2 查询 `base_link` 到 `laser` 的变换,并发布一个静态 TF。 | TF 查询节点 |
| L06 | URDF 与机器人模型 怎样在软件里“造”一台机器人? | link/joint 与惯性参数;visual/collision;robot_state_publisher | 为底盘建立 URDF,包含两个驱动轮、万向轮与雷达,在 RViz 中显示。 | URDF 模型 |
| L07 | Launch 与参数 怎样一键启动整套系统? | launch 文件;参数与 YAML;命名空间与重映射 | 编写 launch 文件,同时启动底盘、雷达、TF 与可视化,参数外置到 YAML。 | launch + 参数文件 |
| L08 | 仿真接入 没有真机也能开发吗? | Gazebo/Webots 与 2D 仿真;仿真时间与时钟;sim2real 差异 | 在仿真中加载机器人模型,用键盘遥控走完指定路线,记录里程误差。 | 仿真遥控记录 |
| L09 | 联调:遥控 + 里程计可视化 数据通了,系统就通了吗? | 端到端联调;频率与延迟检查;常见故障定位 | 联调遥控、里程计与雷达显示,用 `ros2 topic hz` 检查频率,修复至少 2 个问题。 | 联调报告 |
| L10 | 架构评审 这套架构能支撑后面的项目吗? | 模块边界与接口契约;可测试性;技术债 | 以评审会形式展示架构,列出 3 个风险与改进计划,形成班级公共代码基线。 | 架构评审记录 |
说明:本页是教程副本(大纲级),不是完整课件。完整课件、教案、学案、代码与仿真场景按学校进度单独导出。