准备篇的内容是为小车正式编辑巡线程序所做的准备工作,只有学会了初始化的设置并用小车正确环境采集之后,我们才能用本篇所讲的内容让小车巡线走。
模块解析:
路口巡线模块的作用是小车巡线移动并在找到路口时停止。我们要理解这个模块中两个关键功能:巡线、找到路口停止。
巡线:此模块运行时,小车会自动进行巡线。巡线时如果小车走歪,模块会控制小车自动纠正方向,确保小车一直沿着线路运行(这个调整的过程是程序人员写在模块的底层里的JC代码控制的,不需要我们去设置了,所以用巡线模块库的模块编辑巡线程序比我们用普通模块方便很多)。
找路口:巡线的过程当中,小车的传感器会一直检测路口,当找到我们在属性框中设置的路口类型时,小车就会停止。这里所说的路口就和我们生活中的路口类似。
下图红色圈住的地方,都是比赛地图上的路口。
注意:小车最左侧和最右侧两个灰度传感器就是专门用来检测路口的,剩下中间3或5个灰度传感器是用来巡线的。
双击打开路口巡线模块的属性框,有如下四项内容需要设置。
①路口类型:有左侧路口和右侧路口两种类别。要让小车在找到前进方向左侧的路口停下来时,选左侧路口;要让小车在找到前进方向右侧的路口停下来时,选右侧路口;如果小车停止路口左右两侧都有路线,任选其一。
②速度设置:这里有三个速度值需要设置,我们来看:
左轮实际速度=(巡线速度-左转差速)×左马达功率
右轮实际速度=(巡线速度-右转差速)×右马达功率
这里的功率是初始化里面设置的。
设置:
小车巡直线走时,我们修改巡线速度控制快慢,左右转差速设0就行;
小车巡弯线走时,曲率小的弯线小车可以自动纠正走过,但曲率大的弯线小车纠正起来会比较困难,就会发生冲出路线的情况。这时我们设置左右转差速,让小车在这个差速基础上纠正就会容易很多。所以“左转差速”“和右转差速”只有在走弯线时用得较多。
③循环次数:定义经过几个路口。我们可以理解为在路口巡线模块外面加了一个多次循环。循环次数为1时,小车会在巡线时找到第一个我们设置的路口类型处停止。循环几次,记在找到第几个我们设置的路口类型处停下。
④冲过路口时间:指冲过路口后继续前进的时间。路口巡线会巡线走,直到找到我们设置的路口停下。设置这个参数后,小车会在找到路口后不停,继续用我们设置的速度(不巡线)前进相应的时间再停止。
此参数是为了让我们的小车在找到路口之后转弯时更方便,所以在路口巡线之后加转弯模块时,都必须设置一定的冲出路口时间。一般取值范围就在0.1~0.5之间。下面在“转弯”模块中我们会更详细地解释怎么设置。
⑤结束后停车:执行完该模块后机器人是否停止。设置此处时,我们只需要记住当你写的程序中的最后一个模块中有此设置选项,勾选“是”就可以,其他模块中的此选项可任意选择“是”或“否”。最后一个模块选“是”,是为了让小车程序运行到最后能停止。过程中最好选“否”,是为了让小车直接执行下一个模块,免去了‘停止--启动’这个过程。
⑥注释:在准备篇中讲过此设置的作用,很有用的小功能,大家多用可使程序的易读性更强。
下面我们来看一个编程实例,注意每个参数的设置和实际运行效果。
当巡线小车的路线发生改变,我们可以利用转弯模块让小车转到其它路线上继续前进。
根据我们搭建的小车模型,它的两个驱动轮是可以单独控制速度的,所以相对于现实中的小汽车,它可以实现原地转弯,而现实中的小汽车需要走曲线来转弯。所以巡线模块库中“转弯”的意思和我们现实生活中的转弯有所不同。
巡线小车:
小汽车:
所以在一张比赛地图中,我们可以再上面一张比赛地图上标出的路口等位置使用转弯。但是遇到下面这些情况,对我们的巡线小车而言,这是走曲线,而不是转弯,所以遇到这种曲线我们使用巡线模块而不是转弯模块。
下面我们来看看属性框的设置:
①过线条数:设置小车转弯过程中要经过的线条数。
注意:小车转弯的程度不是以角度来计量,而是用小车转弯过程中扫过的线条数来确定。所以“转弯模块”是让小车转到一条线上,而不能转到空白的区域停下来。
具体程序中我们这么来确定过线条数:
小车往左转,我们观察最左侧灰度传感器,它在转到目标位置过程中所扫掠过的线条数目;
小车往右转,我们观察最右侧灰度传感器,它在转到目标位置过程中所扫掠过的线条数目。
②马达速度:左右马达速度决定了小车的转弯方式。一般有两种常见方式:左右马达速度相反的绕中心转(例如:50、-50;100、-100等);一边速度为0的绕轮胎转(例如:0、50;0、-100等)
③结束位置:设置小车转弯最后车身位置的参数。前面的过线条数帮我们确定小车转弯过程经过几条线,结束位置帮我们确定小车在传感器扫掠过相应线条数后,什么时候停车。
“偏左”:小车会在扫过设置的线条数后继续转动的过程中,在中间偏左一个的灰度感应到黑色时停止;
“中间”:小车会在扫过设置的线条数后继续转动的过程中,在正中间的灰度感应到黑色时停止;
“偏右”:小车会在扫过设置的线条数后继续转动的过程中,在中间偏右一个的灰度感应到黑色时停止。
三种不同结束位置是为了让小车在转弯之后停止的位置能够人为的微调。原因就是小车在转弯停止时由于惯性问题还会再转一点角度,这样就造成了车身的歪斜。之后小车要继续巡线前进就会在开始阶段纠正角度,比车身正着摆放时多消耗了一些时间。所有不必要的时间浪费,都会影响最后的比赛结果。
“转弯模块”运行的最好状态就是在转弯停止之后小车车身能正着压在路线上,这需要我们配合调整“路口巡线”的冲出路口时间和“转弯”的速度、结束位置三种参数。你不妨试着能不能让小车像上面的动图中一样转弯。
学会使用路口巡线和转弯模块之后,比赛地图上顶端有路口的线我们都能编程让小车巡线到达了。但是下面这些圈住的地方,小车是无法只用这两个模块走到的。
这些地方没有黑线路口作为停止的判断条件,所以无法用“路口巡线”到达。有些人可能会说我可以在“路口巡线”中设置“冲出路口时间”就可以了。确实对于上图是可以这么设置让小车到达的。但是我们注意,冲出路口这段时间小车是按照设置的速度“走”,并不会巡线,所以如果路口之后的线是弯的,我们就无法用“路口巡线”走到这些位置。
所以在这些地方我们需要用到“按时巡线”模块。
①速度设置:通“路口巡线”所述。
②巡线时间:通过时间来控制小车走过的距离,以时间来作为结束条件。使用这个模块就可以巡线走到上图圈出的位置。
“路口巡线”和“按时巡线”分别是以路口和时间作为停止标志,而高级巡线模块的结束条件是自己设置某一传感器满足某条件。如下图:
①传感器端口:触发“高级巡线”模块结束条件的灰度传感器对应的I/O口号,可选0~11任意一个端口。这个可以是已经安装在小车前端的巡线灰度传感器,也可以是其他装载到小车上的各类传感器。
②比较符:有>,<,>=,<=,==,!=六种可选。
③参考值:触发结束条件的阈值。这个参考值最好根据反馈到控制器里面的值,结合自己想要的效果来设置。
注意:高级巡线模块在运行过程中,小车前端的灰度传感器除了最左右两端的找路口的两个灰度传感器外,会一直参与巡线纠正,所以最好不使用这些传感器作为结束条件依据。
这边列举此模块几种常用情况:
⑴今年电教场地上有一些细线,许多情况需要我们在细线路口停下,但是用路口巡线却无法完成或成功率很低。原因就是细线反馈值比粗线小很多,当检测细线的值比阈值还小时,机器人就会把细黑线当成白线来处理,就不能用路口巡线停下了。
此时,我们用高级巡线,根据传感器反馈回来细黑线的值,计算出此处的阈值作为参考值,小车就能停下了。
⑵我们可以在小车上装载其它传感器,以这些传感器检测值来作为结束条件的判断依据。
例如在小车前端装一个超声波传感器,让超声波传感器检测到任务模型时停下来,这样我们就不需要用“按时巡线”反复调整时间了。
还可以在小车轮子旁边加一个灰度传感器,让此传感器感应到黑线时停下,这样我们就可以用这个“高级巡线”模块来代替“路口巡线”,好处就是我们不用每次都设置冲出路口时间啦!
巡线篇所讲内容都是通过巡线模块,让小车巡着比赛场地上的引导线来到达任务模型位置。实际比赛我们可以越过路线,直接控制小车速度,是小车行驶到任务模型前面,减少走复杂路线浪费的编程调试和比赛时间。当你可以熟练掌握巡线模块,可以接着来阅读下面的VJC4.2——巡线模块解析(三) 升华篇。
第四节:VJC4.2——巡线模块库解析(三) 升华篇巡线能我们的小车准确地移动到目标位置,但规则中并没有限定我们一定要让小车巡线走。巡线模块库中的“启动马达”模块就是直接控制马达速度使小车移动的模块。在巡线程序中穿插使用“启动马达”模块让小车走“捷径”,可以让我们的小车移动得更加灵活高效。
模块解析:
①结束标志:有时间控制和传感器触发控制两种。这两种触发结束的标志和“按时巡线”和“高级巡线”中相同。
②左、右马达速度:左、右马达速度的取值范围是 -100~100。
下面我们来看看“启动马达”模块的几个常见应用:
⑴冲出基地:比赛的基地是由黑线围成的正方形框,小车要从基地出发就必须先越过黑色边框。
▲我们可以使用“延时触发”让小车前进一段时间使灰度传感器越过黑线。此种方法优点是可以不用考虑基地中LOGO标志的影响,冲出基地过程中灰度传感器是不起作用的。缺点就是需要根据小车在基地中的摆放位置和马达速度对应地调整延时时间。
▲另外我们可以用“传感器触发”先让小车感应到黑线框前边缘,再感应到黑线框后边缘后停止来越过黑线。这种方法的优点是小车摆放位置靠前或者靠后都不需要调整任何参数,缺点就是如果小车在前进冲出基地的过程中灰度传感器感应到基地中的标志,小车就可能把LOGO标志当成黑色框,从而无法冲出基地。
⑵转弯:之前在巡线篇中就讲到,“转弯”模块只能让小车转到路线上,但不能转到一块空白区域。应对这种情况,我们可以使用“启动马达”模块,通过延时和差速让小车转到目标位置。
⑵返回基地:完成部分任务后,小车需返回基地更换程序和解决方案。但如果我们巡线返回基地,即需要多次调试,又会走复杂路线从而浪费时间。所以通常我们会选择使用“启动马达”模块先让小车“后退”“转弯”对准基地,然后直接直线开进基地。
之所以把这篇内容叫做“升华篇”,是因为“启动马达”除了上面所讲的基础应用之外,还可以将我们的走线变得更加灵活高效。学会使用“启动马达”越过一些复杂路线,既可以降低我们调试的难度,又可以节省走线的时间,确实会使我们的程序得到“升华”。下面是两种走“捷径”的情况:
至此VJC4.2的巡线模块库已经全部讲解完毕。为了能尽量多的把所有细节都讲清楚,且避免长篇大论,所有内容都是浓缩之后发出的。如果你需要参加WER比赛,相信这三篇内容会对你有一定的帮助。