友情提示:380元/半年,儿童学编程,就上码丁实验室。
上周的匀加速程序,道理上已经说的七七八八了。
今天我们进一步来完善这个程序。
一个前进动作,包含了三部分:
1、 匀加速前进
2、 匀速状态前进
3、 匀减速前进直至停止
上周我们主要是完成了匀加速的部分。
先要说明的一点是:
这个程度最终我们希望的是要达到“方便”的要求。
这个目标是不可以忘记的!
所以这三个部分的程序最终需要连接起来,制作成“我的模块”。
很明显,这三者之间是3个循环,
所以循环的结束判断,是一个关键的部分。
举个例子,
我们如果要让电机走1000度(Degree)。
那么3个部分可以分为:
匀加速30%,匀速60%,匀减速10%;
或者匀加速20%,匀速70%,匀减速10%;
……
这个大家自己调试处理。
那么如何处理这个Degree
(度数的意思,另外大学的学位也叫degree,还有钢琴的音阶也叫degree。)
就需要我们来设定一下,让电机的转动反馈帮助我们进行程序的“承上启下”。
回到这个程序中。
当匀加速的程序编完后,如果要衔接下一个部分。我们可以读取电机的反馈值。
首先,在程序最开始的时候,增加创建一个D变量(Degree)
请注意,这个变量在后面创建“我的模块”时,非常重要,它在整个程序中,其实是个常量!
然后,将均加速阶段的比例,写入主循环内,
实时读取电机反馈的转动度数,与这个数据产生对比,
成为一个“匀加速阶段停止的条件”。如下图:
因为我们用的是移动转向模块,所以只需要一个电机的反馈,就可以认为是达到了“要求”。
这样,第一个主循环,也就是“匀加速部分”就搞定了。
第二部分,是匀速状态前进。
在这个状态下,机器人可以以高速的状态前进,并且几乎可以保持没有转速误差的状态。
这个程序很简单,我们无需对速度值做任何操作,因为这个值不进行操作的时候是不会变的。按照上一节课,我们这时V和Vz的值是90。
(没看明白?请跟上个课程一起看。)
但是我们同样需要设定一个结束条件。
把第一个主循环的“承上启下”部分选中,CTRL+C,CTRL+V一下。
在设定好匀速前进部分变量D的比例值,即可。
为什么是0.9?不是0.6吗?
那是因为,电机累积的值是一个总量。所以,我们是拿电机转动的总量跟D进行数据对比的。0.3+0.6=0.9呀。
这样,我们就完成了第二部分。
第三部分,是匀减速状态前进,直至停止。
经过我们上一节课的内容,匀加速会了吗?不会的话回头去看一下上一篇好吧。
匀减速和匀加速其实是一个道理。只是一个加速度是正的,一个加速度是负的。
我们继续复制黏贴大法!
选中,CTRL+C,CTRL+V,
把整个匀加速部分复制下来。
然后进行一些修改。
1、V-Va
2、去掉瞬间加速的部分
3、修改最后的结束条件
由于我们最终的状态是停止,所以,这个条件表达起来应该是:
当走到了D的值“or(或者)”电机转动速度为0的时候,程序停止。
之后,整个程序的数据处理部分套上大循环,循环1次。
这样数据处理部分就全部完成了。
细节优化:
1、由于电机不会自动重置计数,所以,每次这个程序运行时,都需要重置一下电机,所以在数据模块的大循环之外,需要加上电机重置的模块。
2、我们还需要用变量D,来控制一下“动作部分”的结束要求。
创建模块:
按键盘:CTRL+A,全选整个程序。按住CTRL,点“开始模块”,去掉它。
菜单栏:工具——我的模块创建器
不会?具体的教学可以看号内“基础编程”篇里面的内容。
在这个程序中,我们可以设定几个参数,以方便我们日常使用。
初始速度,一般就是0,但有些时候不是。
加速度,一般取值1~5,自己尝试吧
总度数,类似于各种电机模块的“旋转角度”,也就是我们的变量D。
最终我们创建出这样的一个模块。注意一下参数的链接。
然后我们就可以在我的模块里面找到这个模块了。
以后要用起来的时候。比如:
从静止开始的状态,那么初速度就是0;
加速度为3;
电机总度数需要转1200。
我们只要这样设定一下参数,就可以了。
是不是很方便?
好啦,请各位自己操作试试吧。
注意
这是个草稿程序,我自己用的那个比这个要复杂的多。出于教学目的,所以给大家提供这样一个思路。
效果好不好,应该如何修改,请各位自行研究一下。比如这个程序适当优化就可以作为后退使用。
老丁愿意分享思路,但不希望同学们都是照抄,如果要给大家抄程序,那么我也就没必要做这个公众号讲那么多话了。直接开几个源,不就行了。
有很多朋友给我留言,问的问题其实都是之前在基础课里面讲过的东西,一问我就知道,根本没看我之前的稿子。
我每篇课程要花至少3个小时写,
也给大家保留着……
唉,有种失落感。
好了,第一个竞赛用的程序思路讲完。
后面我会讲第二个。希望能帮助到大家。