友情提示:380元/半年,儿童学编程,就上码丁实验室。
FLL每年场地赛的主题都会改变,相应的,场地任务多种多样。
正如我之前的课程里面说过,万变逃不过推、拉、提、放,四个动作。
这四个动作对结构的设计要求较高,但其实对程序的要求并不是很强。
而要完成这些动作的关键,是要走到比较精确的位置。
如果我们只会用基本的移动转向,那么可能走位的调试是非常困难的,每次出发后,误差会比较大。
接下来,我会花几个篇幅,去给大家一些竞赛基础程序的分享,希望对你有帮助。
当然,这并不仅仅只能用在竞赛,日常我们做任何的设计时,都可以进行一些参考。
今天我们先来讲讲匀加速/减速的走位。
由于比赛场地和我们日常训练的场地,可能会因为各种原因存在摩擦系数的差别。(比如脏了……灰太多,轮子打滑)
对于机器人来说,
轮子从静止到滚动起来的那一瞬间,这个摩擦力的差别足矣让机器在出发时就产生一个很大的误差。
(当轮子转动起来的时候,其实摩擦力反而影响不那么大了。)
使得我们的走位,即便是直线,也会有挺大的失误。
而匀加速/减速的程序,可以让机器从速度为0的状态时逐渐加快/减慢电机转速,从而让机械运转的更加平稳。
举个例子,
我们日常在开车的时候,车辆从静止状态到开始移动的这个瞬间,对于能量的消耗其实是最大的。
也可以理解为,这个时候摩擦力对机械的影响最大,容易产生误差。
所以日常如果堵车,一会走,一会停,会比在高速公路上飞驰,对于汽油的消耗量大非常多。
而同理,如果我们急刹车,基本上无法控制车辆的精确停止。
(要不是提前点刹,估计这就撞上去了)
所以,我们往往是看到红绿灯变化时,开始“点刹”。
让车子慢慢的减速,到最后停在停车线附近。
道理是很简单的,具体的物理原理,大家可能到初二物理学力学的时候,会有所接触。
匀加速/减速的走位程序,其实分成3个部分。
1、从静止状态的匀加速运动。
2、到达一定速度后的匀速运动。
3、停止前的匀减速运动。
高手们一般都会编写一个“我的模块”,专门用来处理直线走位的匀加速/减速问题。我当然也是,因为很方便啊。
加速度的字母表示是:小写的a
acceleration加速度
—— 音译:阿克塞勒瑞熏
在匀加速运动的时候,a是一个定值。
V表示速度,V=V0+at,
V0表示初始速度,
注意,这不单单是指静止速度为0的状态。
比如,我们在从100速度匀减速的时候,a就会是一个负值,而V0就是100。
这个概念不能出错。
不然初中的物理老师要来找我说我乱教了。当年,我还挺怕我班主任的。
有了这个公式,我们就好办了。
首先,创建变量,V,V0和Va。(当前速度,初始速度和加速度)
先把V0的值赋予V,
然后V0+Va=V使之循环。
这里我们并不需要去设定时间参数,
因为EV3每一次程序的循环,我们就可以理解为是一个时间参数了,这个时间参数是一个定值,所以我们在这种情况下,无需特别去设定。
然后把V给到动作模块,即完成了。
上面这个程序,是用来帮助各位理清基本概念的。
有人会问,干嘛弄的那么复杂?
这边我要说一句,
一个开发人员,在做一个程序的时候,首先确定的是架构。
我们的程序,当然没有那么简单,所以,清晰的数据结构,是进一步优化这个程序的基础。
我们回到匀加速的问题。
上文中提到,其实我们做这个程序,是为了解决:
从静止状态到匀速状态中间的那段加速状态,目的是为了让程序更稳定。
而另一方面,当静止状态被打破后,摩擦力带来的影响会逐步减小。
因为是圆的嘛。
所以,归根结底,我们是为了解决静止状态带来的一系列误差问题。
为了让机器更加快速的到达我们希望的速度。
在静止被打破后,只要“均加速一点点距离”,即需要马上提速到 最 大 值 。
所以,我们需要对这“一点点”距离做出一个处理。
当V的速度大于20的时候,对V写入一个高速值。并把这个值赋予一个新的变量,Vz。
这个Vz,是我们用来控制电机的值,随着V的变化而变化。
这样一来,我们另起一行,把Vz的值,给到动作模块。
一个匀加速然后瞬间提速的程序就完成了。
动手试试吧。
这是个初步的程序,请同学们先行理解。
我们下次继续。