最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

【机器人竞赛特刊】精确的直线前进与后退 2

乐高 少儿编程 2578浏览 0评论
竞赛特刊

友情提示:380元/半年,儿童学编程,就上码丁实验室

上周的匀加速程序,道理上已经说的七七八八了。

 

今天我们进一步来完善这个程序。

 

一个前进动作,包含了三部分:

 

1、  匀加速前进

2、  匀速状态前进

3、  匀减速前进直至停止

 

上周我们主要是完成了匀加速的部分。

 

先要说明的一点是:

 

这个程度最终我们希望的是要达到“方便”的要求。

这个目标是不可以忘记的!

 

所以这三个部分的程序最终需要连接起来,制作成“我的模块”。

 


 

很明显,这三者之间是3个循环,

所以循环的结束判断,是一个关键的部分。

 

举个例子,

我们如果要让电机走1000度(Degree)

 

那么3个部分可以分为:

 

匀加速30%,匀速60%,匀减速10%;

或者匀加速20%,匀速70%,匀减速10%;

……

这个大家自己调试处理。

 

那么如何处理这个Degree

(度数的意思,另外大学的学位也叫degree,还有钢琴的音阶也叫degree。)

 

就需要我们来设定一下,让电机的转动反馈帮助我们进行程序的“承上启下”。

 


 

回到这个程序中。

 

当匀加速的程序编完后,如果要衔接下一个部分。我们可以读取电机的反馈值。

 

首先,在程序最开始的时候,增加创建一个D变量(Degree)

【机器人竞赛特刊】精确的直线前进与后退 2

请注意,这个变量在后面创建“我的模块”时,非常重要,它在整个程序中,其实是个常量!

 

然后,将均加速阶段的比例,写入主循环内,

【机器人竞赛特刊】精确的直线前进与后退 2

实时读取电机反馈的转动度数,与这个数据产生对比,

成为一个“匀加速阶段停止的条件”。如下图:

【机器人竞赛特刊】精确的直线前进与后退 2

因为我们用的是移动转向模块,所以只需要一个电机的反馈,就可以认为是达到了“要求”。

 

这样,第一个主循环,也就是“匀加速部分”就搞定了。

 


 

第二部分,是匀速状态前进。

 

在这个状态下,机器人可以以高速的状态前进,并且几乎可以保持没有转速误差的状态。

 

这个程序很简单,我们无需对速度值做任何操作,因为这个值不进行操作的时候是不会变的。按照上一节课,我们这时V和Vz的值是90。

(没看明白?请跟上个课程一起看。)

 

但是我们同样需要设定一个结束条件。

【机器人竞赛特刊】精确的直线前进与后退 2

把第一个主循环的“承上启下”部分选中,CTRL+C,CTRL+V一下。

在设定好匀速前进部分变量D的比例值,即可。

【机器人竞赛特刊】精确的直线前进与后退 2

为什么是0.9?不是0.6吗?

 

那是因为,电机累积的值是一个总量。所以,我们是拿电机转动的总量跟D进行数据对比的。0.3+0.6=0.9呀。

 

这样,我们就完成了第二部分。

 

 


 

第三部分,是匀减速状态前进,直至停止。

 

经过我们上一节课的内容,匀加速会了吗?不会的话回头去看一下上一篇好吧。

 

匀减速和匀加速其实是一个道理。只是一个加速度是正的,一个加速度是负的。

 

我们继续复制黏贴大法!

选中,CTRL+C,CTRL+V,

把整个匀加速部分复制下来。

然后进行一些修改。

 

1、V-Va

 

【机器人竞赛特刊】精确的直线前进与后退 2

2、去掉瞬间加速的部分

 

【机器人竞赛特刊】精确的直线前进与后退 2

3、修改最后的结束条件

由于我们最终的状态是停止,所以,这个条件表达起来应该是:

当走到了D的值“or(或者)”电机转动速度为0的时候,程序停止。

 

【机器人竞赛特刊】精确的直线前进与后退 2

之后,整个程序的数据处理部分套上大循环,循环1次。

 

【机器人竞赛特刊】精确的直线前进与后退 2

这样数据处理部分就全部完成了。

 



细节优化:

 

1、由于电机不会自动重置计数,所以,每次这个程序运行时,都需要重置一下电机,所以在数据模块的大循环之外,需要加上电机重置的模块。

 

【机器人竞赛特刊】精确的直线前进与后退 2

2、我们还需要用变量D,来控制一下“动作部分”的结束要求。

 

【机器人竞赛特刊】精确的直线前进与后退 2

 


 

创建模块:

 

按键盘:CTRL+A,全选整个程序。按住CTRL,点“开始模块”,去掉它。

菜单栏:工具——我的模块创建器

 

【机器人竞赛特刊】精确的直线前进与后退 2

不会?具体的教学可以看号内“基础编程”篇里面的内容。

 

【机器人竞赛特刊】精确的直线前进与后退 2

在这个程序中,我们可以设定几个参数,以方便我们日常使用。

 

初始速度,一般就是0,但有些时候不是。

加速度,一般取值1~5,自己尝试吧

总度数,类似于各种电机模块的“旋转角度”,也就是我们的变量D。

 

最终我们创建出这样的一个模块。注意一下参数的链接。

【机器人竞赛特刊】精确的直线前进与后退 2

然后我们就可以在我的模块里面找到这个模块了。

 

【机器人竞赛特刊】精确的直线前进与后退 2

 

以后要用起来的时候。比如:

 

从静止开始的状态,那么初速度就是0;

加速度为3;

电机总度数需要转1200。

 

【机器人竞赛特刊】精确的直线前进与后退 2 

我们只要这样设定一下参数,就可以了。

是不是很方便?

 

好啦,请各位自己操作试试吧。

 

 


 

注意

 

这是个草稿程序,我自己用的那个比这个要复杂的多。出于教学目的,所以给大家提供这样一个思路。

 

效果好不好,应该如何修改,请各位自行研究一下。比如这个程序适当优化就可以作为后退使用。

 

老丁愿意分享思路,但不希望同学们都是照抄,如果要给大家抄程序,那么我也就没必要做这个公众号讲那么多话了。直接开几个源,不就行了。

 

有很多朋友给我留言,问的问题其实都是之前在基础课里面讲过的东西,一问我就知道,根本没看我之前的稿子。

 

我每篇课程要花至少3个小时写,

也给大家保留着……

唉,有种失落感。

 

好了,第一个竞赛用的程序思路讲完。

后面我会讲第二个。希望能帮助到大家。

您必须 登录 才能发表评论!