《SLSIC寻线机器人程序》由会员分享,可在线阅读,更多相关《SLSIC寻线机器人程序(10页珍藏版)》请在金锄头文库上搜索。
1、凌阳SL-DIY08-61A智能机器人SLBASIC寻线程序的开发应用SL-DIY02-8D红外传感器板:装上红外光电传感器,根据实际工作需要安装,用于寻迹、避障、避悬崖、双轮自平衡机器人探测等应用。图19 SL-DIY02-8D电原理图红外光电反射对管FGK125,可以直接替代CNY70,距离远,灵敏度高!轮式寻迹机器人的传感器的安装与编程考虑1. 轮式寻迹机器人1个红外传感器行走设计SL-DIY08-61A机器人用单只红外光电开关用SLBASIC语言寻黑线程序(白底黑线,黑线宽18mm)原理:小车在黑线上前进,跑出黑线(假设向右编偏离黑),小车向左转3单位角度,判是否回到黑线,回到黑线则前
2、进,若没有回到黑线,则向右转过6单位角度,再判断执行。例39机器人单只光电管寻迹程序;SL-DIY08-61A机器人单只红外光电开关寻黑线程序(白底黑线,黑线宽18mm)10 REM SLBASIC; 双龙SLBASIC头文件20 REM IF JK0 0 THEN 50;如果IOA0红外光电开关是高电平(在黑线上)则转到50行执行,;如果为低电平(离开黑线),则按顺序执行下去30 REM GOSUB 300;调用机器人转弯子程序40 REM GOTO 20;循环检测红外光电开关状态50 REM GOSUB 200;调用执行前进子程序60 REM GOTO 20;循环检测红外光电开关状态70
3、REM END;程序结束200 REM LED 0;LED显示机器人执行前进210 REM FD 10;执行前进,参数根据实际情况调正220 REM RETURN;子程序返回300 REM LED 5;LED显示机器人执行左转弯310 REM LT 3; 执行左转弯,参数根据实际情况调正320 REM IF JK0 0 THEN 50;如果IOA0红外光电开关是高电平(在黑线上)则转到50行执行,;如果为低电平(离开黑线),则按顺序执行下去330 REM LED 3;LED显示机器人执行右转弯340 REM RT 6;执行右转弯,参数根据实际情况调正350 REM RETURN;子程序返回36
4、0 REM GOTO 20;循环检测微动开关状态例40 SL-DIY08-61A机器人单只红外光电开关寻黑线程序,边走边发声!(白底黑线,黑线宽18mm)10 REM SLBASIC; 双龙SLBASIC头文件15 REM KEY 0;取曲谱范围低音“1”到高音“1”20 REM IF JK0 0 THEN 50;如果IOA0红外光电开关是高电平(在黑线上)则转到50行执行,;如果为低电平(离开黑线),则按顺序执行下去30 REM GOSUB 300;调用机器人转弯子程序40 REM GOTO 20;循环检测红外光电开关状态50 REM GOSUB 200;调用执行前进子程序60 REM GO
5、TO 20;循环检测红外光电开关状态70 REM END;程序结束200 REM LED 0;LED显示机器人执行前进210 REM FDX ;前进函数215 REM PLAY 81;执行前进,乐曲函数代替延时函数,参数根据实际情况调正220 REM RETURN;子程序返回300 REM LED 5;LED显示机器人执行左转弯310 REM LT 1;左转函数,参数根据实际情况调正320 REM IF JK0 0 THEN 200;如果IOA0红外光电开关是高电平(在黑线上)则转到200行执行,;如果为低电平(离开黑线),则按顺序执行下去330 REM LED 3;LED显示机器人执行右转弯
6、340 REM RT 3;右转函数,参数根据实际情况调正350 REM RETURN;子程序返回360 REM GOTO 20;循环检测微动开关状态例41轮式寻迹机器人2个红外传感器行走设计 方案1:二光电管间距大于黑线宽度 方案2:二光电管间距小于黑线宽度 IOA4IOA3IOA2IOA1IOA0编码A动动状态111000X1C0 前进111010X1C1 左转111100X1C2 右转111110X1C3 前进或停10 REM SLBASIC; SLBASIC文件头20 REM A=JKX-0x1C;0X18即IOA4,IOA3,IOA2排除非法干扰数据30 REM IF A=0 THEN
7、 110;A=0转40 REM IF A=1 THEN 130;A=1转50 REM IF A=2 THEN 150;A=2转60 REM IF A=3 THEN 170;A=3转101 REM END;程序结束110 REM FD 10;前进, ,参数根据实际情况调正120 REM GOTO 20;循环执行130 REM LT 3;左转, ,参数根据实际情况调正140 REM GOTO 20;循环执行150 REM RT 3;右转,参数根据实际情况调正160 REM GOTO 20;循环执行170 REM FD 10;点亮LED,参数根据实际情况调正180 REM GOTO 20;循环执行
8、请修改程序,让机器人边走边发声!2. 轮式寻迹机器人3个红外传感器行走设计一般的轮式寻迹机器人三个红外传感器是排成一行设计的, 以三角形安装的红外传感器,能较好地识别复杂轨迹行走。太极轨迹地图分析机器人轨迹比赛的场地为一块长2.4米,宽1.6米的白色的木质板,板面上将贴有一条22.5厘米宽的黑色轨迹线。此条黑色轨迹线由直线、圆弧、隧道(长30厘米,宽20厘米,隧道高20厘米)、拱形斜坡(坡长40厘米,宽20厘米,坡高3-5厘米)和其它曲线组成,场地中间圆形图形的直径为90厘米。在这里,我们关心的黑色轨迹线是直线和圆弧,隧道和拱形斜坡暂且不管。我们把黑色轨迹线分解成直线、90度弯角、十字交叉、圆
9、弧与终点,那么,只要我们能够辨别出这五部分,已经成功了一半,剩下的问题是每一部分怎样走了。(1) 算法分析 “1”在黑线上“0”不在黑线上,总体分析表:IOA4IOA3IOA2左IOA1中IOA0右 编码A机器人动动可能状态及处理方法110000X1C0走偏,左右探测,左转3,右转6110010X1C1左偏离,右转3110110X1C2十字线或直角线, 前进探测10110100X1C3直线,前进10111000X1C0右偏离,左转3111010X1C1十字线或终点,左右探测,前进3,左转3,右转6 111110X1C2十字线或终点,左右探测,前进3,左转3,右转6111100X1C3十字线或直
10、角线, 前进探测10中左右怎样才能够辨别出每一部分呢,这与使用的黑线检测传感器的数量有关。使用得少了,就需要频繁的修正机器人的方向,使机器人不要偏离黑色轨迹线;使用得多了,就会使算法复杂了。为此我们使用了3个黑线检测传感器。3个黑线检测传感器排成一个三角形,如图:黑线总是夹在左、右黑线检测传感器之间。因此,可把直线、90度弯角和圆弧合并成一部分,称为线。现在黑色轨迹线分解成线、十字交叉和终点三部分了。当左、右黑线检测传感器都检测到黑线时,就是十字交叉或终点了,否则就是线了。为了区分十字交叉和终点,我们使用了中黑线检测传感器。由于十字交叉中间只有一条黑线,终点前面是一块黑色,所以我们使用中黑线检
11、测传感器扫一下就可以区分开来了。十字交叉的辨别:当左、右黑线检测传感器都检测到黑线时,中黑线检测传感器扫描一下,假如检测到的不全是黑色,就认为是十字交叉。终点的辨别:当左、右黑线检测传感器都检测到黑线时,中黑线检测传感器扫描一下,假如检测到的全是黑色,就认为是终点。线的辨别:当左、右黑线检测传感器不是同时检测到黑线时,就认为是线。那么,如何保证黑线总是夹在左、右黑线检测传感器之间呢?为了使黑线总是夹在左、右黑线检测传感器之间,需要作如下处理:当左黑线检测传感器检测到黑线时当右黑线检测传感器检测到黑线时 例42机器人用3对红外寻迹程序10 REM SLBASIC; SLBASIC文件头20 RE
12、M A=JKX-0x18;0X18即IOA4,IOA3,排除非法干扰数据30 REM IF A=0 THEN 110;A=0转出界,后退探测40 REM IF A=1 THEN 130;A=1转左转1单位50 REM IF A=2 THEN 150;A=2转断线,前进或后退60 REM IF A=3 THEN 170;A=3转左转2单位70 REM IF A=4 THEN 190;A=4转右转1单位80 REM IF A=5 THEN 210;A=5转前进90 REM IF A=6 THEN 230;A=6转右转2单位100 REM IF A=7 THEN 250;A=7转-十字线或终点,左右
13、探测101 REM END;程序结束110 REM LED 0;点亮LED115 REM BK 2; IOA2,IOA1,IOA0000-出界,后退探测120 REM GOTO 20;循环执行130 REM LED 1;点亮LED135 REM LT 1; IOA2,IOA1,IOA0001-转左转1单位140 REM GOTO 20;循环执行150 REM LED 2;点亮LED155 REM FD 2; IOA2,IOA1,IOA0010-前进160 REM GOTO 20;循环执行170 REM LED 3;点亮LED175 REM LT 3; IOA2,IOA1,IOA0011-左转2单位180 REM GOTO 20;循环执行190 REM LED 4;点亮LED195 REM LT 3; IOA2,IOA1,IOA0100-右转1单位200 REM GOTO 20;循环执行210 REM LED