实验六 红外探测导航、超声波传感器测距导航
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能机器人实验报告
(六)
班级:01540802班
姓名:南征
学号: 20080705
信息与电子学院
实验六红外探测导航、超声波传感器测距导航
08级通信工程专业 01540802班南征(20080705)第11组
I.红外探测导航
一、实验目的
学习机器人通过红外探测器进行判别、实现避障导航、循迹运动。
二、实验仪器设备
Boe-Bot机器人小车、PC机、红外发光管、红外探测器、220欧姆电阻、470欧姆、1K欧姆、2K欧姆等。
三、实验内容
1.连接并测试红外探测器组合;
2.物体探测、红外干涉、及探测范围的测试;
3.物体探测、避障导航;
4.跌落探测器。
四、实验原理
红外探测器组合包括红外灯和红外探测器。
红外灯(IR LED)发出频率比红光低且波长比红光长(红光波长780nm)的光。
Boe-Bot 使用红外灯作为前灯发射出红外线,如图6-1-1 所示,同时,红外线照射到障碍物并以Boe-Bot 的方向反弹回来,红外探测器接收到由目标反射回来的红外线,并发送信号给Boe-Bot 的大脑BASIC Stamp,对基于传感器的输入做出判断,并操作伺服电动机运动。
红外探测器具有电子滤波器,它仅允许频率大约在38.5kHz 的波通过。
五、实验步骤
1.连接并测试红外探测器组合
‘TestLeftIrPair.bs2
irDetectLeft VAR Bit
DO
FREQOUT 8, 1, 38500
irDetectLeft = IN9
DEBUG HOME, "irDetectLeft = ", BIN1 irDetectLeft
PAUSE 100
LOOP
在距离左侧IR 组合一英寸前放置一个物体,例如你的手或一张纸,注意观察当你把物体放在IR 组合前方的时候,Debug Terminal 窗口中是否会显示一个0,而当你把物体从IR 组合前方移开的时候,是否会显示一个1。
将TestLeftIrPair.bs2另存为T estRightIrPair.bs2;
把TestLeftIrPair.bs2中变量irDetectLeft 的名称改为irDetectRight;
把FREQOUT 命令中自变量Pin 的值从8 改为2;
把由irDetectRight 变量所监测的输入寄存器IN9 改为IN0;
对右侧IR 组合重复测试步骤。
2.物体探测、红外干扰、及探测范围的测试
输入、保存并运行程序TestIrPairsAndIndicators.bs2。
' TestIrPairsAndIndicators.bs2
' [ Variables ]
irDetectLeft VAR Bit
irDetectRight VAR Bit
' [ Initialization ]
DEBUG "Testing piezospeaker..."
FREQOUT 4, 2000, 3000
DEBUG CLS,
"IR DETECTORS", CR,
"Left Right", CR,
"----- -----"
' [ MainRoutine ]
DO
FREQOUT 8, 1, 38500
irDetectLeft = IN9
FREQOUT 2, 1, 38500
irDetectRight = IN0
IF (irDetectLeft = 0) THEN
HIGH 10
ELSE
LOW 10
ENDIF
IF (irDetectRight = 0) THEN
HIGH 1
ELSE
LOW 1
ENDIF
DEBUG CRSRXY, 2, 3, BIN1 irDetectLeft,
CRSRXY, 9, 3, BIN1 irDetectRight
PAUSE 100
LOOP
观察Debug Terminal 窗口显示“Testing piezospeaker…”时,扬声器是否发出了清晰响亮的声音。
使用Debug Terminal 窗口来观察当有物体放在Boe-Bot 前方时,是否仍然接收到一个0。
观察当探测器探测到物体时,每个探测器旁的LED 灯是否变亮。
如果有一个或者两个LED 灯都不能工作,请检查你的接线和程序。
红外干扰:
如果探测范围内没有任何物体,但是Boe-Bot 还是提示你它探测到了某些物体,那么这意味着附近的光源正在发出频率接近的38.5kHz 的IR光。
可以产生红外干涉的设备包括:荧光灯镇流器、手持遥控器、电视机、录像机、CD/DVD播放器等。
1)输入、保存并运行程序IrInterferenceSniffer.bs2;
' IrInterferenceSniffer.bs2
counter VAR Nib
DEBUG "IR interference not detected, yet...", CR
DO
IF (IN0 = 0) OR (IN9 = 0) THEN
DEBUG "IR Interference detected!!!", CR
FOR counter = 1 TO 5
HIGH 1
HIGH 10
FREQOUT 4, 50, 4000
LOW 1
LOW 10
PAUSE 20
NEXT
ENDIF
LOOP
2)断开Boe-Bot 与串口线的连接,让它面对你操作区域内的荧光灯。
如果你
频繁收到警报,这就意味着环境存在红外干扰,请在利用IR 探测物体前关闭荧光灯。
探测范围:
通过使Boe-Bot 的红外LED 前灯变得更亮,你可以增大它的探测范围。
流经LED 的电流变变大是导致它更亮的原因。
在本操作中,你将利用红外LED 来检测不同阻值电阻对亮度的影响。
1)打开并运行程序TestIrPairsAndIndicators.bs2;
2)用一把尺子,测量IR LED 所能探测到的最远的纸片与IR LED 之间的距离。
3.IR 物体探测和避障导航
‘RoamingWithIr.bs2
DEBUG "Program Running!"
'[ Variables ]
irDetectLeft VAR Bit
irDetectRight VAR Bit
pulseCount VAR Byte
'[ Initialization ]
FREQOUT 4, 2000, 3000 ' Signal program start/reset.
' [ MainRoutine ]
DO
FREQOUT 8, 1, 38500 ' Store IR detection values in bit variables.
irDetectLeft = IN9 '
FREQOUT 2, 1, 38500
irDetectRight = IN0
IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN
GOSUB Back_Up ' Both IR pairs detect obstacle
GOSUB Turn_Left
GOSUB Turn_Left
ELSEIF (irDetectLeft = 0) THEN ' Left IR pair detects
GOSUB Back_Up
GOSUB Turn_Right
ELSEIF (irDetectRight = 0) THEN ' Right IR pair detects
GOSUB Back_Up
GOSUB Turn_Left
ELSE ' Both IR pairs 1, no detects
GOSUB Forward_Pulse
ENDIF
LOOP
'[ Subroutines ]
Forward_Pulse:
PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
RETURN
Turn_Left:
FOR pulseCount = 0 TO 20
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
RETURN
Turn_Right:
FOR pulseCount = 0 TO 20
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
Back_Up:
FOR pulseCount = 0 TO 40
PULSOUT 13, 650
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
4.跌落探测器
Boe-Bot 在一张桌子上漫游,调整它的IR 探测器向下望去,编程使Boe-Bot 在桌面上进行导航动作而不越过边缘跌落。
‘AvoidTableEdge.bs2
DEBUG"Program Running!"
irDetectLeft VAR Bit 'Variable declarations.
irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR Word
loopCount VAR Byte
pulseCount VAR Byte
FREQOUT 4,2000,3000 'Signal program start/reset.
DO 'Main Routine.
FREQOUT 8,1,38500 'Check IR detectors.
irDetectLeft=IN9
FREQOUT 2,1,38500
irDetectRight=IN0
'Decide navigation.
IF(irDetectLeft=0)AND(irDetectRight=0)THEN
pulseCount=1 'Both detected,
pulseLeft=850 'one pulse forward.
pulseRight=650
ELSEIF(irDetectRight=1)THEN 'Right not detected,
pulseCount=10 '10 pulses left.
pulseLeft=650
pulseRight=650
ELSEIF(irDetectLeft=1)THEN 'Left not detected,
pulseCount=10 '10 pulses right.
pulseLeft=850
pulseRight=850
ELSE 'Neither detected.
pulseCount=15 'back up and try again.
pulseLeft=650
pulseRight=850
ENDIF
FOR loopCount=1 TO pulseCount 'Send pulseCount pulses
PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 20
NEXT
LOOP
六、思考题
1.命令FREQOUT 2,1,38500发送的谐波频率是多少?该命令发送的基本频率的
值是多少?这些信号的持续时间是多长?为了发送该信号,IR LED电路必须与
哪个I/O引脚相连?
命令FREQOUT 2,1,38500发送的谐波频率是38500Hz,该命令发送的基本频率
的值是38500,这些信号的持续时间是1ms。
为了发送该信号,IR LED电路必须与2、8 I/O引脚相连。
2.如果IR探测器发送一个低信号,这意味着什么呢?当探测器发送一个高信号
时,又意味着什么呢?
如果IR探测器发送一个低信号,这意味着其探测到前方的物体,当探测器发送一个高信号时,意味着前方没有探测到物体。
3.设计一个Boe-Bot的应用程序,使它一直做原地旋转,直到它探测到了某个物
体。
一旦它探测到物体后,它就锁定物体并追踪该物体。
‘AvoidTableEdge.bs2
DEBUG"Program Running!"
irDetectLeft VAR Bit 'Variable declarations.
irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR Word
loopCount VAR Byte
pulseCount VAR Byte
FREQOUT 4,2000,3000 'Signal program start/reset.
DO 'Main Routine.
FREQOUT 8,1,38500 'Check IR detectors.
irDetectLeft=IN9
FREQOUT 2,1,38500
irDetectRight=IN0
'Decide navigation.
IF(irDetectLeft=0)AND(irDetectRight=0)THEN
pulseCount=1 'Both detected,
pulseLeft=650 'one pulse forward.
pulseRight=850
ELSEIF(irDetectRight=1)THEN 'Right not detected,
pulseCount=10 '10 pulses left.
pulseLeft=750
pulseRight=850
ELSEIF(irDetectLeft=1)THEN 'Left not detected,
pulseCount=10 '10 pulses right.
pulseLeft=650
pulseRight=750
ELSE 'Neither detected.
pulseCount=15 'back up and try again.
pulseLeft=850
pulseRight=850
ENDIF
FOR loopCount=1 TO pulseCount 'Send pulseCount pulses PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 20
NEXT
LOOP
II.超声波传感器测距导航
一、实验目的
学习超声波传感器的原理,掌握使用超声波传感器来测量物体的距离及导航。
二、实验仪器设备
Boe-Bot机器人小车组件,PC机,Parallax 2×16 Serial LCD,超声波传感器,3-pin插座。
三、实验内容
1.测试超声波传感器回音时间及范围;
2.测试目标距离值;
3.利用超声波传感器控制小车,并在LCD上显示测量值。
四、实验原理
超声波传感器是利用超声波喇叭传送一个短波并用超声波麦克风测量回音回来的时间。
Basic Stamp 传送一个脉冲波使超声波传感器启动,超声波传感器就会传送40kHz 的音频信号,并输出一个High 信号到Basic Stamp。
当超声波传感器侦测到回音时,信号就由High 转为Low。
PULSIN 在Basic Stamp 程序中是用来储存从超声波传感器的High信号时间长短。
这时间就是超声波从传感器出发到物体被反弹所经过的时间,只要乘上声音在空气的速度就可以知道距离了。
本实验使用超声波传感器测量范围为3cm - 3.3m。
五、实验步骤
1.测试超声波传感器回音时间及范围
‘PingTest.bs2
time VAR Word
DO
PULSOUT 15, 5
PULSIN 15, 1, time
DEBUG HOME, "time = ", DEC5 time
PAUSE 100
LOOP
观察DEBUG Terminal上显示的数值大小。
移动目标到传感器前30 cm,观察并
证明time 变量的值大约多一倍。
将传感器移近目标,并观察时间测量值。
将超声波传感器放在离墙壁1m远的地方,记录测试值。
然后,将传感器放在不同的角度上,观察测试值有改变吗?传感器开始无法测试的角度为多少?
2.测试目标距离值
' PingMeasureCm.bs2
CmConstant CON 2260
cmDistance VAR Word
time VAR Word
DO
PULSOUT 15, 5
PULSIN 15, 1, time
cmDistance = CmConstant ** time
DEBUG HOME, DEC3 cmDistance, " cm"
PAUSE 100
LOOP
3.利用超声波传感器控制小车,并在LCD上显示测量值
' PingLcdCm.bs2
CmConstant CON 2260
cmDistance VAR Word
time VAR Word
i VAR Word
PAUSE 200
SEROUT 14, 84, [22, 12]
PAUSE 5
DEBUG CLS,"..."
DO
PULSOUT 15, 5
PULSIN 15, 1, time
PULSOUT 13,850
PULSOUT 12,650
Pause 20
cmDistance = cmConstant ** time
IF(cmDistance<15 AND cmDistance>5) THEN
FOR i=10 TO 90 STEP 20
PULSOUT 13,850-i
PULSOUT 12,650+i
NEXT
ELSEIF(cmDistance<5)THEN
PULSOUT 13,750
PULSOUT 12,750
ENDIF
DEBUG HOME, "time= ",DEC3 time
SEROUT 14, 84, [128, DEC3 cmDistance, " cm"]
SEROUT 14, 84, [148, DEC3 time, " ms"]
PAUSE 100
LOOP
六、思考题
1.什么因素会影响到超声波传感器的数据?
波长等因素会影响超声波传感器的精度,其中最主要的影响因素是温度。
超声波传感器变化的声波速度,因而许多超声波传感器具有温度补偿的特性。
空气温度与湿度会影响声波的行程时间。
空气温度每上升20ºC,检测距离至多增加3.5%。
在相对干燥的空气条件下,湿度的增加将导致声速最多增加2%。
气压、气流对超声波传感器的数据也会产生一定的影响,但在一定范围内微不足道。
2.超声波传感器的检测死区是由什么原因造成的?测试的最小角度为多少?
直接反射式超声波传感器不能可靠检测位于超声波换能器前段的部分物体。
由此,超声波换能器与检测范围起点之间的区域被称为盲区。
传感器在这个区域内必须保持不被阻挡。
当被测物体与传感器成一定角度的时候,所探测的距离和实际距离有个三角误差。
在特定的角度下,发出的声波被光滑的物体镜面反射出去,因此无法产生回波,也就无法产生距离读数。
这时超声波传感器会忽视这个物体的存在。
在探测墙角或者类似结构的物体时,声波经过多次反弹才被传感器接收到,因此实际的探测值并不是真实的距离值。
七、实验心得
本次实验运用红外探测器和超声波传感器实现导航。
与之前实验中用到的传感器相比,本次使用的这两种传感器要更为稳定,干扰因素较小。
但是在实验过程中仍然遇到了一些问题。
传感器探头的角度对于探测的精度有很大的影响,因此在今后的实验过程中传感器探头的固定问题要引起注意。
另外,在探测到物体时,如果立即令机器人小车转变工作状态,可能造成小车的不稳定甚至翻车,这也是需要注意的问题,今后在程序的编写中应当加入缓冲过程。