案例十三:小心别撞墙——超声波精准“停车”挑战赛
案例简介
前面 12 节课,我们学会了 PU 机器人的全部能力:走路、跳舞、唱歌、变灯光、感知距离、表达情绪……现在,是时候来一场真正的机器人竞赛了!
比赛规则很简单:在赛道前方放置一面"墙壁"(障碍物),所有机器人在同一起跑线出发,朝墙壁直线前进,在撞上之前停下来。谁的机器人离墙壁最近且没有碰到墙壁,谁就获胜!
听起来简单?但要真正做到"近而不碰",需要精准控制超声波传感器的距离判断、行走速度和停车时机——这就是本课的核心挑战。学生将综合运用超声波传感器、动作模块、循环模块、变量模块,编写"精准停车"程序,通过多轮比赛不断调优参数,在竞赛中体验工程调优的乐趣。
教学准备
| 名称 | 图示/说明 |
|---|---|
| PU 机器人套装 | ![]() |
| 编程设备(电脑) | 每组一台 |
| 比赛赛道 | 宽 1 米、长 2 米以上的平整区域,用胶带标出起跑线 |
| "墙壁"(障碍物) | 坚硬平整的纸箱/木板,高度超过机器人头部,宽度覆盖赛道 |
| 卷尺 | 用于测量最终停车距离,精确到毫米 |
| 计时器 | 用于记录每组的完成时间 |
| 打印"比赛记录表"(每组一份) | |
| 奖品/奖状 | 冠亚季军奖励(可选) |
PU 机器人双足步行特性回顾
| 特性 | 说明 | 对停车挑战的影响 |
|---|---|---|
| 步行方式 | 6 自由度舵机驱动双足交替迈步 | 每一步跨出后必须落地站稳,无法"半步悬停" |
| 停止机制 | 舵机停止运动 → 保持当前站立姿态 | 停止响应快,没有"滑行",但步态中途无法中断 |
| 速度可调 | 通过调整步幅(动作幅度参数)和步频(循环延时)控制 | 步幅小→每步距离短→更容易精准停,但走得慢 |
教师提示:PU 机器人是 OTTO 类双足步行机器人,不是轮式小车。轮式车有"刹车惯性"——车轮停转后车身还会往前滑一段距离。但双足机器人没有滑行惯性——舵机一停就站住了。双足停车的真正难点在于步态时机:你无法精确控制"迈半步",只能控制"迈完这步后不再迈下一步"。
比赛规则
基本规则
| 规则项 | 说明 |
|---|---|
| 目标 | 机器人从起跑线出发直线前进,停在墙壁前,离墙壁最近且不触碰者获胜 |
| 赛道 | 平整地面,起跑线距墙壁约 1.5 米(可根据场地调整) |
| 出发 | 按下 A 键后启动,机器人自动前进 |
| 有效成绩 | 机器人没有碰到墙壁的前提下,传感器到墙壁的最短距离 |
| 犯规判定 | 机器人碰到墙壁 = 碰撞犯规,该轮成绩无效 |
| 比赛轮次 | 根据实际时长及学生活跃度灵活调整,建议练习赛两轮,正式比赛一轮 |
得分规则
| 成绩 | 得分 |
|---|---|
| 距离墙壁 ≤ 1cm 且未触碰 | ⭐⭐⭐ 满分(完美停车!) |
| 1cm < 距离 ≤ 3cm | ⭐⭐ 优秀 |
| 3cm < 距离 ≤ 5cm | ⭐ 良好 |
| 5cm < 距离 ≤ 10cm | 合格 |
| 距离 > 10cm | 太远了,继续加油 |
| 碰到墙壁 | 犯规,该轮 0 分 |
特殊情况 如果两位同学编写的代码使PU在完全相同的距离处停止,那么获胜者是最先停止的机器人.
课程目标
综合运用超声波传感器、动作模块、循环模块、变量模块、编写"精准停车"程序;
在竞赛情境中体验工程调优的完整流程——测试→分析→修改→再测试,培养科学实验思维;
培养竞技精神与团队协作能力。
课程引入
同学们,今天不是上课——是比赛!
规则只有一句话:让你的机器人走到墙壁面前,停下来,离墙壁越近越好,但绝对不能撞上去!
你可能觉得这很容易——"不就是一直走,看到墙就停嘛!"但你想想,机器人收到"停止"指令到真正停下来,中间有一个过程——就像你跑步时听到哨声,身体还会往前冲几步才停下来。这个"往前冲"的距离,就是机器人的"制动惯性"。
所以真正的挑战是:你需要在机器人还没到墙的时候就下达停止指令,留出"刹车距离"。但留太多了就离墙太远(输),留太少了就撞墙(犯规)。
这个"刚刚好"的距离是多少?没有标准答案——你的机器人和你自己去找!
学习探究
第一阶段:分析挑战——双足停车为什么难?
讨论:双足 vs 轮式,停车有什么不同?
轮式小车 双足 OTTO 机器人 行进方式 车轮持续滚动 双足交替迈步 停止方式 电机停转,靠摩擦减速 舵机停转,直接站住 有滑行吗? 有,车轮有惯性会滑一段 没有,舵机停就站住了 精准停车难点 刹车时机(留出滑行余量) 步态时机(最后一步跨多远不可控) 每次结果一样吗? 比较稳定 有随机偏差 - 核心结论:双足机器人没有"滑行刹车"问题,但有一个轮式车没有的问题——你无法精确控制每一步跨多远。同样的"前进"指令,每步实际距离可能有 ±0.5cm 的偏差。
停车时机分析:
关键发现:误差大小取决于"发出停止指令时,机器人处于步态的哪个阶段"
- 如果刚好在一步的开始被检测到 → 这一整步都要跨完 → 误差大
- 如果刚好在一步的末尾被检测到 → 只多走一点点 → 误差小
- 这是随机的,无法精确控制!
- 降低误差的策略:
| 策略 | 原理 | 效果 |
|---|---|---|
| 小步幅行走 | 每步跨得短,即使多走一步,误差也小 | ⭐⭐⭐ 最有效 |
| 低步频行走 | 每步之间间隔长,给传感器更多检测机会 | ⭐⭐ 有效 |
| 提高检测频率 | 减少每次循环的延时,更快发现"该停了" | ⭐⭐ 有效 |
| 多次取最优 | 跑多轮,取最好成绩 | ⭐ 治标不治本 |
MakeCode 编程

程序链接:https://makecode.microbit.org/_TRMWvyP1AXsM
此程序仅为最简单示例,可通过编程继续优化效果
第四阶段:正式比赛
- 赛前准备:
- 各组确认最终参数(练习赛中表现最稳定的一组)
- 机器人放置在起跑线后方,朝向墙壁,确保步行方向对准
- 裁判(教师)用卷尺确认起跑线到墙壁的距离一致
正式赛流程(每组 3 轮):
裁判宣布"准备" → 各组放置机器人
↓
裁判宣布"3、2、1、出发!" → 各组同时按下 A 键
↓
机器人步行前进……(其他同学围观加油)
↓
机器人停车(或撞墙)
↓
裁判用卷尺测量:机器人头部到墙壁的距离(精确到毫米)
↓
记录成绩 → 下一组
赛后分析:
- 公布排名,颁发奖状
- 冠军组分享:你们的停车阈值和步幅设的是多少?调参过程中最关键的发现是什么?
- 犯规组反思:为什么会撞墙?如果再来一次,你会改哪个参数?
- 全班讨论:为什么同一个参数,有时候停得好,有时候停得差?
课后延伸
挑战一:"连续挑战赛"——完成一次停车后,自动后退回到起跑线,再前进停第二次。连续 3 次都停在 3cm 以内算"大师级"!提示:后退距离用固定延时控制;
挑战二:"跟随挑战"——让机器人跟随障碍物保持固定距离(如 5cm)。障碍物前进,机器人跟着前进;障碍物停下,机器人停下;障碍物后退,机器人也后退。提示:如果距离 > 5cm 就前进,< 5cm 就后退,= 5cm 就停止;
