资源描述
人来完成。而在机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。我们的自动避障小车就是基于这一系统开发而成的。于未知空间和人类所不能直接到达的地域的探索逐步成为热门,:Vr V意义随着科技的发展,对这就使机器人的自动避障有了重大的意义。t w r . s. r t. r r t、r r - rrrr t 一 咅 b /_ r a ia r -成员情况本组三位成员均为 2005级基地班学生,FTiBb ITA小车从无障碍地区启动前进,感应前进路线上的障碍物后,根据障碍物的位置选择下一步行进方向。并可通过两个独立按键对小车进行控速*LLII*(如右图所示)。小车在行进过程中由光电开关向前方发射岀红外线,当红外线遇到障碍物时发生漫反射,信号的情况来判断前方障碍物的分布并做出相应的动反射光被光电开关接fc*h*作。光电开关的平均探测距离为,收。小车根据三个光电开关:30cm 。ATT3、模块方案比较及论证ILLII主控a块廉软件模块) 書驚? 主控芯片探測模块) 光电开关组独立按*方案一:自己设计制作车架在设计车体框架时,我们有两套起始方案,自己制作和直接购买玩具电动车。依靠前轮电机带动前轮转向完成,精度低。FT考虑到利用玩.心用优良的算法来弥补,故我们选择方案二。左埶左后自己制作小转、右后转、倒车等动作。减速电机扭矩大,转速较慢易于控制和调速,符合避障小车的耍求。而且自己制作小车框架,可以根据电路板及传案方案二:具电动车制作周期较长,且费用较高,因而我们.玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是我们所需的,缩短了开发周期。K zjSN 卫、 六但玩具电动车采用普通直流电机驱动,带负载能力差,调速方面对程序要求较高。同时,玩具电动车转向/ VJf MM/ VJf M/ , Jf I:具电动小车做车架开发周期短,可留够充分的时间用于系统调试,且硬件上的不足我们有信 vjff VW vjff VnI4-A*-IIIILII但由于需要电线对小II方案二Lk他逻辑单元供II715VLLVL低电池:6V压接一个QdTTTI直流电机供电I光电币关供电ffIJJ起9Vi电源VI同时,由于 mega16综合考虑,我们采用方案三course project ,我们直接选用了课程主要介绍的,机及其他逻辑单元供电,另取六节供电。而电机和光电h上h之并不苛刻,故我们将的勺电源不做稳压处理。这样给电机供电.方案三:采用干电池组进行供电电池为电机及电线识别为障碍物,人为增加了不必要的障碍以安装四节干电池故我们放弃了这一方案。蓄电池具有较强的电流驱动能力和较好的电压稳定性能,且成本低廉。可采用蓄电池经3.3主控模块始时考虑使用7805芯片对6V的电池电压进行降压稳压。但考虑到这样使得7805采用交流电提供直流稳压电源,电流驱动能力及供电,极大影响了壁障小车行动的灵活性及地形的适应能力*LIl重量较小,同V I经过降压接 7805芯片给单片机作为单片机原理与接口技术课程的而且壁障小车极易把拖在地上的采用四节样电机启动及制动时的短暂电压干扰不会影响到逻辑单元和单片机的工作。干电池用电池盒封装,体积和Tht芯片消耗大量能量,降稳定性最好,且负载对电源影响也最小。且重量过7812芯片稳压后3.2电源及稳压模块方案一:采用交流电经直流稳压处理后供电只需在小车主板上加两个调速按钮,根据电池电量选择合适功率即可,甚至于可直接在软件里设置自动换 挡。ff V科亠 7W V科亠 7久护* vW V耳 *采用Mega16L作为主控芯片,采用E3F-DS30C47Q用单片机的使能端,方便*L-昭经过测量,一般四节新南孚电池串联带负载后可提供 5.8V电压。经过二极管稳压至5.15.2VTA后给逻辑器AP1-5.3V件供电并给系统提供高电平标准。4/使用Mega 16L的PBOPB2接经过电平转换的探测器信号线,实现对障碍物信息的采集。PC1接受独立按键信号,实现对小车行进过程中速度的控制。由于我们小车电机A/ 1使用 Mega 16L 的 PCO、 r -幺幺电源没有经过稳压,随着电池电量的消耗,电机电池组的电压逐渐降低,因而小车速度会发生变化。我们mXi FT,i就可以通过独立按键对忆 T *n , *.速度进行提前设定,使得即使电池组电量变化,小车也能按预定速度行进5使用Mega 16L的PD2、PD3接收中断信息。在软件部分我们可以看到,Tr的 INTO,V31接地。,即PD2并没有使用。使用引脚10为单片机供电,引脚随着程序的不断完善,最终我们7 “Figure 1. ATmega16 的引腰(XCK/TO) PBO 匸(T1) PB1 匚(INT2/A1N0J PB2 匚 (OCO/AJN1J PB3 匚 JPB4CMOSn PB5 匚PB6 C (SCK) PB7 匚 RESET 匚VCC CGND匚XTAL2 CXTAL1 匚(RXD) PtXl 匚(TXDJ PD1 匚 (INTO) PD2 匚 (INT1J PD3 匚 (OC1B PD4 匚 (OC1AJ PD5 匚 (ICP1) PD6 匚O1234567B&C12 3 4 5 8 7 B 9 1 1111111112Dfp0987664321 o*va7B5432143333333233222222 222nnnnnnnnnnnnnnnrmnnnPAO (ADCO) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PAS (ADC5) PA6 (ADC6) FV7 (ADC7) AREFGNDAVCCPC7 (TOSC2J PC6 (TOSC1J PCS (TDI) PC4 (TOO) PCS (TMS) PC2 (TCK) PC1 (SDA)PCD (SCLPD7 (OC2)我们还是给以阐释)。所述,最终我们用定时器中断代替了这个外部中断, 但作为硬件设计和焊接的一部分, 两个独立按键分别控制提速和减速,没有按下时一一一亠,F 亠一亠一 电平,同时给出一个低电平给 INT1。任务实现:i ”W-,信号线给岀高电平。当任意一键按下时,信号线给岀低J * c r * 我们用74HC08的一卡1 、第一个任务的实现原本想采用三输入或非门甲丁 - /74HC27 实现。*3/T:1 JJTT第二个任务逻辑的实现使用任务逻辑X按键与逻辑高电平(I 4F1XJTTVLII光电开餐组*kTiM1742T任务实现rfT回的信号是非标发射极电压小于+5V反1i_ V hi变化。若前方有障碍物2.光电* L1.光电TE h 7将光电开关传回的非标准的开关电平信号转换成这对于 Mega16芯片是不适用的。T设计任务:I寸出的红外线在经障碍物漫反射后会由光电开关再接则光电开关传回低电平;若前方无障碍物但这并不影响前方障碍物的探测。型光电开关传回的电平I个 5K1的电阻上拉,使输出的高0。这样输出电平已经转化为 CMOS标准电平。不过,这N h1*10K1:-:的变化可以实现对前方障碍物的探测。p-f豐 bCMOS标准电平(即将 09V转换成05V)8050三极管来实现电平的转换。由三极管的电气特性,当其基极为低电平时,即基极T时传回到Mega16的电平信号已经和原来光电攵到,这会引则光电开关传回的是高电平。有电平导通压降,其输岀电平为高电平,在其输岀端有 极为高电平时,三极管发射极正偏,输出电平为lULI电机驱动模块的电路图DIOIvLLI6vIviLL4148T4k4148QTOVOA*4148414S+5Vj关闭时泄流之用nTA控制转向电制其实现前进对于后置电量不1OCO)连接T7IL?9fi ,WL298N芯片的SENSOLT4 0UT3 DWENBINS 再安+5VCKD ECENA IN;VSS 0LT2 OLT: SEsA电机驱动模块主要功能是将主控芯片发岀的信号通/irp _ 1 /If1 _ 1 /Itocryoury7?ZTVOUT/頁过L298N由于我们足而产生的小车变慢的问题。所以,我们将HIM动电机,我们不仅:电机控制芯片转化为小车实际的动作。雅L298N芯片有两个电源引脚 VDD引脚和VCC引脚。VDD弓I脚接+9V电源用来给电机供电,VCC弓I脚接15L298N芯片通过一个有四个 4148二极管组成的保护电路与电机相连,保护电路主要是用来在电机开启和吕退和停止,还要能够控制其转速以解-*vHENB引脚与 Mega16的PB3引脚机的输岀功率,所以 ENA引脚(即转向电机使能引脚)直接接+5 V,即让转向电机一直使能。Al /QA1 /QAI ?功率使能从而获得最大的扭矩,保证小车转向成功,而不用来实现PWM调速。T,驱动模块尔LTJlJU brJiIbILVtIT后退Vv1LLLLIIILI所用全部硬件资源2TATMega 16L/32LLLLLLLLL2983只8IL5K1电阻散热(12)UU(13)40(15)y7*T目前程TA,*L,和调试过程VHTJ单片机1片.机驱动芯片1片的PA3和PA2引脚连接用来接收主控芯片输岀的驱动电机J* L四、程序简版JTAG仿真器(程序的下载和仿真)7TLr和PA0引脚连接用来接收主控芯片输岀的转向电的动作指令,并通过 0UT1和0UT2来控制转向电机的正转与反转,最终功能的实现表现在小车的左转与宁的IN1和NT0中断触发LJ1F检测传感器端口的反馈值1fTTTTTTTT的,不能根据环境自动调整,前进后退都太冲;因为动作都是用延时函数实现的,动作中要禁用全局中断,导致发现障TjT发现前方有大障碍(111):发现右方有大障碍(110 ):后退并右转;交大的后退并右转发现左方有大障碍(011 ):后退并左转;发现两边有障碍但中间无障碍T 101):较大的后退并右转;按照这样常常一头撞上去:后退态,经常撞上后面的物体。碍物不及时,时动作无法调整,即使已经避开了障碍物还是无法及时转换成前进状巳整,鉴于以上发现的问题,我们又修改写成了第二版程序,流程图与第一版大致 相同,所不同的r &反馈值,然后根据反馈值选择下一步动作。也就是说,理函数形成了循环,循环的唯一岀口在前进函数里,只有可的是每次动作的时间都被改得非常短(约几个毫秒),在每个动作结束后都在此检测探测器8个动作函数(加了一个前进)和一个 INTO中断处已无障碍物时才能退nr vn vnr vn 器 Vnr v望通过缩短每次动作的时间、缩短两次探测之间的间隔时间来达到变行进边探测效果,使小车的动作更加检测到前方断。我们希?TF灵敏。1.2miT1r01I前方无障碍物前方有障碍物L仃障/L刖进1/等待下次中断触发7种)断端口值但随之而来又出现了新TTT检测判断端口侑T个动作函数中选择一个执行h V iff V v障碍物情况很拡检测別的障碍物怙况(分7种)*从7个动作函数中选择一个执疔有障碍 无障碍INTO中断触发 端口值是多少?检测传感器端口的反馈值前方有障碍物 根据检测到的等待下次中断触发 t卜 * TV 对于这一版程序,我们在调试过程中发现小车四处乱撞的问题已经基本能解决了端I r俏足 多少?前方无障碍物检测判INTO 中1断触发1r检测传感器端口的反馈價1L问题的具VILI改为用触发溢岀T1LI1III4LLT4T4前方无障碍物前方仃障円物I等待下次中断触发T1T端口俏足 多少?体表现为:端口值有规律根掘检测到的陽碍物情况(分 7种),从7个动作函效中选择 一个执行有一个动作,动作完成后不再1.3第三版程序的主流程图:等待下次中断再修改控制端口值。(分 7同时节省CPU时间,我们对程序进行了较大调整 中进行检测和行动。iflr ;地闪动,大约0.2秒闪一次,出现一个极短的脉冲,其值恰好是 前进TA因造成了这种现象,是退岀中断服务程序时的一个脉冲。IlA* LIITH前进和转向的端Tr溢岀中断 端口值是多少? 检测传感器端口的反馈值 前方有障碍物 根据检测到的障碍物情况为了解决端口电平不稳定的问题,也为了定时更加准确 金器来控制动作和检测。这时的行动只是改变控制端口值,不需要延时函数,这就大大节约了 CPU时间。每个动作函数都精简到只r1T1溢出中斷1检测传感器端口的反惯值1FfLLLI1种)另外在启I自动变速INT1LI在测试中I畅了许多71LLVvLLLLL第四版程序中新增添了防卡死机实现1.4LL!Vn1VirnVII*T7,r IkIkT1 Jv4 i动作,从Jl j VJl j VhV “_L为了解决这个问题,我们在第 制,结合定时器控制和延时函寻物Zu%比较慢,没;V .而卡死。后退,后退到光常灵敏,能1 .V我们发现这样的改变收到了良好的效果。小等待下次不过,在测试中我们还是发现了新的问题:小车在碰上前方的障*L击、&2/“二,、&kh. . |lhIt障碍的地方改变方向前进,这是程序设计的动作;但是如果小车在光电开关检测距离阈值的地方正好速度连续动作的进行时间,由程序* L第四版程序的主流程图动和制动时给小车较大的动力能够保证小车在改变方向时有足够的1/X1夕j J7个动作函数中选从这一流程图可以看出的速度不再由各个动作函数直接指定,而是通过计算一个. TA Z .的OCRO值。这样做主要是为了配合小车的启动和制动,tLIl在前方障碍物的检测和避过上已经,U 丁亠即 ff V在随意放置的障碍物阵中迅速找到前进的路线穿过阵列。由于加上了自动变速程序,小车的动作也变得流J*,亠riJ*,亠riJ*断触发我们尽可能的精简了小车的动作过程而在一般行进时使用普通功率,这样就可以既有效的控制小车的速度,又 E们还修改丨两个按键的功能,不再是控制起始速度,而是控制普通行进时的速度,使这两个控制按键更加实用。使得整个判断处理过程简洁而迅速。1eVEl*TJ LrJt4/端口值是多少?询力无障碍物T1溢出中断记录上一次釣动作持续时间检测传感器端口的反馈(311前方有障倚物根据检测到的障筒物帖况(分 7种人从7个动作函数中选择 个执行T1等待下次中断触发溢岀中断端口值是多少?反馈值种),从否卡死?7个动作函数中选择一个执行等待 I执行卡死 处理函数 清空历史记录 否是次中断触发执行卡死 处理函数清空历史记录前方有障碍物根据检测到前方无障碍物记录上(分 7次的动作持续时间是寻物情况ILI寸是一个有7t8次动作中有7次以上持续时间在V中间没有时LLI行从障碍物中间穿过比较灵敏了IIL此外有两函数。fLLLLILLI*共有J,r IkTO定时:timerO_init();PINB端口值判断前方障碍物情况。I勺问题,小车对OCRO1LLAisr_timerO_isr_INTO();mid_power个辅助软件3L期间禁用了T17种设定的障碍物情况,详T相关函数:从启动开始,利用变量防卡死机制有效地解决了小车程序设计了 3挡自动调速探测到障碍物需要障碍探测模块:如前所述,通过读取T0.4秒以下,就认为小车被卡住了,这时执行卡死处理函数,让小车退岀卡死区域。LjV1 Ljd* IlL障碍物的躲避也行进方向 ymid_power 值加1卡死处理函数使用了延ax_power, fast_poWer,间,使用最大功率连续前进或后退0.3秒以克服摩擦阻力,接下来 0.3秒时用较大功率,以后使用普通功I/n时重新计时。通过两个独立按键可以调整普通功率 q视障碍物情况执行1-3次倒退转向动作。此外我们改变了一个动作函数yrixl穴1气1穴VXI孑相关函数:- 1作为小车周期性探测和动作的时钟。,片f定时器产生0.1秒间隔的溢岀中断每次行进方向改变,即由后退转为前进或由前进转为后退时率。其间如果:V直计算按键的时间,每个时间单位count moVe来计算连续行动的时这一版程序为我们小车的最终定型程序。set_OCRO()trap_handler();delay100us(n); fjdelay10ms(n);动作历史记录队列为基础的s亠timer1_init();.Iisr_timer1_ovf(); y/Tl|histoid,Hr *PWM波形来控制驱动电机的输出功率。F1程序模块构成J 1系统时钟模块:通过T1亍h *7718个元素的数组个八即认为一次连续动作结束,记录这个动作的1IIIIAtII常规动作模块:1V10LLIrVLI110LLLhistory 8LL曰./若有改变则历动V1相关函数Itrap_handler();V*且保刍f相关函数:V下(括号内现端口值不稳定的问题,该函数使用100(A JLa jL每次T1move_front_bigobj()V I)3次T在行进中对障碍* Ik相关函数:T1定时器,这样设计是因为软件延时对时间间隔的控制更为灵活。为了防止像以前版本中的软件延时动作73层嵌套判断结构)8次连续动作所经过的时间。初始值都设定为HrI111):较大的后退并右转说明小车在(通过 isforward变量标志)isr timer1 ovf()_別足以使小车退到安全区域move_front_obj()史记录自动清空为初始状态。%L%Lmove_right_obj()move_left_obj()函数一样判断,若中间有一次探测发现障碍物消失,则退岀函数继续执行常规动作。这样就可以使函数的最大动作 动作的流畅性。record_history();发现右方有小障碍(100 ):前进并左转VV 乂If V发现左方有小障碍(001 ):前进并右转“7/ - &7/*发现前方有小障碍(010):后退并右转阈值的位置上且一 LtJ*1 L*dB1 ktJ01等于4 (连续动作持续时间小于或等于0.4秒),则变量recorder加1;若最终recorder值大于或等于 7卖多次改变了行进方向,则认为小车处在探根据障碍探测模块的返回值,由8个动作函数控制小车的各种动作。修改后的动作列表如THAI E发现两边有障碍时间达到0.9秒history数组的各个元素值行卡死处理函数trap_handler()。trap_handler()是一个使用软件延时作为计时方法的函数,执行期间禁用isr_timer1 ovf( trap_handler();进穿过;(move_double_obj() i/V其值代表之前后退并右转;(move_rjght_bigobj()“发现左方有大障碍(011 ):后退并左转;(move_left_bigobj()V_LFlTf r1、系统实现功能:AA对于前方任意放置的障碍物的灵活规避;3档自动变速;正常行进速度的手动连续调节;防卡死机制,可以有效地退岀夹缝、通过在小车前方摆放不同颜色的障碍物来测试小车的制动距离。该项测量在小车行进中进行。“ T1 匕T2、系统主要参数测试:角落等区域。给光电开关供电,前侧放置不同颜色障碍物,通过尾部指示灯观察探测距离。浅色:30cm深色:20cm韦 1八;L
展开阅读全文