第7周:复习与实操演练
课时: 6小时(第一次课3小时 + 第二次课3小时)
📋 本周课程表
| 次序 |
时间 |
主题 |
内容 |
| 第1次 |
3小时 |
知识总复习 |
知识点梳理、重点难点 |
| 第2次 |
3小时 |
模拟练习 |
上机练习、查漏补缺 |
第一次课:前半学期知识总复习(3小时)
⏱️ 时间分配
| 环节 |
时间 |
内容 |
| 复习 |
60分钟 |
第一阶段知识点 |
| 复习 |
60分钟 |
第二阶段知识点 |
| 茶歇 |
10分钟 |
休息 |
| 讨论 |
50分钟 |
答疑 |
2.4.1 第一阶段知识点(第1-3周)
知识点清单
┌─────────────────────────────────────────────────────────────┐
│ 第一阶段:基础与环境搭建 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 第1周 │
│ ├── 机器人与AI的区别和联系 │
│ ├── ROS2简介 │
│ ├── Docker安装与使用 │
│ ├── 网络基础知识(IP/MAC/Ping) │
│ └── Turtlesim仿真环境 │
│ │
│ 第2周 │
│ ├── 节点(Node)概念 │
│ ├── 话题(Topic)概念 │
│ ├── 发布/订阅模型 │
│ ├── Twist消息类型 │
│ └── 命令行控制 │
│ │
│ 第3周 │
│ ├── Python基础 │
│ ├── rclpy使用 │
│ ├── 创建发布者 │
│ ├── 定时器和回调 │
│ └── 走正方形实现 │
│ │
└─────────────────────────────────────────────────────────────┘
重点回顾
| 周次 |
重点 |
难点 |
| 第1周 |
Docker使用、网络概念 |
ROS2架构 |
| 第2周 |
Pub/Sub模型、Twist消息 |
消息类型 |
| 第3周 |
Python节点编程 |
回调函数 |
2.4.2 第二阶段知识点(第4-6周)
知识点清单
┌─────────────────────────────────────────────────────────────┐
│ 第二阶段:运动学与空间感知 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 第4周 │
│ ├── 坐标系概念 │
│ ├── 世界坐标vs机器人坐标 │
│ ├── 里程计(Odometry) │
│ └── 运动学公式 │
│ │
│ 第5周 │
│ ├── 传感器分类 │
│ ├── 激光雷达(LiDAR) │
│ ├── 相机与图像 │
│ └── RViz可视化 │
│ │
│ 第6周 │
│ ├── 开环vs闭环控制 │
│ ├── PID控制器 │
│ ├── 反馈原理 │
│ └── 简单避障逻辑 │
│ │
└─────────────────────────────────────────────────────────────┘
重点回顾
| 周次 |
重点 |
难点 |
| 第4周 |
坐标系、里程计 |
坐标变换 |
| 第5周 |
传感器、RViz |
数据格式 |
| 第6周 |
闭环控制、PID |
控制算法 |
第二次课:模拟练习(3小时)
⏱️ 时间分配
| 环节 |
时间 |
内容 |
| 练习 |
80分钟 |
上机练习题 |
| 茶歇 |
10分钟 |
休息 |
| 讲解 |
40分钟 |
难题讲解 |
| 总结 |
30分钟 |
总结与答疑 |
2.4.3 模拟练习题
练习1:ROS2命令
ros2 run turtlesim turtlesim_node
ros2 node list
ros2 topic list
ros2 topic pub /turtle1/cmd_vel geometry_msgs/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
ros2 topic echo /turtle1/pose
练习2:Python编程
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import time
class SquareNode(Node):
def __init__(self):
super().__init__('square_node')
self.pub = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
def move(self, speed, duration):
msg = Twist()
msg.linear.x = speed
start = self.get_clock().now()
while (self.get_clock().now() - start).nanoseconds < duration * 1e9:
self.pub.publish(msg)
time.sleep(0.01)
self.pub.publish(Twist())
def turn(self, speed, duration):
msg = Twist()
msg.angular.z = speed
start = self.get_clock().now()
while (self.get_clock().now() - start).nanoseconds < duration * 1e9:
self.pub.publish(msg)
time.sleep(0.01)
self.pub.publish(Twist())
def square(self):
for _ in range(4):
self.move(1.0, 2.0)
self.turn(1.0, 1.57)
练习3:运动学计算
题目:
机器人左轮速度0.5m/s,右轮速度1.5m/s,轮间距0.5m
求:
1. 线速度v
2. 角速度ω
3. 走完一圈需要多长时间?
解答:
1. v = (0.5 + 1.5) / 2 = 1.0 m/s
2. ω = (1.5 - 0.5) / 0.5 = 2.0 rad/s
3. 一圈距离 = 2πr = 2π × 0.25 ≈ 1.57m
时间 = 1.57 / 1.0 ≈ 1.57秒
练习4:闭环控制
题目:
简述PID控制器各部分的作用
答案:
• 比例(P):根据当前误差调整输出,响应速度快
• 积分(I):累积历史误差,消除稳态误差
• 微分(D):根据误差变化率调整,抑制振荡
2.4.4 查漏补缺(40分钟)
常见问题
| 问题 |
解答 |
| 节点启动失败? |
检查ROS2环境变量 source /opt/ros/humble/setup.bash |
| 话题没有数据? |
检查发布者是否启动 |
| 机器人不动? |
检查cmd_vel话题是否有数据 |
| RViz显示空白? |
检查Fixed Frame设置 |
实验报告检查
| 检查项 |
要求 |
| 代码注释 |
每个函数有注释 |
| 运行截图 |
有成功运行的截图 |
| 问题分析 |
有问题原因和解决方案 |
本周总结
知识体系
AI机器人知识体系:
┌─────────────────────────────────────┐
│ 基础知识 │
│ (第1-3周) │
│ Docker + ROS2 + Python │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ 感知与控制 │
│ (第4-6周) │
│ 传感器 + 坐标系 + 闭环 │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ AI应用 │
│ (第9-12周) │
│ 视觉 + 识别 + Sim2Real │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ 综合项目 │
│ (第13-15周) │
│ 设计 + 实现 + 展示 │
└─────────────────────────────────────┘
知识点速查表
┌─────────────────────────────────────────────────────────────┐
│ 第1-7周知识点速查 │
├─────────────────────────────────────────────────────────────┤
│ 概念 │
│ ├── Node = ROS2节点 │
│ ├── Topic = 话题 │
│ ├── Twist = 速度消息 │
│ ├── Odometry = 里程计 │
│ ├── LiDAR = 激光雷达 │
│ └── PID = 比例积分微分 │
├─────────────────────────────────────────────────────────────┤
│ 命令 │
│ ├── ros2 run pkg node 运行节点 │
│ ├── ros2 topic list 查看话题 │
│ ├── ros2 topic pub 发布消息 │
│ ├── ros2 topic echo 监听话题 │
│ └── rviz2 启动可视化 │
├─────────────────────────────────────────────────────────────┤
│ 公式 │
│ ├── v = (v_l + v_r) / 2 (线速度) │
│ ├── ω = (v_r - v_l) / L (角速度) │
│ └── PID = Kp*e + Ki*∫e + Kd*de/dt │
└─────────────────────────────────────────────────────────────┘
📚 课后复习建议
- 整理笔记 - 把每周的知识点整理成思维导图
- 动手实践 - 不熟悉的命令多练习几遍
- 查阅文档 - 遇到问题先查ROS2官方文档
- 准备考试 - 第8周期中考试,重点复习第1-6周
⚠️ 第8周预告
第8周:期中考试
- 形式:上机实操
- 内容:控制机器人走"8"字形
- 要求:独立完成
第7周结束!祝大家考试顺利!