发表日期:2016-10-31 20:56:37文章编辑:浏览次数: 标签:
所谓复杂路径,是指路径上含有多种不同轨迹线,有的地方是直线,有的地方是圆滑曲线,又有些地方是急弯轨迹等的路径,如下图。
本题要求机器人从A点出发,沿ABCDEF的路线停止到F点。
一、三眼循线与五眼循线
亮宁机器人地面寻线传感器集成了五个光电传感器,对于线路弧度不大的曲线或直线轨迹,用中间2,3,5三个光电传感器即可以完成循线,而左右两个光电传感器则可以专门用来识别不同的路口。程序段如下:
void line()
{
check();
if (l==0) motor(0,30);
else if (r==0) motor(30,0);
else if (m==0) motor(30,30);
if (ll==0 && rr==1 ) {左转弯处理}
if (rr==0) && ll==1 {右转弯处理}
if (rr+ll=0) {停车处理}
}
如果路径多弯道,且弧度比较大,则需要使用通常所写的五眼循线程序。本网站上和《中小学机器人》教程上常见,且本文下面还会提到,这里不再赘述。
二、分段循线
下面是一般的五眼的程序,大家注意观察引入的变量sp、sp1和它们的作用。
#include <LNDZ.h>
......
int sp=35,sp1=30;
void check()
{
......
}
void init()
{
....
}
void repeat()
{
check();
if (n==4) //此为仅一眼看到线的情形;
{
if (ll==0) motor(-sp1,sp1);
else if (l==0) motor(0,sp1);
else if (r==0) motor(sp1,0);
else if (rr==0) motor(sp1,-sp1);
else motor(sp,sp);
}
if (n==3) //此为两眼同时看到线的情况
{
if (ll+l==0) {左转变处理}
else if (rr+r==0){右转弯处理}
else if (m+l==0) motor(sp1/2,sp1);
else if (m+r==0) motor(sp1,sp1/2);
}
if (n<3) //判断交叉路口,如果误判,就改条件为n<2,特别是新款的寻线传感器。
{
t++;
if (t==1) {sp=25;sp1=32;} //B点之后,放慢前进 的速度,增大方向调整的力度;
if (t==2) {sp=35;sp=30;} //C点之后,是直线和小弧度曲线,直行速度加快,调整力度减小
if (t==3) {sp=28;sp1=35;} //类上
if (t==4){sp=35,sp1=30}
if (t==5){motor(0,0);while(1);}
delay(80); //防止对路口重复计数
}
}
上述程序,虽然我们并没有把程序进行阶段性编写,但我们却针对不同的路况进行了速度上的调整。当路径弧度大时,我们采用慢进快调的方式,提高循线精度,以时间换取稳定性;当路况较为平坦时,快进后慢调,赢得时间。
当然上述程序中的速度参数,只是一个参考值,使用者要根据场地条件修改这些值以适应不同的场合。