在本章中,你将给马里奥安装一个电动扫描装置,如下图所示。这使马里奥能够观察周围的环境,感知四周,进行物体跟踪,等等,并且不限于此!
你将学习到如何对一些列的行为进行分组以创造组合模块,以及如何让机器人存储数据。

搭建电动扫描装置
在前面已经搭建的机器人马里奥的基础上,按照下面的拼搭说明进行搭建即可。



单电机模块
在本部分中,你将学习如何利用下图所示的电机模块来控制乐高BOOST的三个电机。

上图清晰的列出了各个电机模块的功能,第一列是通过设定运行速度和运行时间来控制电机,第二列是利用运行速度和相对转动角度来控制电机,第三列则是以给定的速度持续运行电机。第四列是停止电机。第一行和第二行分别代表集线器两侧的电机,第三行则标识BOOST的外部电机。
关于BOOST电机模块的更详细说明可以参见: https://www.legofind.com/archives/1522
使用转动传感器
你可以利用下面的模块来获取电机的速度、角度等转动状态信息。电机角度值的返回值,是自你上次利用重置模块重置电机角度后,电机转过的角度值。关于下列模块的更多说明可参考 https://www.legofind.com/archives/1302

扫描
在本章中,我们将编程让马里奥的电动扫描装置在左右各60度的范围内扫描,程序如下图所示。请确保程序执行前,马里奥的电动扫描装置位于正中位置。

下图显示了上面程序在马里奥上的实际运行效果。

在程序开始前,请确保电动扫描装置位于正中位置。在程序中,利用第一个电机模块让扫描装置右转,角度是60度;利用第二个电机模块让扫描装置左转,角度是120。第三个电机模块则是让扫描装置回到正中位置,因此角度输入值是60度。
请注意,电机模块的角度输入值,是相对于当前电机位置的一个相对值。因此,你在编程控制电动扫描装置转动时,你需要根据其当前的位置计算出需要旋转的角度。
上图中的D、E、F三张图片展示了如果程序开始前,电动扫描装置没有在正中位置,程序的执行效果。因为每次电机的输入都是相对角度值,因此电动扫瞄装置的位置会一直跟你的预期位置有偏差。
后面的内容我们会学习如果让电动扫描装置自动位于正中位置,而不需要每次都手动去操作。
自动到达0度位置
下面我们来看看如何利用程序让电机到达预设的0度位置。由于定距外部电机速度模块中的电机运转角度输入是相对值,那么我们用目标位置减去当前位置,即为电机需要转动的角度:
电机转动角度 = 目标位置 – 当前位置
那么,利用上面的公式,我们就可以编程实现自动到达预设0度位置的程序,如下图所示。

下面的图片给出了一些实例。你在自己进行测试的时候,请确保手机或平板与集线器连接时,电动扫描装置位于正中位置。如果不是,断开手机或平板与集线器的连接,恢复电动扫描装置正中位置后,再重新连接。下面,我们会让程序自动完成这项工作。

手动将电动扫描装置的位置旋转至正中以外的位置,然后运行程序,电动扫描装置会自动回到正中位置处。多次进行试验,无论手动旋转至哪个位置,电动扫瞄装置总会自动回到正中位置。
你也可以根据需要调整该程序中的目标位置值(原程序设置为0度位置),来让电动扫瞄装置到达预期的位置,并且不需要考虑其当前的位置在哪里。
重置电动扫描装置
为了避免每次都要手动调整电动扫描装置的位置,我们将通过编程实现电动扫描装置自动调整至正中位置,并将该位置重新设置为0度位置。受制于结构限值,我们的电动扫描装置并不能360度自由旋转,而是在一定范围内旋转。我们编程的目标是让其旋转至极限位置,然后再自动回到正中。
为了预设电动扫瞄装置的位置,我们将运转电机直至其运行到极限位置(被挡住无法继续转动),由于我们能够测量得到其从正中位置到极限位置转动的角度,我们便可以得知从极限位置回到正中位置需要多少角度。
为了实现这个过程,我们开始时以较低的速度运行电机,一旦当电机速度降至0时,说明已经到达极限位置。程序实现如下图所示。

制作组合模块
如果有一组程序模块,你需要经常重复使用它们来完成特定功能,你可以将它们设置为一组组合模块。这样可以更好的组织你的程序,使其更加简洁易读。
乐高BOOST应用程序中给出的官方编程实例中,都是用了组合模块。以下面这个螺旋桨旋转模块(在BOOST应用程序第一个入门教程里)为例,它其实是一组程序模块的组合。

按照下面的步骤来制作一个电动扫描装置重置组合模块。
1、切换至组合模块调色板(灰色),然后点击带有+符号的图标。

2、你将会看到一个带有随机图标的淡蓝色模块,以及一个深蓝色的预览板。按照下图箭头指引的方向,将想要创建组合模块的程序模块序列拖引至深蓝色的预览板内。如果你想要在画布上保留原程序序列,记得提前复制。

3、深蓝色预览板里会显示缩小版的程序序列,点击可以进行编辑。

4、当你对组合模块进行编辑时,画布的背景色会变成深蓝色。点击下图序号1的图标,可以为组合模块更换图标。点击序号2的扳手图标,可以改变组合模块图标的背景色。点击序号3的箭头,可以返回主界面。

5、当完成组合模块制作后,可以通过简单的编程实例来看下新制作的组合模块的运行效果,如下图所示。

下图左侧序号1是电动扫描装置重置程序,右侧序号2是制作成组合模块后的样子。

制作带有输入值的组合模块
前面我们制作了电动扫描装置重置组合模块,你会发现他用起来很方便。不过如果能给他加入一个输入值,会让程序看起来更加简洁易懂。按照下面的步骤,来制作一个带输入值的组合模块,能够设定电动扫描装置指向的方向。
1、按照下图编写好模块程序,然后开始按之前的步骤创建组合模块。

2、将程序拖拽至组合模块预览板中,然后点击预览板进行编辑。

3、点击更换图标,将图标更换为带有黄色箭头的外部电机模块,然后拖拽数字输入模块1至电机模块的速度输入参数那里。两个编号都为2的输入模块将会在调色板出现,如下图所示。

4、拖拽数字输入2至减法模块的第一个输入,如下图所示。然后点击返回箭头回到主界面。

最终成品如下。后面的程序中我们会用到这个组合模块。

编辑及删除组合模块
当创建一个组合模块后,你可以对其进行修改,或者增加、删除或调整输入参数类型(前提条件是该组合模块目前没有在任何程序中使用)。想要编辑组合模块,需要切换到组合模块调色板,点击模块,然后点击蓝色的预览板。
增加输入
要在组合模块中增加输入,只需要从调色板将其拖拽至画布赏即可。每次你拖拽一个输入模块,会出现两个新的输入模块(数字型和逻辑性各一个),如下图所示。

由于每个输入只有一种数据类型,你需要在拖拽前确定好数据输入的类型。当你选择其中一个类型时,另一个没被选中的类型就会自动消失。
删除输入