【ch05】選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航_第1頁
【ch05】選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航_第2頁
【ch05】選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航_第3頁
【ch05】選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航_第4頁
【ch05】選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

機(jī)器人程序設(shè)計(C語言)新工科建設(shè)之路·機(jī)器人技術(shù)與應(yīng)用系列選擇結(jié)構(gòu)程序設(shè)計機(jī)器人觸須導(dǎo)航第五章安裝并測試

機(jī)器人觸須01安裝并測試機(jī)器人觸須編程讓機(jī)器人通過觸須導(dǎo)航前,必須先安裝并測試觸須。安裝機(jī)器人觸須所需的硬件元器件如圖5-1所示,包括:①金屬絲(觸須),2根。②平頭M3×5盤頭螺釘,2個。③13mm銅螺柱,2個。④M3尼龍墊圈,2個。⑤3-pin公-公接頭,2個。⑥220Ω電阻,2個。⑦10kQ電阻,2個。安裝并測試機(jī)器人觸須安裝并測試機(jī)器人觸須安裝觸須(1)拆掉連接主板到前支架的兩顆螺釘。(2)參考圖5-2,進(jìn)行下面的操作。(3)23mm銅螺柱穿過主板上的圓孔,擰進(jìn)主板下面的螺柱中,擰緊。(4)兩個螺釘依次穿過M3尼龍墊圈擰進(jìn)銅螺柱中。(5)把須狀金屬絲的其中一個勾在尼龍墊圈之上,另一個勾在尼龍墊圈之下,調(diào)整它們的位置,使它們橫向交叉但不接觸。(6)擰緊螺釘?shù)姐~螺柱上。(7)參考圖5-3,搭建觸須電路。安裝并測試機(jī)器人觸須安裝觸須安裝并測試機(jī)器人觸須測試觸須觀察圖5-3所示的觸須電路示意圖,顯然每條觸須都是一個機(jī)械式的、接地(GND)常開的開關(guān)。觸須接地是因為教學(xué)板外圍的鍍金孔都連接到GND。銅螺柱和螺釘給觸須提供電氣連接。安裝并測試機(jī)器人觸須測試觸須上拉電阻上拉電阻就是與電源相連并起到拉高電平作用的電阻,還起到限流的作用。圖5-3中的10kΩ電阻即為上拉電阻。其實,第3章單燈閃爍控制任務(wù)中就用到了上拉電阻,因為AT89S52的I/O接口驅(qū)動能力不夠強(qiáng),不能使LED點亮。安裝并測試機(jī)器人觸須位操作運算符位操作運算符用于對字節(jié)或字中的位(bit)進(jìn)行測試、置位或移位處理,如表5-1所示。安裝并測試機(jī)器人觸須if語句if語句根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個分支程序段。if語句的基本形式為:if(表達(dá)式)語句1;else語句2;安裝并測試機(jī)器人觸須操作符?:C語言提供了一個可以代替某些“if-else”語句的簡便易用的操作符“?:”。該操作符是三元的,其一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3安裝并測試機(jī)器人觸須操作符?:在搞清楚整個程序的執(zhí)行原理后,按照下面的步驟實際執(zhí)行程序,對觸須進(jìn)行測試。(1)接通教學(xué)板和伺服電機(jī)的電源。(2)輸入、保存并運行程序TestWhiskers.c。(3)這個例程要用到調(diào)試終端,所以當(dāng)程序運行時要確保串口電纜已連接好。(4)檢查圖5-3所示電路,弄清楚哪條觸須是左觸須,哪條是右觸須。(5)注意調(diào)試終端的顯示值,此時顯示為“右邊觸須的狀態(tài):1左邊觸須的狀態(tài):1”,如圖5-6所示。安裝并測試機(jī)器人觸須操作符?:(6)按下右觸須,使其接觸到3-pin轉(zhuǎn)接頭上,顯示為“右邊觸須的狀態(tài):0左邊觸須的狀態(tài):1”,如圖5-7所示。(7)把左觸須接到3-pin轉(zhuǎn)接頭上,顯示為“右邊觸須的狀態(tài):1左邊觸須的狀態(tài):0”,如圖5-8所示。(8)同時把兩個觸須接到各自的3-pin轉(zhuǎn)接頭上,顯示為“右邊觸須的狀態(tài):0左邊觸須的狀態(tài):0”,如圖5-9所示。(9)如果兩個觸須都通過測試,則繼續(xù)下面的內(nèi)容。否則檢查程序或電路中存在的錯誤。安裝并測試機(jī)器人觸須操作符?:安裝并測試機(jī)器人觸須操作符?:通過觸須導(dǎo)航02通過觸須導(dǎo)航編程使機(jī)器人基于觸須導(dǎo)航為了實現(xiàn)這些功能,需要編程讓機(jī)器人來做出選擇,此時要用到if語句的標(biāo)準(zhǔn)形式,即if-else-if形式,它可以進(jìn)行多分支選擇,其一般形式為:if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;elseif(表達(dá)式n-1)語句n-1;語句n;通過觸須導(dǎo)航關(guān)系與邏輯運算符關(guān)系與邏輯運算符概念如表5-2所示,關(guān)鍵是True(真)和Flase(假)。C語言中,非0為True;0為Flase。使用關(guān)系與邏輯運算符的表達(dá)式對Flase和True分別返回值0和1。通過觸須導(dǎo)航關(guān)系與邏輯運算符通過觸須導(dǎo)航關(guān)系與邏輯運算符賦值運算符“=”與關(guān)系運算符“==”賦值運算符“=”用來給變量賦值;關(guān)系運算符“==”判斷兩個值是否是相等的關(guān)系。邏輯與運算符“&&”相當(dāng)于BASIC語言中的AND運算符。邏輯與的運算規(guī)則如下:/若A、B為真,則A&&B為真通過觸須導(dǎo)航關(guān)系與邏輯運算符例程:RoamingWithWhiskers.c(1)打開主板和伺服電機(jī)的電源。(2)輸入、保存并運行程序RoamingWithWhiskers.c。(3)嘗試讓機(jī)器人行走,當(dāng)在其路線上遇到障礙物時,它將后退、旋轉(zhuǎn)并轉(zhuǎn)向另一個方向。#include<BoeBot.h>#include<uart.h>通過觸須導(dǎo)航觸須導(dǎo)航機(jī)器人怎樣行走主程序中的語句首先檢查觸須的狀態(tài)。如果兩個觸須都觸動了,即PI_4state()和P2_3state()都為0,那么調(diào)用Backward(),緊接著調(diào)用Left_Turn()兩次;如果只是右觸須被觸動,即只有P2_3state()=0,那么調(diào)用Backward(),再調(diào)用Left_Turn();如果左觸須被觸動,即只有P1_4state()=0,那么調(diào)用Backward(),再調(diào)用Right_Turn();如果兩個觸須都沒有觸動,那么在else中調(diào)用Forward()語句。機(jī)器人進(jìn)入死區(qū)后的人工智能決策03機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)修改RoamingWithWhiskers.c,讓機(jī)器人碰到上述問題時逃離死區(qū),技巧是記下觸須交替觸動的總次數(shù)。其關(guān)鍵是程序必須記住每個觸須的前一次觸動狀態(tài),并與當(dāng)前觸動狀態(tài)對比。如果狀態(tài)相反,就在交替總數(shù)上加1。機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)條件成立(條件為真),那么檢查包含于這個條件之內(nèi)的另一個條件。下面是用偽代碼說明條件嵌套語句的用法。if(condition1)commandsforcondition1if(condition2)機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)commandsforbothcondition2andconditionlelsecommandsforconditionlbutnotcondition2elsecommandsfornotcondition1機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)例程:EscapingCorners.c本例程使機(jī)器人在第4次或第5次交替探測到墻角后,完成一個U形拐彎,哪一個觸須先被觸動。(1)輸入、保存并運行程序EscapingCorners.c。(2)在機(jī)器人行走時,輪流觸動它的觸須,測試該程序。機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)EscapingCorners.c是如何工作的由于該程序是經(jīng)RoamingWithWhiskers.c修改而來的,下面只討論與探測和逃離墻角相關(guān)的新特征。intcounter=1;intold2=1;intold3=0;機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)三個變量用于探測墻角。int型變量counter用來存儲交替探測的次數(shù)。程序中設(shè)定的交替探測的最大值為4,int型變量old2、old3存儲觸須舊的狀態(tài)值。機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)首先要檢查的是,是否有且只有一根觸須被觸動。簡單的方法就是詢問“是否P1_4state()不等于P2_3state()",判斷語句如下:

if(P1_4state()!=P2_3state())機(jī)器人進(jìn)入死區(qū)后的人工智能決策編程逃離墻角死區(qū)如果發(fā)現(xiàn)觸須連續(xù)4次被觸動,那么計數(shù)值置1,并且進(jìn)行U形拐彎。if(counter>4)counter=1;Backward();LeftTurn();Left_Turn();機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序04機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序continue語句continue的一般形式為:continue;其作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序continue語句利用continue語句編寫的機(jī)器人運動函數(shù)如下:voidMoveWithProtect(intcounter,intPC1_pulseWide,intPC0_pulseWide)inti=0;while(i<counter)if(P1_4state()==0)||(P2_3state()==0))continue;P1_1=1;delay_nus(PCl_pulseWide);P1_1=0;P1_0=1;delay_nus(PCO_pulseWide);P1_0=0;delay_nms(20);i++;}機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序工程素質(zhì)和技能歸納本章涉及的主要技能①接觸型傳感器作為輸入反饋與C51單片機(jī)的編程實現(xiàn)。②C51單片機(jī)并行I/O口的特殊功能寄存器的概念和使用。③C語言條件判斷語句的使用。④C語言各種運算符的使用,包括位運算符、關(guān)系運算符、邏輯運算符及操作符?等。機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序工程素質(zhì)和技能歸納本章涉及的主要技能⑤機(jī)器人的觸覺導(dǎo)航策略的實現(xiàn)。⑥條件判斷語句的嵌套與機(jī)器人的智能決策等。⑦循環(huán)內(nèi)continue語句的使用。機(jī)器人行進(jìn)過程中的碰撞保護(hù)程序工程素質(zhì)和技能歸納在一個邏輯表達(dá)式中如果有多個邏輯運算符,甚至有關(guān)系運算符和算術(shù)運算時,則優(yōu)先次序如下:i.邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低。ii.邏輯與和邏輯或低于關(guān)系運算符,邏輯非高于算術(shù)運算符,即按照優(yōu)先級從高到低的順序是邏輯非高于算術(shù)運算符,算術(shù)運算符高于關(guān)系運算符,關(guān)系運算符高于邏輯與和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論