机器人已经会走、也会照指令做事了,这一周学生要给它装上感官。他们会认识触碰、距离、光线和颜色四种传感器,并明白传感器读数是一个机器人能测出来的数字。他们会发现:阈值是一个分界点,能把数字变成「近还是远」「亮还是暗」;每个传感器都有探测极限;读数还会来回小幅跳动(噪声),所以要多测几次,并针对这个房间、这台机器人做校准。读数和校准之后,他们要编写一个由传感器触发的停车程序:机器人一边前进一边用距离传感器在墙前刹住,这样阈值终于控制了一个真实的动作。至于用循环和条件贯穿整个任务的完整自动行为,下周才登场。
这一周结束时,你将能够
- 说出触碰、距离、光线和颜色传感器的名称,以及它们各自测量什么
- 读出传感器数值,并说明读数是一个数字,而不是「是」或「否」
- 找出一个能把近和远、或者亮和暗分开的阈值
- 说明什么是探测极限和噪声,以及为什么要多测几次
- 校准传感器,让它的读数在这个房间、这台机器人上都靠得住
学习
机器人可以拥有的四种感官
机器人靠传感器感知世界。常见的有四种:触碰传感器(有没有被按下?)、距离传感器(最近的东西有多远?)、光线传感器(有多亮?)和颜色传感器(这个表面是什么颜色?)。
每种传感器只测一样东西。距离传感器分不出颜色,颜色传感器也测不出距离。为一件活儿挑对传感器,本身就是机器人学的一部分。
例如:触碰:门铃按钮; 距离:汽车倒车时的提示音; 光线:在暗处会自动变暗的手机屏幕; 颜色:按颜色分拣回收物的机器
读数是一个数字,不是「是」或「否」
大多数传感器不会只说「是」或「否」,它们给出的是一个数字,叫作传感器读数。距离传感器可能读出 12 厘米;光线传感器可能读出亮度 47。
既然是数字,读数就会随着外界的变化平滑地变化。你把墙挪近一些,距离的数字就变小;房间变亮一些,光线的数字就变大。
例如:距离传感器:12 厘米、30 厘米、85 厘米; 光线传感器:从 10(暗)到 90(很亮); 触碰传感器是个例外:它通常只读出按下或没按下
阈值把数字变成判断
阈值是你自己挑的一个分界数字,用来区分两种情况。如果你挑 15 厘米,那么小于 15 的读数就算「近」,大于 15 的就算「远」。
机器人没法替你挑阈值:你得观察那些读数,挑一个能把你关心的两种情况干净利落分开的数值。这一周你只负责找出并记下阈值;下一周机器人才会拿它们来作出反应。
例如:近与远的分界定在 15 厘米; 亮与暗的分界定在亮度 40; 循线机器人在黑线和白地板之间的分界
探测极限:每个传感器都有量程
没有哪个传感器什么都能感知。距离传感器超过一定量程就不管用了:它也许在 2 米以内读得挺准,再远就是一堆废数。它还能感知到的那个最远的点,就是它的探测极限。
传感器还有个「最近」的极限:把墙贴得离距离传感器太近,读数也会变得古怪。摸清这些极限,你就知道哪里可以信它,哪里不能。
例如:读不出大约 2 米以外的距离传感器; 需要表面贴得很近、几乎挨着的颜色传感器; 被一扇特别亮的窗户搞糊涂的光线传感器
噪声:为什么只测一次不够
把距离传感器对准一堵不动的墙,连着读几次。你可能会得到 30、31、30、29、31:明明什么都没变,数字却在小幅跳动。这种跳动就叫噪声。
有了噪声,只测一次就可能被骗。做科学和做机器人的人都会多测几次,取中间值或平均值,这比单独一个数字可靠得多。
例如:对着不动的墙测出 30、31、30、29、31; 云飘过时忽高忽低的光线传感器; 测 3 到 5 次,再互相比较
校准与可靠性
校准的意思是核对或调整传感器,让它的读数在这个房间、这台机器人上是准确的。光线传感器在阳光充足的房间和在昏暗的房间读数不一样,所以同一个阈值不可能到处都好使:你得针对身处的这个房间去校准。
校准并测试过的传感器才可靠:你可以信得过它每次都给出同样、正确的答案。可靠性正是关键所在,因为一台感知有误的机器人,做出来的动作也会有误。
例如:分别测一个「暗」读数和一个「亮」读数,把中点定为阈值; 换了房间之后,重新核对距离阈值; 确认颜色传感器在你真正用的那些表面上分得清红和蓝
要认识的词
- 触碰传感器:
- 一种能判断自己有没有被按下的传感器,就像按钮或者保险杠。
- 距离传感器:
- 一种测量最近的物体有多远的传感器,通常以厘米为单位。
- 光线传感器:
- 一种测量环境有多亮或多暗的传感器,光越亮,给出的数字越大。
- 颜色传感器:
- 一种读取正前方表面颜色的传感器,比如红色、蓝色或白色。
- 传感器读数:
- 传感器在某一刻给出的数字,比如 20 厘米,或者亮度 47。
- 阈值:
- 你自己挑的一个分界数字,用来区分两种情况,比如「比 15 厘米还近就算近」。
- 探测极限:
- 超过这一点传感器就感知不到了,比如距离传感器读不出大约 2 米以外的东西。
- 校准:
- 调整或核对传感器,让它的读数在这个房间、这台机器人上是准确的。
- 噪声:
- 什么都没变,读数却还是会小幅跳动,正因如此才要多测几次。
- 可靠性:
- 你能有多信得过一个传感器每次都给出同样、正确的读数。
- 一次测量:
- 一场测试里的单独一次测量;通常要做好几次,然后互相比较。
- 基准读数:
- 在一个已知、稳定的条件下先测出来的读数,用来和其他读数作比较。
注意安全
这一周动手搭建或运行机器人之前,先把这些读一遍。
- Caution:把机器人放在稳当的平面上,在各个测试点之间搬动它时当心轮子。
- Caution:给蒙眼扮演「人体传感器」的同学做好引导,并把地面清空,免得有人绊倒。
- Caution:测试光线传感器时,不要用手电筒直射任何人的眼睛。
- Note:常常保存你的读数记录,免得刷新浏览器时把数据弄丢。
动手做
选择你的路线
这门课你可以用机器人套件、浏览器模拟器,或者不插电、只用家里的材料来上。挑一条就行,随时可以换,你的成果不会丢。
传感器考察实验
机器人套件测量条件变化时传感器读数如何随之变化,并找出一个能干净利落分开两种情况的阈值。
- 挑一个条件一步一步地改(到墙的距离、亮度,或者表面的颜色),每改一步就读一次传感器。
- 把每个读数都记在记录表上。然后看着这些数字挑一个阈值:一个能把「近和远」或者「亮和暗」分开的分界值。
- 记住:这一周机器人只负责读数和报告。这些数字是什么意思,由你来判断。
在量好的条件下读真实传感器
你需要:一台带传感器的可编程机器人, 卷尺或直尺, 一堵墙或一个盒子, 「传感器读数记录」活动纸
步骤
- 1装上传感器,载入一个能读取传感器并把数值显示或报告出来的短程序(读传感器、等待、停止)。
- 2如果是距离传感器:把墙分别放在 10 厘米、20 厘米、40 厘米和 80 厘米处,逐一记录读数。如果是光线传感器:分别在强光下、在房间正常光线下、以及用手遮住时读一次数值。
- 3看看你的这些数字,挑一个阈值:比如在哪个距离以内你会说东西「近」,或者亮度低到多少你会说「暗」。
- 4把你的阈值写在记录表上,再写一句话说明你为什么挑这个数字。
做成了是什么样:一张读数表,随着墙越来越近,数字明显变小(或者随着变亮,数字明显变大),并挑出了一个能分开近和远的阈值。
- 在不同条件下至少记录了四个读数
- 读数变化的方向说得通
- 挑出了一个阈值数值,并用一句话说明了理由
安全:让机器人待在桌上或地上,免得你看显示屏时它掉下去。
如果不管用
- 读数上蹿下跳,就是稳不下来
- - 那就是噪声:每个距离上测三次,取中间那个值。
- 不管怎么弄,距离读数都卡在一个很大的数字上
- - 你可能已经超出了传感器的探测极限,或者对着空处;把它正对着一米以内的一堵平整的墙。
再往前一步:换到另一个房间,把你的那些条件重新测一遍,看看你的阈值还管不管用、要不要重新校准。
第 4 周实验
传感器考察实验
把一件物体放在不同的距离上,再分别试试浅色和深色的表面。读取实时的传感器数值,记进你的表格,并挑一个阈值。传感器给出的是一次测量,也就是一个数字,而不是对这件物体是什么的理解。
布置这次测试
传感器实时读数
你一改动设置,这些数值就会立刻更新。同样的设置,每次都是同样的数字。
- 距离
- 2 格
- 触碰
- 未按下
- 光线
- 80 / 100
- 在线上
- 否
你的数据表
Record at least three readings. Try different distances, an edge-of-range reading, the same reading twice, a light surface, and a dark surface.
| 我设定的 | 距离 | 光线 | 备注 | 删除 |
|---|---|---|---|---|
| 还没有任何读数。先在上面布置一次测试,再按「添加当前读数」。 | ||||
0 readings recorded.
挑一个阈值
A threshold is the number your robot compares against to decide. Here: if the distance is at or below your threshold, the robot calls the object NEAR.
填一个阈值数字,就能看到机器人此刻会作出什么判断。
记录至少三个读数并填入一个阈值,就能完成这个实验。
这一页上的所有内容都只保存在这台设备上。
校准与阈值挑战
机器人套件靠多测几次来对付噪声,然后校准出一个在这个房间里可靠好用的亮暗(或远近)阈值。
- 挑一个稳定的条件,什么都别动,对着同一样东西连读几次;留意数字跳动了多少。这个跳动就是噪声。
- 在一个明显「低」的条件和一个明显「高」的条件下各测一次(暗对亮,或者近对远)。把阈值定在中间,好把两者干净利落地分开。
- 检验你的阈值:确认低条件的读数都落在一边、高条件的读数都落在另一边。如果不是,就调一调,这就是校准。
在真实传感器上校准阈值
你需要:一台带光线或距离传感器的可编程机器人, 彩色或深浅不同的卡片,或者一堵墙, 「传感器读数记录」活动纸
步骤
- 1对着同一个不动的目标读五次,把五个数字都记下来,好看清噪声。
- 2对着一个明显「暗」的表面(或一堵远墙)读三次,再对着一个明显「亮」的表面(或一堵近墙)读三次。
- 3把阈值定在暗平均值和亮平均值正中间。
- 4检验一下:给传感器看几个深色和浅色的表面,确认每个都落在阈值的正确一侧。要是有落错边的,就调一调。
做成了是什么样:一个校准好的阈值,能在这个房间里经过多次检验,正确地把深色和浅色(或近和远)的表面分开。
- 记录了五个噪声读数
- 记录了暗平均值和亮平均值
- 在两者之间定下了一个阈值
- 测试表面分类正确,或者把阈值调到分类正确为止
安全:移动机器人去测试各种表面时,让线缆远离轮子。
如果不管用
- 某个表面有时会落错边
- - 可能两个条件靠得太近,也可能噪声太大;挪一挪阈值,或者换对比更强烈的表面。
- 整批读数比先前整体偏移了
- - 房间的光线变了:现在就重新校准,这正是校准重要的原因。
再往前一步:把机器人搬到更明亮或更昏暗的地方,为那个房间校准一个新的阈值。
给机器人编程
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.
传感器停车挑战
编程让机器人一边前进一边盯着距离传感器,然后用你找到的阈值停在墙前的那一格。跑三次,中间调整速度或阈值,并在备注里说明你最终为什么这么设。
添加积木块
事件与执行
移动
控制
数据
输出
变量与计数器
你的程序
- 前进
- 机器人(箭头指向它的朝向)
- 终点区(虚线框)
- 墙(灰色,带 X)
地图:一片 4 × 1 的网格。 机器人从第 1 列、第 1 行出发,朝向右。 终点区在第 3 列、第 1 行。 有 1 面墙。
就绪.
可以运行了。 · 0 steps
机器人状态
- 列
- 1
- 行
- 1
- 朝向
- 右
- 前方距离
- 2 格
- 触碰
- 没有接触
- 在线上
- 否
- 光线
- 80
- 在终点区内
- 否
- 碰撞次数
- 0
- 步数
- 0
机器人在第 1 列、第 1 行,朝向右。 前方距离:2 格。 触碰:没有接触。 在线上:否。 光线: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.
怎样验证:把墙放到 40 厘米处,读三次传感器,把中间那个读数和你的预测对照。
怎样验证:什么都别动,连读五次,看看它们是完全一致,还是会小幅跳动(噪声)。
测试与改进
距离与读数对照表
把墙(或者把条件)设到表上列出的每个距离,读取传感器并记下数字。要是数字在跳,就读三次取中间那个。
要测量的:每个设定距离下的传感器读数,以及你会把它算作近还是远
| 设定距离(厘米) | 传感器读数 | 算近还是算远? |
|---|---|---|
三次测量的噪声检查
挑一个条件,之后不要再改动它。连着读三次传感器,把每次读数都记下来,看看它跳动了多少。
要测量的:什么都没变的情况下,几次测量之间读数变化了多少(也就是噪声)
| 第几次测量 | 传感器读数 | 与第 1 次的差值 |
|---|---|---|
知识检测
回答这几题,检验一下你是否理解传感器读数、阈值、噪声和校准。
1. 把每种传感器和它测量的东西连起来。
为每一项选出配对。
距离传感器光线传感器触碰传感器颜色传感器2. 用你自己的话说说,什么是传感器阈值?
3. 什么是传感器读数?
4. 距离传感器对着一堵墙读出 30 厘米,对着一堵更近的墙读出 12 厘米。这说明读数是怎么回事?
5. 你想让机器人把 15 厘米以内的一切都当作「近」。这个数字 15 叫什么?
6. 你对着同一堵不动的墙读了五次,得到 30、31、30、29、31。这些数字为什么会跳?
7. 你的亮暗阈值在教室里好用,到了阳光充足的房间却失灵了。你该怎么办?
已答 0 / 7
反思
你的反思会自动保存。
下周预告
下周机器人不再只是报数字,而要用你找到的阈值,靠循环和条件自己对这些数字作出反应。
- 把这一周校准好的阈值留着:下周你要用它们让机器人自己作判断。
- 给你的套件充好电,或者把模拟器加入收藏夹。
- 想一条简单的规则,比如「如果墙比我的阈值还近,就转弯」,那正是你接下来要搭的东西。
完成第 4 周
完成以下内容,即可结束本周并解锁下一周:
- 在传感器考察实验中记录不同条件下的传感器读数 (not done yet)
- 在校准与阈值挑战中挑出并校准一个阈值 (not done yet)
- 知识检测至少答对 5 题中的 4 题 (not done yet)
- 写下你的反思 (not done yet)