经过第一步分解任务后,接下来就要具体分析每一步是如何实现。
基本上到这里,孩子们都喜欢直接冲到电脑前开始写程序,但是呢,往往一堆问题,复杂点的任务更是写着写着就懵了。
虽然我们已经分解了任务,但只是一个初略的分解,具体每一步的如何实现,前面的分解步骤是否有纰漏,是否合理,这些是需要我们具体来分析一下的。
这一步我们需要写出每个步骤的具体完成动作,是那个传感器在发挥作用,各个马达应该如何运转。如下入所示。
下面我们来具体分析一下。
记得还在初中的时候,在《智慧背囊》(暴露年龄了)里有这么个故事:有个记者采访一个滑雪冠军,问他怎么学好滑雪,冠军说:你要先知道怎么停下来。
就像永动机是个伪命题一样,我不认为这世上有永远没有结束的事,大到太阳,看似永恒,可是50亿年后也会因为内部的氢元素全部耗尽,导致核心将发生坍缩。小到我们每天吃饭,我们不会一顿饭从早吃到晚,从今天吃到明天,当我们饱了,不想吃了,或者饭吃完了,吃饭这个事也就结束了。
所以对于我们机器人任务的每一步,“你要先知道怎么停下来”,我们需要知道这一步什么时候结束。
以上节课的巡线任务为例。
第一步是直行。具体任务描述是从起点巡线到A点。这里其实有两层含义:一个是巡线,一个是这一步的结束标志是到达A点。如果不去关注每一步的结果,就会导致程序停留在这一步,无法结束。
那怎么判断到达A点呢,A点处是一个直角,可以用光电来做遇黑判断,单光电遇黑时,就可以停下来结束这一步了。
然后在考虑巡线,巡线可以用单光电巡线来完成,一般到这个地步的孩子对单光电巡线都不陌生,不过这里就还是多啰嗦一下,因为单光电巡线看似简单,但是还是很容易出错的。
单光电巡线根据光电在黑线的左边还是右边会有不一样的走法,在左边时,遇黑要左转,否则右转,在右边则是反过来。
上面这个过程看似复杂,但是我把这个过程总结为三个问题:是我是谁?我从哪里来?要到哪里去?开玩笑的,是:终止条件是什么?终止状态是什么?这一步要干嘛?这是那个问题又可以叫做三板斧,我自嗨一下,不用在意。
终止条件:右光电遇黑
终止状态:停下
这步干嘛:黑线右边巡线
弄清楚这三个问题后,再具体看下这步干嘛怎么做
黑线右边巡线:
左光电遇黑则右转
否则左转
文章刚开始我说这个环节我们要具体到每个光电每个马达的状态,所以这步干嘛还要在细化:
黑线右边巡线:
左光电遇黑则右转(左马达动,右马达不动)
否则左转(左马达不动,右马达动)
于是我们就可以把任务分析表给填好了,就是最开始那张表。
有学生会说:老师,搞这么复杂干嘛?
因为前面不这么分析的细致一点,所有最后调试遇到的问题都在这些细节里,马达转动方向不对,光电跟马达的配合不当,等等。其实都可以通过这一步的分析来避免的。
按照上面的套路,我们把第二步的任务分析表也整出来。
这时候我们对比一下第一步跟第二步的终止条件会发现,两个都是右光电遇黑,这就意味着第二步的右转在开始的时候就结束了。真是出师未捷身先死,尴尬了。这里其实就是一个光电状态的问题,我们可以在第一步跟第二步之间增加一个小的环节,让光电离开黑线上的状态。
这里呢,有些学生喜欢把前冲这个动作放在第一步的终止状态里,不是不行,但是我建议单独设置一步,这样使整个分析结果更加清晰明了,遇到问题容易定位也容易修改。所以我们第一步的分解步骤,在这里就要做修改。
前进,前冲,右转,前进,前冲,左转,前进,前冲,右转,前进,停留2秒,后退,掉头,前进,前冲,右转,前进。
前三步的任务分析表如下图所示,后面的步骤跟前面大同小异,用相同的办法分析就行了。
限于篇幅,这里稍作补充下,对于经验丰富的学生,他们其实会发现,第一步的巡线其实可以从起点一步到B点的,因为对于直角弯,单光电巡线完全可以在外侧直接通过,不需要分解成两段直线。只要把双光电放在黑线左侧,用右光电来巡线就行了。如果是这样的话,我们的任务分解又要做修改了,我要去给老婆做饭了,没时间了,这里就偷懒一下啦,还是按前面的步骤来吧。
下一篇就是要开始写程序啦,下周见。
老规矩,可子镇楼。