迷宫探路智能化机器人的研究与应用 第2页
if(iIr>50 && iIr<120)
{
driveb(-23,-21);wait(0.250000);stop();/*防止有些时候靠得太近*/
iIr=analogport(5);
while(iIr<=125)
{iIr=analogport(5);driveb(13,11);}
stop();
}
}
(4)行进过程中的方向校正————三重校正
问题及原因:
机器人的两个主轮运行相应的参数不一致,运行过程中的功率也不是很稳定,使得运行过程中出现偏离跑道中央,导致撞墙。
(A)磁极校正
a)原理:
当机器人朝不同的方向时,通过对应的i 值,确定相应正方向变量iOrient值的范围,从而使机器人在这个范围内运行运行,使机器人始终走在跑道正中。以正北方向为例,实现的程序片段如下
while(i= =1)
{
while(!(iOrient>=358 || iOrient<=2))
{ iOrient=GetOrient();
if(iOrient>2 && iOrient<180)
{
adjust(0, -10, 0.05);
}
if(iOrient>180 && iOrient<358)
{
adjust(0, 10, 0.05);
}
}
break;
}
b)单独使用出现的问题:
迷宫中的磁场不均匀,使得有些地方的指南针的返回值与理论值出现严重的偏差,导致出现错误校正。
c) 解决方案:配合前红外校正。
(B)前红外校正
a)原理:
利用机器人前红外传感器的返回值,确定机身是否有偏转。
左偏———testf= =1——向右校正
右偏———testf= =2——向左校正
testf=ir_detector();
if(testf= =1)
{adjust(0,15,0.05); }
else if(testf= =2)
{adjust(0,-15,0.05); }
b)单独使用的缺陷:
在路口处,前面无侧墙时,由于两面不对称,当其向某一方向偏差时,该方向上的红外信号将无法被反射,或者反射很弱,导致前红外校正testf 不能有正确的返回值。
c)解决方案:侧红外校正。
(C)侧红外校正
a)原理:
当机器人偏离角度过大时,可以使用两侧的红外传感器来做出快速的大角度校正!
rr=read1(2);
lr=read2(1);
if(rr= =0)
{adjust(0,15,0.05); }
if(lr= =0)
{adjust(0,-15,0.05); }
b)缺陷:
和前红外校正一样,当它处于路口处时,无法反射红外信号。
如果仅仅是对于校正来说,这是一个缺陷,但是从整体上来说,却是一个很好的互补! 因为,它可以在“路口中断”处得到很好的利用。
(5) 引入时间参数
首先,测出了机器人在正常区域内行进时,每3秒钟内程序可能执行的校正次数的最大值:18次。
然后将程序运行的系统时间以3秒为一份分割,在每一份内记录程序执行校正命令的次数。当它大于20次时,说明此时机器人正处于上述的矛盾校正中,这时可以命令机器人先向前推进一步再执行校正程序,如此反复,直到走出使机器人左右摆动的“磁场混乱”区域,跳出矛盾。
times=0;
while(times<20)
{tim_1=seconds();
while((tim_2-tim_1)<3.0 && times<20)
{
turnjz();times++;;
tim_2=seconds();
}
if(times>=20)break;else times=0;
}
driveb(13,13);wait(0.7);stop();
(6)红外测距卡与红外传感器之间的矛盾解决
由于前红外的感应范围大于红外测距卡,因此,在正前方有墙的时候,又会出现两者相互抵制的矛盾现象
设定前红外校正的范围
if(iIr<60)/*红外校准及其执行范围*/
{testf=ir_detector();
if(testf==1)
{adjust(0,15,0.05);bumpcheck( );times++;}
else if(testf==2)
{adjust(0,-15,0.05);bumpcheck( );times++;}}
(7)路口中断
在路口处需要进一步探测,并做出相应的行为(比如转弯),必须使机器人及时停在节点路口的正中间以便准确执行下一步命令。
(A)路口种类及相应的返回值www.751com.cn 6
iIr >=100 testr= =3 testl==3 7
iIr <100 testr= =3 testl==3
iIr <100 testr= =0