宝贝车导航设计_第1页
宝贝车导航设计_第2页
宝贝车导航设计_第3页
宝贝车导航设计_第4页
宝贝车导航设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能机器人实验报告(四)班级:01540802班姓名:南征学号: 20080705 信息与电子学院实验四触须避障导航、光敏电阻导航1 实验四触须避障导航、光敏电阻导航08 级通信工程专业 01540802班南征( 20080705)第 11 组i 触须避障导航一、实验目的基于触须传感器输入的信息,为boe-bot 编程使它进行避障、导航。二、实验仪器设备boe-bot 小车及套件、pc机。三、实验内容1.安装触须传感器。2.连接触须电路,分别用debug 窗口和 led测试触须传感器。3.使用触须进行避障导航。4.人工智能与被卡后的判断。四、实验原理通过安装并测试触须传感器,根据每个触须不仅具

2、有机械延展性而且还具有常开、单极、单闸开关的地面电连接。basic stamp 可以通过编程以检测触须是否受压,并借助这些信息来引导boe-bot 避障和导航。当boe-bot 有触须受压时,这意味着boe-bot已经撞到了一些东西。导航程序需要利用这个作为输入,进行判断,并调用一套动作,使 boe-bot 避开障碍物,转弯并沿另一个方向行进。实验程序设计是使boe-bot 一直前进, 直到遇到障碍物为止。在这种情况下, boe-bot 通过用一个触须或两个触须碰到障碍物来判断是否碰到了障碍物。一旦触须探测到了障碍物,通过导航程序和子程序将使boe-bot 后退并转弯。然后, boe-bot

3、继续前进直至它遇到下一个障碍物为止。五、实验步骤1 安装触须传感器2 添加触须电路实验四触须避障导航、光敏电阻导航2 3 利用 debug窗口测试触须basic stamp 可以通过编程以检测触须是否受压。连接至每个触须电路的i/o 引脚会监测插入的10k电阻的电压。当给定的触须未受压时,连接至触须的 i/o 引脚的电压是5v。而当触须受受压时,i/o 引线被短路接地(vss ) ,所以 i/o 引线的电压看起来是0v。每次 pbasic 程序启动时,所有的i/o 引脚会默认等待输入。这意味着连接至触须的i/o 引脚将执行自动输入的功能。作为输入,连接至触须电路的一个引脚会利用它的输入寄存器存

4、储在电压为5v 的时候存储一个值1(触须未受压) ,或在电压为0v 的时候存储一个值0(触须受压) 。debug 窗口可用来显示这些值。下面的示例程序设计用于测试触须电路的功能是否正常。通过显示存储于p7 和输入寄存器 (in7 和 in5) 中的二进制数, 程序会为你显示basic stamp 是否已经接触到触须。当存储于给定的输入寄存器的值为1 时,说明触须没有受压。如果值是0,说明触须已经受压。操作步骤:(1) 连接电路板、伺服至电源。(2) 输入、运行并保存程序testwhiskers.bs2。(3) 该程序将使用到debug terminal 窗口,所以在程序运行时请保持串口线与 b

5、asic stamp 的连接。示例程序如下:程序testwhiskers.bs2 debug whisker states, cr, left right, cr, - - do debug crsrxy, 0, 3, 格式化命令,负责把指针放在debug 窗口的第0 列第 3 行p5 = , bin1 in5, p7 = , bin1 in7 pause 50 loop 实验四触须避障导航、光敏电阻导航3 4 利用 led测试触须 程序 testwhiskerswithleds.bs2 if (in7 = 0) then 此语句用于做出选择,high 1 触须受压,设置p1 为高, led亮

6、else low 1 触须未受压,设置p1为低, led不亮endif if (in5 = 0) then high 10 else low 10 endif 通过轻轻地按下触须来测试程序。每个触须接触到3 引脚插头时, led 都会发光。5 使用触须进行导航可利用 basic stamp 编程来检测给定的触须是否受压,并借助这些信息编程,为boe-bot 导航。当boe-bot 左右摇摆或有一个触须受压时,这意味着boe-bot 已经撞到了一些东西。导航程序需要利用这个作为输入,判断这是什么意思,并调用一套动作,使boe-bot 避开障碍物,转弯并沿另一个方向行进。下面的示例程序使boe-b

7、ot 一直前进,直到遇到障碍物,根据触须输入做出判断,然后调用子程序使boe-bot 做出反应。示例程序:程序 roamingwithwhiskers.bs2 debug program running! 定义变量pulsecount var byte for.next loop counter. 初始化freqout 4, 2000, 3000 signal program start/reset. 主程序do if (in5 = 0) and (in7 = 0) then both whiskers detect obstacle 实验四触须避障导航、光敏电阻导航4 gosub back_

8、up back up & u-turn (left twice) gosub turn_left gosub turn_left elseif (in5 = 0) then left whisker contacts gosub back_up back up & turn right gosub turn_right elseif (in7 = 0) then right whisker contacts gosub back_up back up & turn left gosub turn_left else both whiskers 1, no contact

9、s gosub forward_pulse apply a forward pulse endif loop 子程序forward_pulse: forward pulse. pulsout 13,850 pulsout 12,650 pause 20 return turn_left: left turn, about 90-degrees. for pulsecount = 0 to 20 pulsout 13, 650 pulsout 12, 650 pause 20 next return turn_right: for pulsecount = 0 to 20 right turn,

10、 about 90-degrees. pulsout 13, 850 pulsout 12, 850 pause 20 next return back_up: back up for pulsecount = 0 to 40 pulsout 13, 650 pulsout 12, 850 pause 20 next return 6 被卡后的判断boe-bot 会卡在墙角里而动弹不了。当 boe-bot 进入墙角里以后, 它的触须会碰到左侧的墙壁,所以它会向右转弯,而当boe-bot 再次前进的时候,它的实验四触须避障导航、光敏电阻导航5 右触须会碰到右侧的墙壁,所以它会向左转弯,结果再次碰

11、到左侧的墙壁,再次转弯后又会碰到右侧的墙壁,这样不断反复而卡住。通过修改程序来探测这个问题并作出反应。窍门在于数出触须轮流接触的次数。该窍门的要点是程序必须能够记住上次接触时每个触须的状态。它会拿触须过去的状态和当前的状态相比较。如果它们是相反的,那么次数就加上1。如果累加后的次数超过了编程者定义的极限,那么,是时候执行u-turn 动作并重新为触须接触次数计数了。程序 escapingcorners.bs2 debugprogram running! 定义变量pulsecount var byte for.next loop counter. counter var nib counts a

12、lternate contacts. old7 var bit stores previous in7. old5 var bit stores previous in5. 初始化freqout 4,2000,3000 signal program start/reset. counter=1 start alternate corner count. old7=0 make up old values. old5=1 主程序do if(in7in5)then one or other is pressed. if(old7in7)and(old5in5)then different from

13、 previous. counter=counter+1 alternate whisker count+1. old7=in7 record this whisker press old5=in5 for next comparison. if(counter4)then if alternate whisker count=4, counter=1 reset whisker counter gosub back_up and execute a u-turn. gosub turn_left gosub turn_left endif endif counter4. else else(

14、old7=in7)or(old5=in5), counter=1 not alternate,reset counter. endif endif(old7in7)and(old5in5). endif endif(in7in5). if(in5=0)and(in7=0)then both whiskers detect obstacle gosub back_up back up & u-turn(left twice) gosub turn_left gosub turn_left elseif(in5=0)then left whisker contacts gosub back

15、_up back up & turn right gosub turn_right elseif(in7=0)then right whisker contacts 实验四触须避障导航、光敏电阻导航6 gosub back_up back up & turn left gosub turn_left else both whiskers=1,no contacts gosub forward_pulse apply a forward pulse endif loop 子程序forward_pulse: forward pulse. pulsout 13,850 pulsout

16、 12,650 pause 20 return turn_left: left turn,about 90-degrees. for pulsecount=0 to 20 pulsout 13,650 pulsout 12,650 pause 20 next return turn_right: for pulsecount=0 to 20 right turn,about 90-degrees. pulsout 13,850 pulsout 12,850 pause 20 next return back_up: back up. for pulsecount=0 to 40 pulsout

17、 13,650 pulsout 12,850 pause 20 next return 六、思考题1.触须受压后, i/o 引脚上监测到的电压是多少?输入寄存器将存储的二进制数值是多少?如果i/o 引脚 p8 用来作为输入引脚,当触须受压后,in8 的值会是多少,如果触须没有受压,它的值又会是多少?触须受压后, i/o 引脚上监测到的电压是0v,输入寄存器将存储的二进制数值是0。如果 i/o 引脚 p8 用来作为输入引脚,当触须受压后,in8 的值是 0,如果触须没有受压,它的值是1。实验四触须避障导航、光敏电阻导航7 2.什么命令可以用于根据不同的变量的值跳至不同的子程序?什么命令可以用于决

18、定跳至某个子程序?这些判断取决于什么?条件语句可以用于根据不同的变量的值跳至不同的子程序,gosub 命令用于决定跳至某个子程序。这些判断取决于条件语句中变量的值。3.修改程序roamingwithwhiskers.bs2 ,使boe-bot 在执行避障动作之前发出100ms 的 4khz 的频响。使它发出两次频响,如果在同一个试验中两个触须同时探测到受压的话。程序 roamingwithwhiskers.bs2 debug program running! 定义变量pulsecount var byte for.next loop counter. 初始化freqout 4, 2000, 3

19、000 signal program start/reset. 主程序do if (in5 = 0) and (in7 = 0) then both whiskers detect obstacle for pulsecount = 0 to 20 high 4 for pulsecount = 0 to 20 low 4 for pulsecount = 0 to 20 high 4 for pulsecount = 0 to 20 low 4 gosub back_up back up & u-turn (left twice) gosub turn_left gosub turn

20、_left elseif (in5 = 0) then left whisker contacts for pulsecount = 0 to 20 high 4 for pulsecount = 0 to 20 low 4 gosub back_up back up & turn right gosub turn_right elseif (in7 = 0) then right whisker contacts for pulsecount = 0 to 20 high 4 for pulsecount = 0 to 20 low 4 gosub back_up back up &

21、amp; turn left gosub turn_left else both whiskers 1, no contacts 实验四触须避障导航、光敏电阻导航8 gosub forward_pulse apply a forward pulse endif loop 子程序forward_pulse: forward pulse. pulsout 13,850 pulsout 12,650 pause 20 return turn_left: left turn, about 90-degrees. for pulsecount = 0 to 20 pulsout 13, 650 puls

22、out 12, 650 pause 20 next return turn_right: for pulsecount = 0 to 20 right turn, about 90-degrees. pulsout 13, 850 pulsout 12, 850 pause 20 next return back_up: back up for pulsecount = 0 to 40 pulsout 13, 650 pulsout 12, 850 pause 20 next return 4.修改程序roamingwithwhiskers.bs2 , 使 boe-bot 在直径为1 米的范围

23、内漫游。当你触碰其中一个触须时,它可以使boe-bot 沿一个小圆圈(直径略小)内行走,而当你同时触碰两个触须时,它可以沿一个更大直径的圆圈行走。程序 roamingwithwhiskers.bs2 debug program running! 定义变量pulsecount var byte for.next loop counter. 初始化freqout 4, 2000, 3000 signal program start/reset. 主程序do if (in5 = 0) and (in7 = 0) then both whiskers detect obstacle gosub bac

24、k_up back up & u-turn (left twice) 实验四触须避障导航、光敏电阻导航9 gosub turn_left gosub big_circle elseif (in5 = 0) then left whisker contacts gosub back_up back up & turn right gosub small_circle elseif (in7 = 0) then right whisker contacts gosub back_up back up & turn left gosub small_circle else b

25、oth whiskers 1, no contacts gosub forward_pulse apply a forward pulse endif loop 子程序forward_pulse: forward pulse. pulsout 13,850 pulsout 12,650 pause 20 return turn_left: left turn, about 90-degrees. for pulsecount = 0 to 20 pulsout 13, 650 pulsout 12, 650 pause 20 next return turn_right: for pulsec

26、ount = 0 to 20 right turn, about 90-degrees. pulsout 13, 850 pulsout 12, 850 pause 20 next return back_up: back up for pulsecount = 0 to 40 pulsout 13, 650 pulsout 12, 850 pause 20 next return big_cirlce: for pulsecount = 0 to 40 pulsout 13,730 pulsout 12, 790 pause 20 实验四触须避障导航、光敏电阻导航10 next return

27、 small_cirlce: for pulsecount = 0 to 40 pulsout 13,730 pulsout 12,810 pause 20 next return 实验四触须避障导航、光敏电阻导航11 ii 光敏电阻导航一、实验目的利用光敏电阻的特性,测量光强度的差异,并编程控制机器人小车根据光强度的差异做出行动。二、实验仪器设备boe-bot 小车、光敏电阻、 电阻(2 k、220 、1 k、4.7 k) 、电容(0.01uf ) 、导线、手电筒等。注意:电阻 2 k (红 - 黑- 红)电阻 220 (红 - 红- 棕)电阻 1 k (棕 - 黑- 红)电阻 4.7k (

28、黄 - 紫- 红)电容 0.01 f( 103)三、实验内容1.连接并测试光敏电阻电路2.编程使 boe-bot 小车漫游并避开阴影目标,或用阴影导航3.用光敏电阻测试rc放电延时4.用手电筒光束引导机器人小车运动四、实验原理光敏电阻 (硫化镉) 的阻值与光照度成反比关系,即黑暗导致高阻值,明亮导致低阻值。 利用光敏电阻作为光传感器,通过检测不同的光强度,可以识别白与黑边沿、报告明亮和黑暗程度、搜寻光源等。连接光敏电阻传感器测试电路,并与电阻相连构成电压分压器,编程监测光敏电阻与固定阻值电阻连接点的电压。basic stamp i/o 引脚的极限电压为1.4v,当电压下降或上升至 1.4v 时

29、,极限电压连接电路的i/o 引脚的输入寄存器就会存储一个0 或 1。根据这些二进制数值进行判断,为boe-bot 小车导航。五、实验步骤1 连接并测试光敏电阻电路实验四触须避障导航、光敏电阻导航12 连接光敏电阻电路使用不同的电压分压器进行试验每次修改电路前要先断开电路板与电源的连接。用其它电阻逐一代替2k的电阻: 1k、4.7k 。利用程序测试各分压器组合,并判断在现有光照条件下,哪个电阻工作性能最好。性能最好的组合是那个既没有过渡感应,也无须你用手遮住光敏电阻时使用的那个电阻组合。探测阴影被阴影遮住会增大光敏电阻的阻值,导致的vo 值变小。操作步骤:连接电路板至电源。输入、运行程序test

30、photoresistor.bs2。验证在没有阴影时, in6 和 in3 的值都为1,用手遮住某个光敏电阻,相应的存贮值由1 变为 0。示例程序:程序testphotoresistor.bs2 debug photoresistor states, cr, left right, cr, - - do debug crsrxy, 0, 3, p6 = , bin1 in6, p3 = , bin1 in3 pause 100 loop 2 漫游及避开阴影目标,或用阴影引导小车运动漫游及避开阴影目标观察boe-bot 在没有阴影、右边的光敏电阻分压器(连接至p3 的电路)被阴影遮住、 左边的光

31、敏电阻分压器(连接至p6 的电路)、以及两个光敏电阻分压器一齐被阴影遮住时的反应。实验四触须避障导航、光敏电阻导航13 示例程序: 程序roamingwithphotoresistor.bs2 debug program running! 变量pulsecount var byte 初始化freqout 4,2000,3000 主程序do if(in6=0)and(in3=0)then both photoresistors detects gosub back_up shadow,back up & u-turn gosub turn_left (left twice). gosub

32、 turn_left elseif(in6=0)then left photoresistor detects gosub back_up shadow,back up & turn right. gosub turn_right elseif(in3=0)then right photoresistor detects gosub back_up shadow,back up & turn left. gosub turn_left else neither photoresistor detects gosub forward_pulse shadow,apply a fo

33、rward pulse. endif loop 子程序forward_pulse: send a forward pulse. pulsout 12,650 pulsout 13,850 pause 20 return turn_left: left turn,about 90-degrees. for pulsecount=0 to 20 pulsout 12,650 pulsout 13,650 pause 20 next return turn_right: for pulsecount=0 to 20 right turn,about 90-degrees. pulsout 12,85

34、0 pulsout 13,850 pause 20 next return back_up: back up. 实验四触须避障导航、光敏电阻导航14 for pulsecount=0 to 40 pulsout 12,850 pulsout 13,650 pause 20 next return 用阴影导航机器人小车会在光敏电阻分压器没有被阴影遮住的时候保持静止;当你用阴影同时遮住两个光敏电阻的时候它会前进;当只有一个光敏电阻被阴影遮住的时候,它会沿着被遮住的光敏电阻的方向运动。示例程序:程序shadowguided.bs2 do if (in6 = 0) and (in3 = 0) then

35、 pulsout 13, 850 pulsout 12, 650 elseif (in6 = 0) then pulsout 13, 750 pulsout 12, 650 elseif (in3 = 0) then pulsout 13, 850 pulsout 12, 750 else pulsout 13, 750 pulsout 12, 750 endif pause 20 loop 3 用光敏电阻测试rc放电延时连接 rc延时电路实验四触须避障导航、光敏电阻导航15 利用 basic stamp 测量 rc 延时当 p6 发送 1 时,实际上是用5v 电压为电容充电。充电后,电容与光

36、敏电阻形成放电回路,放电时间为rc 。如果光敏电阻的阻值由于光线比较暗而非常大,那么电容放电的时间就比较长。如果光敏电阻的阻值由于表面接受的光照比较强而非常小,电容将很快释放完所有的电荷。测量电容的电压下降至1.4v 所需的间。操作步骤:连接电路板至电源。输入、保存并运行程序。利用阴影遮住连接至p6 的光敏电阻,并观察因为光线变暗而导致所测时间的值不断增大。用天花板上的灯直接照射在光敏电阻的采光表面上,或用手电筒直接照射在上面,所测量的时间应该变得非常小。在下表中记录延时值。示例程序:timeleft var word timeright var word debug photoresisto

37、r values, cr, timeleft timeright, cr, - - do high 6 left rc time measurement. pause 3 rctime 6,1,timeleft high 3 right rc time measurement. pause 3 rctime 3,1,timeright debug crsrxy, 0, 3, dec5 timeleft, 实验四触须避障导航、光敏电阻导航16 , dec5 timeright pause 100 loop 4 用手电筒光束引导机器人小车运动把光敏电阻的采光面指向机器人小车前方的地面。连接电源至电

38、路板、伺服。输入、保存并运行程序。用没有手电筒光下的timeleft 的值(表 7-1)代替 leftambient con 指令中相应的值108。用没有手电筒光束下的timeright 的值代替rightambient con 指令中相应的值114。用使用手电筒光束照射下的timeleft 的值代替leftambient con 指令中相应的值20。用使用手电筒光束照射下的timeright 的值代替rightambient con 指令中相应的值22。把机器人小车放在准备沿手电筒光束行走的地面上。确保它始终连接在串口线上,这样可以在debug terminal 窗口中显示测量结果了。示例程序:程序flashcontrolled.bs2 debug program running! 常数leftambient con 108 rightambient con 114 leftbright con 20 rightbright con 22 leftthreshold con leftbright + leftambient / 2 * 5 / 8 rightthreshold con rightbright + rightambient / 2 * 5 / 8 变量timeleft var word timeright var word 初始化freqout 4,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论