2022-05-29 15:21 编辑:奔跑的小羊 点击: 次 A+
根据房间的不同,我们可能只需要在运行机器人的房间中进行一次校准,哪怕我们在同一天内要多次运行机器人。但是,如果房间的光线条件有可能发生变化,例如在房间里有大窗户,自然光会照射进房间,则需要考虑一天中光线会发生变化,我们可能需要在每次运行之前校准EV3颜色传感器。正确遮蔽颜色传感器对于获得一致的颜色传感器读数也有重要。
在我们将传感器安装到机器人底盘之前,请勿开始校准传感器,因为更改传感器在底盘上的位置可能会影响传感器读数。
EV3颜色传感器应靠近任务场地,2 ~ 3cm较为合适,但要确保机器人可以清除掉传感器能骑上去的障碍物,因为离地间隙很小,所以机器人有可能被传感器卡住。我甚至看到过这样的机器人,在越过障碍物时将颜色传感器抬高,然后在需要读取光值时再降低传感器。这样的设计对于某些比赛中的机器人来说可能有些过分,但是它们确实很有趣。
进行校准
现在让我们来校准传感器,对明暗的真实读数进行设置。在理想的环境下,EV3认为白色的返回光值最大、最色的返回光值最小。这些数值在EV3代码中表示为0~100间的数字,但未校准的传感器很少会返回这两个端点值。大多数时候,真正的读数在30~70的范围内。
校准EV3传感器时,我们将根据当前环境中的读数重新设置光值的读取范围。此外,校准后的颜色传感器可以在不同的环境中运行,无需更改程序代码以识别新环境下的光值。
我们可以用两种方式进行校准:用EV3自己的校准模块将校准值存储在EV3的存储内存中,或创建自己的校准程序,将数值存储在EV3程序块的本地文件中。
使用EV3校准模块
注意:如果我们在机器人上使用了两个颜色传感器,校准模块存储的校准值将被应用于两个传感器,EV3程序块不会为每个传感器单独存储校准值。
EV3颜色传感器模块有一个校准模式,用于校准EV3颜色传感器的最大和最小值。校准模块读取的数值存储在EV3程序块上,即使关闭EV3程序块电源,这个数值也会保存在那里,直到其被删除或传感器被重新校准。
只需将颜色传感器模块添加到EV3程序中即可使用校准模式,我们可以将它添加到单独的校准程序中,或者添加在要运行的程序的开始部分。如果我们希望在所有程序中都包含校准过程,并在每次运行之前进行校准,那么最好创建一个我的模块。
例如,我们可以创建一个“My Calibration( 我的校准)”模块:在这个模块内,包含两个颜色传感器块,一个用于读取最小光值,一个用于读取最大光值。在两个校准模块之间要添加一个触发事件,如等待模块。
在下面这个示例中,第一个校准模块会读取最大光值,第二个校准模块读取最小光值,在运行第二个校准模块之前要等待EV3深灰色按钮被按下。
1. 在下图中,将机器人的颜色传感器放在任务场地较亮的区域(白色或非常浅的颜色)。
2. 按下EV3程序块上的深灰色按钮。
3. 听到确认音。
4. 将机器人的颜色传感器移到任务场地较暗的区域(越暗越好),如下图。
5. 按下EV3程序块上的深灰色按钮。
6. 听到确认音。
现在我们可能希望程序有一些详细的说明。例如,添加一些显示提示,让用户知道将机器人的颜色传感器放在哪里以及下一步做什么。
使用本地文件
出于各种原因,我们可能不喜欢使用EV3自带的校准模块。例如,也许我们的机器人有两个颜色传感器,我们希望为每个传感器单独存储校准值,解决方案就是用存储在文件中的值进行校准。我们可以创建自己的校准程序,然后将结果存储在EV3程序块的文本文件中,为每个传感器应用单独的校准值。每次运行其他程序时,都可以读取该文件,并检索存储的光的校准值。
在本地文件存储和检索的过程其实并不像听起来那么复杂,而且可以做成一个非常好的程序,并不需要很复杂的代码。
这段代码用来代替颜色传感器校准模式。该代码调用了一个颜色传感器模块,它将颜色传感器模块的光强度读值复制到文本文件中。如果我们使用多个颜色传感器,则可以为每个传感器使用相同的过程,从而可以为每个传感器提供唯一的光范围(再说一次,在校准模式下使用EV3颜色传感器模块时,校准的值被应用于所有连接到EV3程序块上的颜色传感器)。
我们只需使用设置为读取模式的文件访问模块即可使用保存的值,从而将保存的值带回程序代码进行比较。下图显示了一个非常简单的例子,其中文件Min中的值被读回到程序中,与端口3上的颜色传感器进行比较。
如果要保存多个颜色传感器的值,我们只需相应地命名文件。例如,它可能是一个名为MinPort1和MinPort2的文件,分别存储连接到端口1和2上的颜色传感器的值。要使用我们保存的值,我们的巡线程序首先从文件中读取保存的值,然后计算所需的光值范围。
查看校准值
大家对如何看到新校准值比较困惑。EV3程序块有很实用的内置程序,可让我们查看各种传感器的值,但显示颜色传感器读值时,显示的始终是未校准值。因此,如果我们使用校准模块并在EV3程序块的存储器中为EV3颜色传感器存储了新的校准值,然后使用内置的颜色传感器查看器,我们会发现它不会显示新的校准值,而是继续显示原始的未校准值。
要查看新的校准值,我们可以自己编写颜色传感器读值查看器,显示从颜色传感器返回的校准值。编写巡线程序时,知道这些值非常重要,我们要了解机器人检测值的范围。
程序很简单,如下图所示。
创建一个循环模块,在循环模块里拖拽一个颜色传感器模块,然后连接到设置为文本模式的显示模块,颜色传感器返回的数值被传递给显示模块,转换为文本在EV3屏幕上显示出来,然后等待1s,并再次读取颜色传感器的数据。
当我们调试程序时,或更改传感器在底盘上的位置时,这个程序有助于找出巡线程序的初始范围。例如,我们可以四下移动颜色传感器,感受任务场地不同位置和房间各种光源下的光值读数差异。
我觉得这个查看程序很有帮助,运行这个程序,然后用各种光源照射任务场地,把机器人放在场地上,看看什么样的灯光对读数有影响。再尝试一下从各个角度照射灯光,因为很多时候,阴影会比光线本身造成更多的问题。
删除校准数据
EV3校准模块还具有删除功能,可清除当前被存储在EV3程序块内存中的校准值。在校准过程开始时清除这些值可能会有所帮助,这样我们就知道在EV3程序块中使用的数值是正确的。
这段代码显示了基本的校准值删除程序。首先,等待用户按下EV3程序块上的深灰色按钮,然后通过校准模块删除当前的校准值,最后,它发出确认音。
遮蔽颜色传感器
校准颜色传感器很重要,遮蔽颜色传感器同样重要。EV3颜色传感器可以通过LED自己产生光源,所以外界的光线真的只是一个麻烦。许多依靠颜色传感器进行导航的机器人在黑暗的房间中工作效果最佳,因为此时唯一的反射光来自传感器上的LED。
我们要做的是,保持颜色传感器较低的安装位置,让它垂直于任务场地,倾斜的传感器不会给我们需要的结果。传感器距离任务场地约3cm最为合适,过于接近场地会让传感器无法检测到光线;离场地太远,外界的光源对传感器读数又有影响。
为颜色传感器搭建一些盖子,这是防止外界干扰的好办法。大多数朋友都会将传感器安装在机器人的底盘下面,用机器人的框架来遮挡房间里的光线。
今天花了这么大的篇幅介绍了颜色传感器的校准,可见这项任务是多么的重要,我们一定要认真的搞清楚搞明白它,为后面的巡线操作打下坚实的基础。