跳到主要内容

第 7 周

规划一次自主任务

把一件真实的活儿变成一份方案:需求、约束、流程图,以及一次安全的自主任务。

  • 60 至 75 分钟
  • 任务: 用需求、约束和一张流程图规划一次自主任务,再用一次简短的引导练习任务把它排演一遍。

学生要学的是:工程师在动手造之前,是怎样规划机器人这份活儿的。他们先分清自主系统(靠传感器和程序自己作决定)和遥控系统(由人来操控),然后为一项任务写下需求、约束和评判标准,并权衡其中的取舍。他们要画出自主程序的流程图,用矩形表示动作、菱形表示判断,其中还包括一次安全停车;最后跑一次简短的引导练习任务,为下周的结业项目预演。

这一周结束时,你将能够

  • 说明自主系统和遥控系统的区别
  • 为一项机器人任务写下需求、约束和成功标准
  • 描述机器人方案中的一处取舍,并用工程设计流程作出选择
  • 画出自主程序的流程图,包含动作方框、判断菱形和一次安全停车
  • 跑一次简短的引导自主任务,并把结果与它的成功标准对照

学习

自主与遥控

机器人干活有两种方式。遥控的时候,是人实时操控它,每一个动作都由人来决定。自主的时候,机器人跑自己的程序,靠传感器自己作决定,没有人在操控。

这一周讲的是自主任务,因为下周你要造一台必须自己完成工作的机器人。这意味着所有的判断都得提前规划好,并写进程序里。

例如:自主:扫地机器人、按预定路线行驶的火星车、人行道上的送货机器人; 遥控:遥控汽车、用摇杆操控的航拍无人机、由人看着画面驾驶的救援机器人

需求、约束和评判标准

动手之前先规划。需求是机器人「必须」做到的事:「把方块送到蓝色区域」。约束是你必须在里面施展的限制:「30 秒之内」「只能用一个传感器」「不能比一个鞋盒大」。评判标准是你判断成败的方式:「停在区域之内」以及「一次也没撞到墙」。

先把这些写下来,方案才不会含糊其辞。如果你都说不清机器人到底有没有把活儿干成,那说明你的标准还不够明确。

例如:需求:「找到目标并停下」; 约束:「一分钟之内完成」; 标准:「在离目标 5 厘米以内停住」

取舍与工程设计流程

好处几乎不可能一次全占。取舍就是放弃一点这个,去换更多的那个。跑得快的机器人可能来不及读传感器就撞上;把它放慢,就是用速度换可靠性。往往没有唯一「正确」的答案:你要挑一个最贴合自己需求和约束的取舍。

工程师用工程设计流程来应付这件事:规划、制作、测试、改进,然后再来一轮。每走完一圈就是一次迭代。你还要考虑效率:在不打破标准的前提下,用更少的步骤、更短的时间或更少的能量把活儿干完。

例如:快 对 稳; 程序简单 对 能应付更多障碍; 步骤更少(效率高)对 检查更仔细

流程图:先把程序画出来,再动手写

流程图就是把你程序的步骤画成一张图。动作写在矩形里(「向前走」「停」)。判断写在菱形里,提一个是或否的问题(「前面有墙吗?」),「是」和「否」各引出一条箭头。箭头把各个方框连起来,你就能顺着看出机器人要走的路。

先画流程图,你就能在动手之前发现问题。一张好的自主流程图,总是包含一个不停查看传感器的循环,以及一个明确的收尾,而那正是安全停车该待的地方。

例如:矩形 = 动作; 菱形 = 一次是或否的判断; 箭头 = 步骤的先后顺序

安全停车与负责任的机器人技术

自主机器人是自己作决定的,所以它需要一种安全停下来的办法:一段编好的行为,在任务完成或者有东西(或有人)挡路时把它停住。没有安全停车,自主机器人可能会一直往墙上或人身上撞。

这正是负责任的机器人技术的一部分:多想想安全,也想想什么时候该由人来掌控。自主机器人特别擅长枯燥重复的活儿,但只要涉及风险(靠近人群,或者一旦出错就可能伤到人),就得有人能监督、能接管、能一键关停。

负责任的设计者还会考虑隐私:带摄像头或麦克风的机器人会收集关于人的信息,所以只收集这份工作真正需要的那些。他们会为失败做好打算:万一系统坏了,谁来负责?它出故障时会安全地停下来,还是照样往前冲?他们也会判断,哪些活儿机器人只该协助人、而不该独自掌控:机器人可以给护士递一件器械,但医疗判断得由人来作。

最后,好的机器人在设计时会顾及不同的用户和需求:使用者可能年幼也可能年长,可能读不懂同一种语言,也可能需要更大的按钮、声音或灯光。为真实而多样的人去设计,本身就是负责任地做机器人的一部分。

例如:扫地机器人在楼梯边缘停下并后退; 有人走到前面时,送货机器人会暂停; 测试时有人把手放在停止按钮旁边随时待命; 家用机器人只录它需要的内容,而且录之前会先征求同意; 警示同时用灯光和声音,好让更多人能注意到

现实世界里的自主机器人

自主机器人已经在干实实在在的活儿了,而且几乎都是枯燥、脏累或危险的活儿,也几乎都有人在旁边监督。看看真实的例子,有助于你规划自己的任务:每一个都在感知世界、用程序作决定、然后行动,而且都有一种安全停下来的办法。

读这些例子时,留意第 1 周那个模式:输入(传感器)、处理(判断)、输出(动作),再加上一次安全停车和一个随时能介入的人。

例如:仓库配送机器人把货架送到工人面前,同时感知其他机器人以免相撞; 火星车自己走完规划好的路线,因为从地球发来的指令要好几分钟才能到; 农业机器人在作物行间穿行,检查庄稼或者除草; 搜救机器人钻进废墟或浓烟,那些地方对人来说太危险了; 水下检测机器人去检查管道、船体和线缆,那些地方潜水员没法安全抵达; 工厂里的机械臂在安全护栏后面,一遍又一遍精准地焊接和组装同一个零件; 机器人手术器械让外科医生的动作更稳、更精细,而全程掌控的始终是医生本人

要认识的词

自主:
靠自己行动:机器人用传感器和程序决定该做什么,不需要有人操控。
遥控:
由人实时地、一步步地操控,比如用摇杆或手机应用。
需求:
机器人「必须」做到、才算完成任务的事,比如「到达卸货区」。
约束:
你必须在里面施展的限制条件,比如时间、尺寸、材料或预算。
评判标准:
你用来判断成败的尺度,比如「在离墙 5 厘米以内停住」或者「30 秒内跑完」。
取舍:
放弃一点某样好东西,去换来更多的另一样,比如开慢一点来换取更可靠。
工程设计流程:
工程师们反复走的那个循环:规划、制作、测试、改进。
迭代:
在设计循环里走完的一圈:测试你的方案或机器人,找出问题,再把它改好。
效率:
用更少的东西把活儿干好:更少的步骤、更短的时间,或者更少的能量。
安全停车:
一段编好的行为,在任务完成或者有东西挡路时,让机器人安全地停下来。
负责任的机器人技术:
多想想安全,也想想什么时候该由人、而不是机器人来掌控。
流程图:
程序的分步示意图,用方框表示动作、用菱形表示判断。

注意安全

这一周动手搭建或运行机器人之前,先把这些读一遍。

  • Caution:练习跑动时,保持测试区域通畅,并随时准备好在机器人跑出路线时把它停住;让手指远离转动的轮子。
  • Caution:永远要编好一次安全停车,让自主机器人在任务完成或有东西挡路时停下来,而不是硬顶着往墙上或人身上撞。
  • Caution:保持地板上的胶带赛道通畅,免得演示任务时有人绊倒。
  • Note:常常保存你的程序和日志,免得刷新浏览器把方案弄丢。

动手做

选择你的路线

这门课你可以用机器人套件、浏览器模拟器,或者不插电、只用家里的材料来上。挑一条就行,随时可以换,你的成果不会丢。

写一份任务方案

机器人套件

把一件小小的自主任务变成一份方案:需求、约束、成功标准,以及你不得不权衡的一处取舍。

  • 挑一件小的自主任务,比如「开到区域里停下」或者「一直找到目标为止」。把它写在「任务规划书」的最上面。
  • 填写规划书:需求(它「必须」做到什么)、约束(时间、尺寸、只有一个传感器之类的限制)和评判标准(你要怎样判断成败)。然后点明一处你不得不权衡的取舍,比如速度与可靠性。

为你的套件机器人规划一次任务

你需要:「任务规划书」活动纸, 作参考用的套件机器人, 一个做了标记的区域或一小段路线

步骤

  1. 1挑一件你的套件这周真能做到的任务,比如开到胶带标出的区域里然后停下。
  2. 2先写需求,再写你的套件带来的约束(它的速度、它仅有的一个传感器、你手头的场地)。
  3. 3写下可衡量的成功标准,然后点明一处取舍,比如开慢一点好把传感器读稳。

做成了是什么样:一份填好的规划书,至少有两条需求、两条约束、两条可衡量的标准,以及点明的一处取舍。

重点看:
  • 需求写明了机器人「必须」做到什么
  • 约束列出了真实存在的限制
  • 标准是可衡量的(一个数字,或者一个明确的是与否)
  • 点明了一处取舍

安全:这一步是在纸上做的;规划的时候把机器人关着。

如果不管用

需求和约束看着一个样
- 需求是一件要干的活儿(「到达区域」);约束是一条限制(「30 秒之内」)。把每一行都归到其中一类里去。

再往前一步:再加一个更难的第二版任务,并列出它带来了什么新的需求。

画出任务流程图

机器人套件

把任务方案变成一张流程图,其中要有动作方框、至少一个判断菱形、一个查看传感器的循环,以及一次安全停车。

  • 在流程图页上,从一个「开始」方框出发,到一个「安全停车」方框结束。动作放进矩形里,每一次是或否的判断放进菱形里,并配上一条「是」箭头和一条「否」箭头。
  • 你的自主流程图必须不停地查看传感器(也就是一个循环),而且必须终结于一次安全停车:任务完成时或者有东西挡路时,机器人就停下来。

给你的套件任务画流程图

你需要:流程图页, 你已经填好的「任务规划书」

步骤

  1. 1按顺序写下任务的各个步骤:开始,然后是各个动作(向前走等等)。
  2. 2为传感器的检查加一个判断菱形,比如「前面有墙吗?」,并配上一条「是」的路径和一条「否」的路径。
  3. 3让「否」那条路径绕回去,继续行驶和检查;把「是」那条路径接到「安全停车」方框。

做成了是什么样:一张从「开始」到「安全停车」的流程图,包含动作方框、至少一个判断菱形、一条绕回去的循环,以及一个明确的结束。

重点看:
  • 动作都画在矩形里
  • 至少有一次判断画成了菱形,并配有「是」和「否」的箭头
  • 有一个循环在不停地查看传感器
  • 以安全停车收尾

安全:这是纸上的一步;现在还不需要让任何机器人跑起来。

如果不管用

流程图永远停不下来
- 每张自主流程图都需要一个出口:从某个判断引一条箭头到「安全停车」方框。

再往前一步:再加一个判断菱形,让机器人能应付两种不同的传感器读数。

引导式自主练习任务

机器人套件

跑一次简短的自主任务(开到一个区域、对一个障碍物作出反应、然后安全停下),为下周的结业项目做预演。

  • 直接照着你的流程图把程序搭出来:一段行驶的顺序指令、一个不停查看传感器的循环、一个对障碍物作出反应的条件,以及机器人到达区域或碰到障碍物时的安全停车。
  • 跑一遍,对照你的成功标准看结果,并记下一处你想改进的地方;那个「改进」的步骤就是一次迭代,也正是你下周要大量去做的事。

在你的套件机器人上跑这次练习任务

你需要:带一个传感器的机器人套件, 做了标记的区域或一小段路线, 你的流程图

步骤

  1. 1布置一小段路线:一条起跑线、一个要抵达的区域,还有一个挡在路上的障碍物。
  2. 2编写一段前进的顺序指令、一个查看距离或触碰传感器的循环、一个对障碍物作出反应的条件,以及到达区域时的安全停车。
  3. 3从起跑线跑一遍,对照你的成功标准检查一下,并记下一处改进。

做成了是什么样:套件机器人开到区域、对障碍物作出反应,并安全地停下来,而不是硬顶过去。

重点看:
  • 到达了区域
  • 对障碍物作出了反应,而不是视而不见
  • 安全地停下(没有继续往前开)
  • 记下了一处改进

安全:保持测试区域通畅,机器人运行时手指要离轮子远一点。 随时准备好,一旦机器人跑出路线就把它停下。

如果不管用

机器人对障碍物视而不见
- 检查传感器阈值,以及循环是不是一直在读传感器,就像第 6 周做可靠性时那样。
机器人冲过了区域
- 把行驶速度降下来,或者在停车之前加一次距离检查:这就是拿速度换可靠性的取舍。

再往前一步:把障碍物挪到新位置,确认机器人照样会作出反应并停下。

给机器人编程

Build a program from blocks, then run it on the simulator. On the kit path, use the same steps in your robot's app; unplugged, act the blocks out on a floor grid. Your program saves on this device.

引导式练习任务程序

照着你的流程图搭出来的自主练习程序:向前行驶、一个不停查看传感器的循环、一个对障碍物作出反应的条件,以及在区域处的安全停车。

就绪

添加积木块

事件与执行

移动

控制

数据

输出

变量与计数器

还没有。

你的程序

  • 前进
第 1 列,第 1 行第 2 列,第 1 行第 3 列,第 1 行第 4 列,第 1 行第 1 列,第 2 行第 2 列,第 2 行第 3 列,第 2 行:墙第 4 列,第 2 行第 1 列,第 3 行第 2 列,第 3 行第 3 列,第 3 行第 4 列,第 3 行Goal zone at column 4, row 2Robot at column 1, row 2
  • 机器人(箭头指向它的朝向)
  • 终点区(虚线框)
  • 墙(灰色,带 X)

地图:一片 4 × 3 的网格。 机器人从第 1 列、第 2 行出发,朝向右。 终点区在第 4 列、第 2 行。 有 1 面墙。

就绪.

可以运行了。 · 0 steps

机器人状态

1
2
朝向
前方距离
1
触碰
没有接触
在线上
光线
80
在终点区内
碰撞次数
0
步数
0

机器人在第 1 列、第 2 行,朝向右。 前方距离:1 格。 触碰:没有接触。 在线上:否。 光线:80。 不在终点区内。

日志输出

还没有记录任何内容。

  • Heads up: This program has no safe stop behavior. Add a safe stop so the robot stops when it is done or blocked.

预测

Commit to a guess before you test - then see how close you were. Your predictions save automatically.

怎样验证:跑一遍引导式练习任务,把发生的情况和你写在规划书上的每一条成功标准逐条对照。

测试与改进

练习任务与它的标准对照

每次都从同一个起点跑这次引导式练习任务。每跑一遍,都记下发生了什么,并对照规划书上的成功标准检查一遍。

要测量的:每一条成功标准是否达成,以及结业项目里该改什么

Run到达区域了吗?(是/否)对障碍物作出反应了吗?(是/否)安全停下了吗?(是/否)该改进什么

知识检测

回答这几题,检验一下你能否规划一次自主任务、并看懂一张流程图。

  1. 1. 一台送货机器人靠自己的传感器和程序,自己开到了卸货区,全程没人操控。这台机器人是:

  2. 2. 「机器人必须到达蓝色区域」和「它必须在 30 秒之内完成」。哪一条是需求,哪一条是约束?

  3. 3. 在流程图里,菱形代表什么?

  4. 4. 你的机器人跑得快,可有时来不及读传感器就撞了。你把它放慢,好让它读得稳。这个选择属于:

  5. 5. 自主机器人的程序里为什么需要一次安全停车?

已答 0 / 5

反思

你的反思会自动保存。

下周预告

下周就是结业项目了:你要设计、搭建或模拟、编程、测试并改进一台机器人,让它完成一项你自己挑的、有用的任务,用的正是你今天练过的这套规划方法。

  • 把你的任务规划书和流程图留着:结业项目里可以直接沿用,也可以在它们的基础上升级。
  • 把结业项目的五个任务方向(配送、搜救、检测、分拣、无障碍辅助)浏览一遍,想想你会选哪个。
  • 给你的套件充好电或者把模拟器加入收藏夹,再把前几周的纸板和材料都收拢起来。

完成第 7 周

完成以下内容,即可结束本周并解锁下一周:

  • 完成任务规划书,写明需求、约束、评判标准和一处取舍 (not done yet)
  • 画出任务流程图,含一个判断菱形和一次安全停车 (not done yet)
  • 跑一遍引导式练习任务,并对照它的标准做记录 (not done yet)
  • 知识检测至少答对 5 题中的 4 题 (not done yet)
  • 写下你的反思 (not done yet)