三维/人工智能 - 可持续发展目标7 - 利用距离感应器控制光源(难度:2级)
-
用到的相关知识
介绍
可持续发展目标是联合国于2015年正式发布的17个目标。这17个目标是大家都要完成的学习清单。
本篇教程是关于节省电能,与第7个目标“负担得起的清洁能源”相关。
在如下三维动画中,我们在隧道入口处利用距离感应器检测是否有车进入隧道,并自动打开隧道内的灯光:
第1步 - 新建一个带三维坐标轴的空场景
新建一个项目,删除角色“角色1”,把角色“空的1”重命名为“主角”。
添加积木“创建三维场景”以加载空场景,再添加三维坐标系以显示三维坐标轴。
第2步 - 绿地上一条路
接下来,我们在一片广阔的绿地上添加一条很长的路,用一个平面表示绿地,用盒子表示路。注意,路的宽度为100。
结果如下所示:
第3步 - 隧道管子
接下来,添加一个管子来表示隧道。需要旋转至朝向y轴,并向前移动,使一端与原点对齐。其直径也为100,这样的话上半部分刚好遮住路。
依次运行每个积木的结果:
第4步 - 暗光源
接下来,删除场景内的所有光源,然后添加一个较暗的光源:
现在隧道看起来很暗了,这样的话,我们在隧道内添加光源以后才会形成较好的反差:
第5步 - 用一个新角色添加感应器盒子
现在我们在隧道前部添加一个感应器盒子。更合理的办法就是,新建一个角色来管控传感器,这样就更容易找到代码,并且这个角色中的所有积木都将应用于感应器。
首先,“主角”角色广播一条消息“添加感应器”。
然后,在名为“感应器”的新角色中,添加一个大小为5的小盒子。将其移动至y坐标为-50处,以便于当汽车进入隧道前就可以检测到汽车。
盒子如下所示:
第6步 - 在盒子左侧添加距离感应器
在“感应器”角色中,为盒子开启距离感应器 。提示,我们把盒子放在了马路右侧,所以只需要检测它左侧走过的物体。
大家可以看到盒子左侧发射的传感器射线,长度为60。驶过的汽车所报告的距离会小于60。
第7步 - 定期检验感应器读数
若要使用距离感应器,我们只需要重复不断地读取感应器的数值。每当发现与左侧物体的距离小于60,意味着有汽车正在驶过,那么我们就要广播一条消息“打开灯光”:
注意,每次读取以后要等待0.5秒,这样就不会读取太频繁。只要整个汽车驶过感应器的时间超过0.5秒,我们就会检测到。当然了,如果你想处理开得很快的车,就要缩短这个等待时间。
第8步 - 在隧道内添加光源
接下来,我们要用一个新角色在隧道内添加光源。
首先,“主角”角色广播一条消息“添加光源”:
然后,添加一个新角色“光源”。每当它收到广播消息,就在隧道入口处的穹顶添加一个聚焦光源.我们用圆锥体来表示光源,但需要把尺寸缩小到5%。
此外,由于默认情况下聚焦光源向前照射,为了使它向下照射,我们需要绕x轴旋转90度。
这三个积木的分步演示如下:
第9步 - 用变量循环添加4个光源
现在我们成功添加了一个光源,接下来用变量循环添加4个。我们将使用一个新变量“i”,让它从1走到4。4个灯分别命名为“灯1”、“灯2”、“灯3”、“灯4”,同时,位置要分别移动至y坐标100、200、300、400。变量“i”用来计算名称和y坐标。
现在隧道内就有了4盏灯:
第10步 - 开关灯
为了节省电能,我们要让隧道内的灯默认情况下为关闭状态。在后面添加一个积木即可,每添加一个光源之后就先关闭它。
之后,每当距离感应器发送消息“打开灯光”,我们就可以遍历每个灯并打开。
第11步 - 添加汽车
最后一步,我们要添加一辆汽车,最好在一个新角色中添加,新角色命名为“汽车”。
首先,“主角”角色广播一条消息来“添加汽车”:
然后,添加一个名为“汽车”的新角色,每当该角色收到消息“添加汽车”,就添加汽车物体。我们把汽车的起点y坐标设为-200,汽车就会驶过感应器盒子。我们把前进速度设为50,在感应器盒子旁边驶过时就不会太快:
现在我们就可以观察到当汽车驶过感应器盒子时灯光打开:
第12步 - 使用跟踪摄像头
为了从汽车视角查看灯光效果,我们可以用追踪摄像头在汽车后面跟随汽车拍摄。只需要在“汽车”角色中添加如下积木:
从汽车后面看到的情景如下:
第13步 - 整理项目
在发布项目之前,我们要整理一下项目,删除一些不必要的物体。
第一,在“主角”角色中隐藏三维坐标轴:
第二,在“感应器”角色中,让感应器盒子变得很小,因为不需要看到这个盒子。
第三,还是在“感应器”角色中,隐藏感应器射线:
最终演示结果如下:
创意扩展
大家可以用自己的创意想法扩展这个项目,可以扩展成很多种形式。以下是一些例子:
-
关灯:大家可以在隧道出口处再装一个距离感应器,当汽车驶过后关闭灯光。
-
不止一辆车:如果有多辆汽车,只有当所有汽车通过隧道后才能关闭灯光。
-
双向交通:如果隧道内双向通行,你应该如何修改感应器来处理这种情况?
-