足球機(jī)器人比賽踢球方案_第1頁(yè)
足球機(jī)器人比賽踢球方案_第2頁(yè)
足球機(jī)器人比賽踢球方案_第3頁(yè)
足球機(jī)器人比賽踢球方案_第4頁(yè)
足球機(jī)器人比賽踢球方案_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 18足球進(jìn)攻方案敬告讀者 !本方案僅為用戶參加類似機(jī)器人競(jìng)賽項(xiàng)目提供參考指導(dǎo),廣州中鳴數(shù)碼科技 有限公司強(qiáng)烈建議用戶不要采用完全一致的搭建及程序參與競(jìng)賽,其原因如下: 1. 本方案旨在提高用戶在參與機(jī)器人競(jìng)賽項(xiàng)目的起點(diǎn)水平,但并不希望因此 而扼殺參賽者的主動(dòng)性及創(chuàng)作力,也不希望因此而違背機(jī)器人競(jìng)賽活動(dòng)對(duì)青 少年的教育意義。2. 本方案僅適用及受限制于某一特定的競(jìng)賽規(guī)則,參賽者應(yīng)在充分理解要參 與競(jìng)賽的規(guī)則前提下,參考本方案的基礎(chǔ)上完成自己的設(shè)計(jì)。3. 幾乎所有的機(jī)器人競(jìng)賽都要求參賽者親身設(shè)計(jì),并能在競(jìng)賽現(xiàn)場(chǎng)獨(dú)立調(diào)試 及向評(píng)委講解設(shè)計(jì)思路,故參賽者應(yīng)通過對(duì)方案的深刻了解及日常訓(xùn)練使具 有隨機(jī)應(yīng)

2、變之能力。5. 本方案未經(jīng)長(zhǎng)時(shí)間的驗(yàn)證和實(shí)施,也未能發(fā)揮器材之極限性能,廣州中鳴 數(shù)碼科技有限公司并不能保證該方案完美無缺,用戶應(yīng)該通過親身實(shí)踐去驗(yàn) 證和改進(jìn),并從中學(xué)習(xí)相關(guān)的知識(shí)和獲取相關(guān)的經(jīng)驗(yàn)。在使用進(jìn)攻程序之前,請(qǐng)細(xì)讀本方案! 一、 前言 .3二、 任務(wù) .3三、 策略分析 .31、 找球 .32、 烏龍球處理 .33、 死球處理 .34、 追球 .35、 擊球 .46、 流程圖 .4 四、 程序說明 .51、 主程序說明 .52、 需要輸入的子程序參數(shù) .6<1>、 checkDeath(.6<2>、 ballHandle(.6<3>、 findBa

3、ll(.6<4>、 comeORback(.7 五、 模塊說明 .71、 checkDeath(.72、 ballHandle(.83、 findBall(.104、 comeORback(.125、 returnOut(.136、 turnAngle(.137、 angle(.168、 turn(.16六、 進(jìn)攻算法 .16七、 調(diào)試 .191、 馬達(dá)調(diào)試 .192、 硬件調(diào)試 .193、 轉(zhuǎn)絕對(duì)角度調(diào)試 .19 八、 常見問題分析 .201、超聲測(cè)距模塊讀數(shù)不準(zhǔn)確。 .202、死球的時(shí)間過長(zhǎng)或角度過小。 .203、向左或向右擊球的弧度過大或過小。 .204、烏龍球處理程序中的轉(zhuǎn)

4、彎弧度不夠。 .215、在追球時(shí)會(huì)過沖或是太飄。 .21 九、 方案擴(kuò)展 .221、 可擴(kuò)展為22和30的進(jìn)攻方案。 .222、 可以進(jìn)一步優(yōu)化。 .233、 可擴(kuò)展既可攻又可守的方案 .234、 可用程序選擇器。 .24 一、 前言本方案只針對(duì)18足球進(jìn)攻機(jī)器人的, 是一個(gè)比較簡(jiǎn)單的進(jìn)攻方案。 本方案用到的傳感 器也很少,只用到了指南針、復(fù)眼模塊和超聲測(cè)距模塊,而灰度測(cè)量模塊、觸碰模塊則沒有 用到, 有興趣的讀者不妨加入試一下, 看其效果如何。 本方案雖然是在總結(jié)以前方案的不足 和優(yōu)點(diǎn)及編者的一些經(jīng)驗(yàn)和想法的基礎(chǔ)上, 進(jìn)行了較大的改進(jìn), 不過大致的策略和實(shí)現(xiàn)方法 都和以前的方案相類似,因此,

5、在看本方案之前,請(qǐng)參考 06年的進(jìn)攻方案。在機(jī)器人足球比賽中, 高手林立, 各類機(jī)器人風(fēng)格各異, 形態(tài)萬(wàn)千, 各種技術(shù)層出不窮, 本方案只是提供用本公司標(biāo)準(zhǔn)器材搭建足球機(jī)器人的例程,希望起到一種拋磚引玉的作用 , 留給讀者拓展的空間。二、 任務(wù)足球進(jìn)攻機(jī)器人, 其任務(wù)就是把足球踢進(jìn)對(duì)方的球門。 首先要找球, 找到球后還要 判斷球的方向,在識(shí)別敵我雙方方向后才能踢球,否則就會(huì)進(jìn)烏龍球了。三、 策略分析首先我們把機(jī)器人要完成的任務(wù)拆分為以下幾個(gè)部分:1、 找球機(jī)器人用復(fù)眼找球非常的準(zhǔn),當(dāng)機(jī)器人在已方或敵方半場(chǎng)時(shí),其復(fù)眼所有通道都 沒有發(fā)現(xiàn)球,就要跑到另一半場(chǎng)找球,這樣就可以避免當(dāng)設(shè)定看球的閥值很小

6、時(shí)機(jī) 器人會(huì)亂跑或當(dāng)設(shè)定看球的閥值過大時(shí)遠(yuǎn)處的球就會(huì)看不到的問題。2、 烏龍球處理當(dāng)找到球后,機(jī)器人要識(shí)別球的方向,如果是向著已方球門的方向,就不能立即 踢球了,如果踢的話就烏龍球了。因此,機(jī)器人要轉(zhuǎn)到球的后面去踢球,轉(zhuǎn)到球的 后面,如果球離場(chǎng)邊太近,機(jī)器人就不能往離場(chǎng)邊近的方向轉(zhuǎn)了,不然就會(huì)撞到場(chǎng) 邊的墻壁而轉(zhuǎn)不了, 而距離測(cè)量模塊就可以知道機(jī)器人是離左邊場(chǎng)的墻壁近還是離 右邊場(chǎng)的墻壁近了。3、 死球處理機(jī)器人在踢球過程序中,可能會(huì)出現(xiàn)各種情況,比如說:球在四角被卡死了,怎 么辦呢?如果機(jī)器人在最大的時(shí)間里,其角度差小于 15度時(shí),那么就說明球被卡死或 是機(jī)器人被卡死, 可具體卡在哪個(gè)角落,

7、 用角度傳感器來判別, 而采取相應(yīng)的處理策略。4、 追球以前的方法是用機(jī)器人的復(fù)眼找球,當(dāng) 1、 2、 3號(hào)通道看到球時(shí),機(jī)器人的左輪 不動(dòng),右輪正轉(zhuǎn),機(jī)器人向左邊運(yùn)動(dòng),當(dāng)復(fù)眼的 5、 6、 7號(hào)通道看球時(shí),機(jī)器人的右動(dòng) 不動(dòng),左輪正轉(zhuǎn),機(jī)器人向右動(dòng)運(yùn)動(dòng),當(dāng)復(fù)眼的 4號(hào)通道看到球時(shí),機(jī)器人的左、右輪 同速正轉(zhuǎn),機(jī)器人就朝著球的方向運(yùn)動(dòng),達(dá)到找球的目地。 在真正的比賽時(shí),會(huì)發(fā)現(xiàn),其中存在一個(gè)問題,那就是機(jī)器人的反應(yīng)速度比較慢,在實(shí) 戰(zhàn)中,速度放在第一位,分秒決定勝負(fù)。到底是慢在哪里?仔細(xì)分析,我們可以知道, 當(dāng)球的方向是在機(jī)器人的左邊或右邊時(shí), 機(jī)器人要調(diào)整方向采用了一邊輪子不動(dòng), 一邊 輪子正

8、轉(zhuǎn)的方式, 可以看出, 這是導(dǎo)至機(jī)器人反映慢的原因。 我們可以采取一邊正轉(zhuǎn)一 邊反轉(zhuǎn)的方法,使機(jī)器人正對(duì)著足球,然后全速直沖過去,這樣的速度就會(huì)快很多。但 這樣也會(huì)存在一個(gè)問題, 那就是在離球的距離近的時(shí)候會(huì)容易過沖, 因此要分階段處理, 當(dāng)離球比較遠(yuǎn)的時(shí)候,可采用響應(yīng)快的程序,離球較近時(shí)候則采用響應(yīng)慢的程序。5、 擊球?yàn)榱四茏寵C(jī)器人更好的進(jìn)攻,可把球場(chǎng)分為三個(gè)區(qū)(讀者可根據(jù)自己的實(shí)際把 球場(chǎng)分區(qū) ,機(jī)器人在不同的區(qū)域就可以采用不同的進(jìn)攻策略。怎樣才能分區(qū)域呢?可 采用超聲測(cè)距模塊。 球場(chǎng)的情況是變化的, 超聲測(cè)距模塊只能提供場(chǎng)上的大概位置, 不 能為機(jī)器人提供精確的位置。機(jī)器人在追球的過程中

9、,其角度為 0度、 90度、 180度、 270度的概率不小,因 此可設(shè)八個(gè)全局變量。當(dāng)機(jī)器人的角度為 0度或 90度、 180度或 270度時(shí),就讀取超 聲測(cè)距模塊的值,并把其變量值存貯到全局變量中。當(dāng)機(jī)器人離球較近時(shí),讀取全局變量的值,并判斷機(jī)器人大概在球場(chǎng)上的位置, 進(jìn)而采取相應(yīng)的策略。詳細(xì)說明請(qǐng)參考下面的進(jìn)攻算法說明。6、 流程圖根據(jù)上面的說明,可得到以下的流程圖: 四、 程序說明1、 主程序說明 第一行:設(shè)系統(tǒng)時(shí)間為 0,全局變量初始化;第二、 三行:如果裝在機(jī)器人前面的復(fù)眼模塊檢測(cè)到球, 而且當(dāng)前復(fù)眼通道的值大于 遠(yuǎn)距離的光值或者當(dāng)前復(fù)眼通道的最大值減去當(dāng)前復(fù)眼通道的最小值大于設(shè)定

10、的光值 時(shí), 機(jī)器人就會(huì)認(rèn)為此方向上有球。 若機(jī)器人在最大的時(shí)間里, 其角度差小于 15度時(shí), 檢測(cè)機(jī)器人當(dāng)前角度,機(jī)器人當(dāng)前角度大于 180度,向右拋,否則向左拋;若當(dāng)機(jī)器人 在最大的時(shí)間里,其角度差大于 15度,檢測(cè)機(jī)器人當(dāng)前角度、復(fù)眼的光值;第四行:當(dāng)復(fù)眼的第三個(gè)通道號(hào)檢測(cè)到光值大于等于 240或是復(fù)眼的第四、 第五個(gè)通 道號(hào)檢測(cè)到的光值也大于等于 240時(shí), 說明球離機(jī)器人很近, 讀取機(jī)器人當(dāng)前角度, 執(zhí) 行擊球程序;第五、六行:當(dāng)機(jī)器人當(dāng)前的角度在 80度到 100度之間時(shí),讀取超聲測(cè)距模塊的返 回值, 如果當(dāng)前左超聲測(cè)距模塊的返回值與存儲(chǔ)超聲測(cè)距模塊返回值的全局變量的差值 大于一定

11、值或是裝在機(jī)器人后面的超聲測(cè)距模塊的返回值大于一定值時(shí),就向左擊球, 否則,則把當(dāng)前左超聲測(cè)距模塊的返回值存儲(chǔ)到全局變量中,并跳出 while(循環(huán); 第七、 八行:當(dāng)機(jī)器人當(dāng)前的角度值在 260度到 280度之間時(shí), 讀取超聲測(cè)距模塊的 返回值, 如果當(dāng)前左超聲測(cè)距模塊的返回值大于一定值, 而且當(dāng)前裝在機(jī)器人后面的超 聲測(cè)距模塊的返回值也大于一定值時(shí),就向右擊球,否則,則跳出 while(循環(huán); 第九行:機(jī)器人當(dāng)前的角度都不在以上的范圍,跳出 while(循環(huán);第十、十一行:讀取當(dāng)前指南針、復(fù)眼通道號(hào)的返回值,當(dāng)機(jī)器人離球較過時(shí)且球是 朝已方球門時(shí),執(zhí)行烏龍球處理程序,否則進(jìn)入追球子程序;第

12、十二行:如果裝在機(jī)器人前面的復(fù)眼模塊檢測(cè)不到球,則到另一半場(chǎng)找球。2、 需要輸入的子程序參數(shù)<1>、 checkDeath(作用:檢測(cè)機(jī)器人當(dāng)前的角度差在最大的時(shí)間里是否大于一定的角度 degree (可自定義 ,若小于則說明機(jī)器人卡死在球場(chǎng)某個(gè)位置,若大于則說明機(jī)器人不 是被卡死。子程序包括需要現(xiàn)場(chǎng)測(cè)定的參數(shù) angle 這一個(gè)參數(shù)。 詳細(xì)說明請(qǐng)看后面 的模塊說明。參數(shù)說明:degree:機(jī)器人在最大的時(shí)間內(nèi)的角度差值。<2>、 ballHandle(作用:烏龍球處理。 子程序包括需要現(xiàn)場(chǎng)測(cè)定的參數(shù)如下 distance 、 yfy 、 jGuan 、 leftDis

13、tance 、 rightDistance 這五個(gè)參數(shù)。 詳細(xì)說明請(qǐng)看后面的模塊說明。參數(shù)說明:distance :機(jī)器人與球門的距離,機(jī)器人的方向是 180度,朝已方的;leftDistance:機(jī)器人與左邊場(chǎng)地的距離;rightDistance:機(jī)器人與右邊場(chǎng)地的距離;yfy :當(dāng)前復(fù)眼通道的遠(yuǎn)距離光值,小于此設(shè)定值,機(jī)器人就會(huì)認(rèn)為是此方向上 無球;jGuan :當(dāng)前復(fù)眼通道的近距離光值,其主要是用在機(jī)器人在轉(zhuǎn)完弧度后與球距 離較近的光值,因此它比 findBall(子程序中的 jGuan 參數(shù)要大。<3>、 findBall(作用:追球。子程序包括需要現(xiàn)場(chǎng)測(cè)定的參數(shù)如下 jG

14、uan 這個(gè)參數(shù), 詳細(xì)說 明請(qǐng)看后面的模塊說明。 參數(shù)說明;jGuan :當(dāng)前復(fù)眼通道的近距離光值。<4>、 comeORback(作用:當(dāng)在前半場(chǎng)找不到球時(shí),就到另一半場(chǎng)找球,子程序包括需要現(xiàn)場(chǎng)測(cè)定的參數(shù)如下 distance 、 backDistance 、 yfy 、 time 這四個(gè)參數(shù),詳細(xì)說明請(qǐng)看后面的模塊說明。參數(shù)說明:distance :球場(chǎng)中央的距離,若裝在機(jī)器人后面的超聲測(cè)距模塊檢測(cè)到的值比distance 小,那說明機(jī)器人還沒有過半場(chǎng);backDistance :機(jī)器人過半場(chǎng)的距離;time :機(jī)器人過半場(chǎng)的時(shí)間;yfy :當(dāng)前復(fù)眼通道的遠(yuǎn)距離光值,小于此設(shè)

15、定值,機(jī)器人就會(huì)認(rèn)為是此方向上無球;五、 模塊說明1、 checkDeath(圖標(biāo): 作用:檢測(cè)機(jī)器人當(dāng)前的角度差在最大的時(shí)間里是否小于一定的角度 degree (可自定義 ,若小于則說明機(jī)器人卡死在球場(chǎng)某個(gè)位置,若大于則機(jī)器人不是被卡死。流程圖: 程序詳細(xì)說明: 參數(shù)說明:beginDeathHeading:全局變量,其存儲(chǔ)上一循環(huán)時(shí)的角度,也就是剛卡死時(shí)的 角度;beginDeathTime:全局變量, 其存儲(chǔ)上一循環(huán)時(shí)的時(shí)間, 也就是剛卡死時(shí)的時(shí)間; b :當(dāng)前的指南針返回值;t :當(dāng)前的系統(tǒng)時(shí)間;degree:角度差值。分別讀取當(dāng)前角度與系統(tǒng)時(shí)間,如果 beginDeathHeadin

16、g 與 b 的絕對(duì)值小于 degree ,而且 beginDeathTime 與 t 的差值大于 2.5秒時(shí),說明機(jī)器人被卡死或是球 被卡死,那么就返回 1,若 beginDeathTime 與 t 的差值不大于 2.5秒則返回 0;如果 beginDeathHeading 與 b 的絕對(duì)值比 degree 大, 那么就把當(dāng)前的系統(tǒng)時(shí)間 t 賦予給全 局 變 量 beginDeathTime , 當(dāng) 前 的 指 南 針 返 回 值 b 也 賦 予 給 全 局 變 量 beginDeathHeading ,然后就返回 0。2、 ballHandle(圖標(biāo):作用:烏龍球處理。 程序詳細(xì)說明: 參數(shù)

17、說明:distance_middle:裝在機(jī)器人后面的超聲波測(cè)距模塊的返回變量值;distance_left:裝在機(jī)器人左面的超聲波測(cè)距模塊的返回變量值;distance :機(jī)器人與球門的距離,機(jī)器人的方向是 180度,朝已方,讀者需實(shí)測(cè); leftDistance :機(jī)器人與左邊場(chǎng)地的距離,讀者需實(shí)測(cè);rightDistance :機(jī)器人與右邊場(chǎng)地的距離,讀者需實(shí)測(cè);yfy :當(dāng)前復(fù)眼通道的遠(yuǎn)距離光值, 小于此設(shè)定值, 機(jī)器人就會(huì)認(rèn)為是此方向上無球; jGuan :當(dāng)前復(fù)眼通道的近距離光值, 其主要是用在機(jī)器人在轉(zhuǎn)完弧度后與球距離較 近的光值,因此它比 findBall(子程序中的 jGua

18、n 參數(shù)要大。機(jī)器人后退 0.2秒,轉(zhuǎn) 180度,讀三次裝在機(jī)器人左面的超聲波測(cè)距模塊的返回值 distance_left,若返回值小于 100CM ,跳出 for(循環(huán),否則讀三次后才跳出;如果機(jī)器人靠 左場(chǎng)邊,讀三次裝在機(jī)器人后面的超聲波測(cè)距模塊的返回變量值 distance_middle,若返回值 小于 100CM ,跳出 for(循環(huán),否則讀三次后才跳出;如果裝在機(jī)器人后面的超聲波測(cè)距模 塊的返回變量值 distance_middle比 distance 小, 說明機(jī)器人靠近場(chǎng)邊, 那就不能向左或向右 轉(zhuǎn)弧度了,只能轉(zhuǎn) 270度,向前走 0.2秒,再轉(zhuǎn) 180度,向前走 0.2秒,再轉(zhuǎn)

19、 90度,若 distance_middle比 distance 大,直接向右轉(zhuǎn)弧度;如果機(jī)器人靠右場(chǎng)邊,其執(zhí)行烏龍球處理程序的原理與機(jī)器人靠左邊的原理一樣。 如果機(jī)器人在中央,且機(jī)器人靠近球門,則需向前沖 0.2秒,再向左轉(zhuǎn)弧度,若遠(yuǎn) 離球門則直接向左轉(zhuǎn)弧度。注意:本烏龍球處理程序是將球場(chǎng)分為六個(gè)區(qū)域,每個(gè)區(qū)域都有自己的算法, 讀者 需認(rèn)真閱讀本段程序,理解本段程序的思路與算法,只有理解了,才能用好本段程序,切 記! 還有本段程序需要調(diào)試后才能用,因?yàn)橛布煌?其馬達(dá)速度也不同,轉(zhuǎn)弧度所需的時(shí) 間也不同,這就需讀者耐心的調(diào)試,后面有調(diào)試說明。3、 findBall(圖標(biāo):作用:追球。本段程序

20、是分兩部分來追球的,與球的距離遠(yuǎn)的就采用快追球程序, 離球近的就采用慢點(diǎn)的追球程序。流程圖: 程序詳細(xì)說明: 參數(shù)詳細(xì)說明:sr :右馬達(dá)控制命令字, 1為停止, 0為前進(jìn), 2為后退;sl :左馬達(dá)控制命令字, 1為停止, 0為前進(jìn), 2為后退;maxIndex :復(fù)眼的通道號(hào);maxValue :當(dāng)前所有復(fù)眼通道的最大值;jGuan :近距離的光值,主要用在追球程序上,作用是分段執(zhí)行追球程序;g_distanceLeft:全局變量,存儲(chǔ)左超聲測(cè)距模塊的返回值。檢測(cè)當(dāng)前所有復(fù)眼通道的最大值, 如果當(dāng)前所有復(fù)眼通道的最大值小于近距離的 光值時(shí),檢測(cè)復(fù)眼通道最大值的通道號(hào),根據(jù)不同的通道號(hào)執(zhí)行不

21、同的處理程序, 如果復(fù)眼通道最大值的通道號(hào)等于 7,那么機(jī)器人就快速向右轉(zhuǎn);復(fù)眼通道最大值 的通道號(hào)等于 6則中速向右轉(zhuǎn);復(fù)眼通道最大值的通道號(hào)等于 5則慢速向右轉(zhuǎn);復(fù) 眼通道最大值的通道號(hào)等于 3則慢速向左轉(zhuǎn); 復(fù)眼通道最大值的通道號(hào)等于 2則中 速向左轉(zhuǎn);復(fù)眼通道最大值的通道號(hào)等于 1則快速向左轉(zhuǎn);在找球中若機(jī)器人的角度為 80度到 100度之間,讀取左超聲測(cè)距模塊的返回值。如果當(dāng)前所有復(fù)眼通道的最大值大于近距離的光值, 檢測(cè)復(fù)眼通道最大值的通道號(hào),并根據(jù)不同的通道號(hào)執(zhí)行不同的處理程序,原理與遠(yuǎn)距離追球的一樣,只不過其比遠(yuǎn)距離追球的響應(yīng)速度慢一點(diǎn)。注意:不同的馬達(dá)、電力,其速度也不同,讀者

22、要注意,以及機(jī)器人在追球的過程中會(huì)出現(xiàn)過沖或在追球的過程中不是一條直線,讀者要耐心調(diào)試。4、 comeORback(圖標(biāo): 作用:當(dāng)在前半場(chǎng)找不到球時(shí),就到另一半場(chǎng)找球。流程圖: 程序說明: 參數(shù)詳細(xì)說明:distance :球場(chǎng)中央的距離, 若裝在機(jī)器人后面的超聲測(cè)距模塊檢測(cè)到的值比 distance小,那說明機(jī)器人還沒有過半場(chǎng);backDistance :機(jī)器人過半場(chǎng)的距離;time :機(jī)器人過半場(chǎng)的時(shí)間;yfy :當(dāng)前復(fù)眼通道的遠(yuǎn)距離光值, 小于此設(shè)定值, 機(jī)器人就會(huì)認(rèn)為是此方向上無球;t :系統(tǒng)時(shí)間;i :returnOut(的返回值;機(jī)器人檢測(cè)不到球,轉(zhuǎn) 0度,讀四次超聲,如果裝在機(jī)

23、器人后面的超聲測(cè)距模塊檢測(cè)到的值比 distance 小,說明機(jī)器人還沒有過半場(chǎng),那就向前走一段距離,這用一個(gè) while(循環(huán)來實(shí)現(xiàn), 機(jī)器人向前走, 直到裝在機(jī)器人后面的超聲測(cè)距模塊檢測(cè)到的值比 distance 大或是到了一定的時(shí)間,才跳出 while(循環(huán)。在 while(循環(huán)中還 有一個(gè)檢測(cè)球的子程序,若檢測(cè)到球則立即返回。如果裝在機(jī)器人后面的超聲測(cè)距模塊檢測(cè)到的值比 distance 大,說明機(jī)器人過了半場(chǎng),但是還沒有找到球,那么機(jī)器人就要轉(zhuǎn) 180度,并向前走,這個(gè)也是用一個(gè)while(循環(huán)來實(shí)現(xiàn),機(jī)器人向前走,直到裝在機(jī)器人后面的超聲測(cè)距模塊檢測(cè)到的值比 distance 大或

24、是到了一定的時(shí)間,才跳出 while(循環(huán)。在 while(循環(huán)中還有一個(gè)檢測(cè)球的子程序,若檢測(cè)到球則立即返回。注意:<1>、機(jī)器人在向前走的時(shí)候,要觀察其所走的路線是不是一條直線,不是,就要耐心的修改馬達(dá)的速度,盡可能的讓其路線是一條直線。<2>、機(jī)器人向前走的時(shí)候,要觀察其向前走前會(huì)不會(huì)碰到前邊場(chǎng)墻,若碰到就要修改一下其向前走的距離和時(shí)間。5、returnOut(圖標(biāo): 作用:檢測(cè)球,若檢測(cè)到球則立即返回。程序說明: 如果當(dāng)前復(fù)眼所有通道的最大值大于無球時(shí)的光值,這個(gè)條件成立就立即返回 1,跳出這個(gè)子程序,否則就返回 0。6、 turnAngle( 圖標(biāo):作用:轉(zhuǎn)任

25、意角度, 并就近選擇轉(zhuǎn)向距離。 在轉(zhuǎn)角度的過程中, 若檢測(cè)到球則 Return返回到有球處理程序。若定一個(gè)角度,比如 90度,而機(jī)器人的當(dāng)前角度 20度,機(jī)器人順時(shí)針向 90度方向轉(zhuǎn)動(dòng)(箭頭方向 ,而不是逆時(shí)針向 90度方向轉(zhuǎn)動(dòng)。如圖: 程序圖: 具體說明:a:為了讓指南針讀數(shù)更精確,可先讓指南針讀三次,這個(gè)功能可用一個(gè)小 while 循環(huán)來完成,程序圖如下: 當(dāng)儲(chǔ)存計(jì)數(shù)器的數(shù)值 counter<2時(shí), 檢測(cè)指南針角度, 若當(dāng)前角度 degree>360度時(shí), counter=0,表示讀數(shù)出錯(cuò),反之則 counter=counter+1,讀數(shù)有效,當(dāng) counter>2時(shí)才

26、跳出 while(。b:轉(zhuǎn)任意角度,并選取最近轉(zhuǎn)向距離。執(zhí)行條件如下:angle2:儲(chǔ)存角度值,當(dāng)輸入的角度 angle 小于 180度時(shí), angle2=180+angle;當(dāng)輸 入角度 angle 大于 180度時(shí), angle2=angle-180。 這個(gè)主要是讓輸入角度 angle 與 angle2處于同一條直線上。如果當(dāng)前指南針的返回值 degree 大于輸入角度 angle 與當(dāng)前指南針的返回值 degree 小于 angle2而且輸入角度 angle 小于 angle2, 若者當(dāng)前指南針的返回值 degree 大于輸 入角度 angle 而且當(dāng)前指南針的返回值 degree 小于

27、 360度,或者當(dāng)前指南針的返回 值 degree 大于 0度而且當(dāng)前指南針的返回值 degree 小于 angle2時(shí),機(jī)器人向左邊 轉(zhuǎn)角度,反之就向右轉(zhuǎn)。程序圖: c:角度容差,在這個(gè)地方有一個(gè)參數(shù)需要用戶修改的,下圖的圓圈示: 在程序中,若想增大或減少角度容差,只需把 5的值改變就可以了。d:Return返回,若檢測(cè)到球,則立即 Return 返回。程序圖: 注意事項(xiàng):電力不同,馬達(dá)速度、角度容差也不同。電力充足時(shí),可適當(dāng)下調(diào)馬達(dá) 速度,增大角度容差,以免增加偏轉(zhuǎn)角度誤差;電力不足時(shí),可增加馬達(dá)速度,減 少角度容差。7、 a ngle(圖標(biāo):作用:angle(與 turnAngle(的功

28、能是一樣的,只不過 angle(是沒有復(fù)眼的優(yōu)先級(jí)設(shè) 置,它是轉(zhuǎn)完角度后,才執(zhí)行下一個(gè)程序的,而 turnAngle(是在轉(zhuǎn)角度的過程中, 若檢測(cè)到球則 Return 返回到有球處理程序, 而不是繼續(xù)執(zhí)行轉(zhuǎn)角度的程序, 但它們 間的原理是一樣的,這里就不多論述了,請(qǐng)參考 turnAngle(模塊說明。 8、 t urn(圖標(biāo):作用:轉(zhuǎn)弧度。 將系統(tǒng)時(shí)間設(shè)為 0,再進(jìn)入 while(,檢測(cè)機(jī)器人的方向是否朝敵方,不是則繼續(xù) 旋轉(zhuǎn),若是或到了一定的時(shí)間,跳出 while(,機(jī)器人后退,一直后退到機(jī)器人發(fā)現(xiàn) 球或是后退的時(shí)間到了,否則就一直后退。這段程序與以前所寫的進(jìn)攻方案中的烏龍球處理程序差不多一

29、樣, 有興趣的讀者 不妨參考以前的進(jìn)攻方案。六、 進(jìn)攻算法為了能讓機(jī)器人更好的進(jìn)攻, 可把球場(chǎng)分為三個(gè)區(qū) (讀者可根據(jù)自己的實(shí)際把球場(chǎng) 分區(qū) ,機(jī)器人在不同的區(qū)域就可以采用不同的進(jìn)攻策略。怎樣才能分區(qū)域呢?可采用 超聲測(cè)距模塊。 球場(chǎng)的情況是變化的, 超聲測(cè)距模塊只能提供場(chǎng)上的大概位置, 不能為 機(jī)器人提供精確的位置,如下圖:機(jī)器人在追球的過程中,其角度為 0度、 90度、 180度、 270度的概率不小,因 此可設(shè)八個(gè)全局變量。當(dāng)機(jī)器人的角度為 0度或 90度、 180度或 270度時(shí),就讀取超 聲測(cè)距模塊的值,并把其變量值存貯到全局變量中。 當(dāng)機(jī)器人離球較近時(shí),讀取全局變量的值,并判斷機(jī)器

30、人大概在球場(chǎng)上的位置,進(jìn)而采取相應(yīng)的策略。下面舉例子說明,如下圖 A 和圖 B : 在圖 A 中,機(jī)器人在 A 區(qū)域追球, 機(jī)器人在追球的過程中,其當(dāng)前角度總會(huì)有在正負(fù) 5度之間的機(jī)會(huì),當(dāng)機(jī)器人當(dāng)前的角度在正負(fù) 5度之間時(shí),讀取左、 后超聲測(cè)距模塊的返回值,并把它們存儲(chǔ)有全局變量中,當(dāng)機(jī)器人靠近球時(shí),讀取超聲測(cè)距模塊返回值的全局變量,若其發(fā)現(xiàn)球在 C 區(qū)域(假設(shè)球在 C 區(qū)域 , 機(jī)器人向左轉(zhuǎn)一定的角度,使機(jī)器人與球的方向都朝著敵方的球門,這樣就能準(zhǔn)確的將球踢進(jìn)敵方的球門,在其他區(qū)域進(jìn)攻的算法都相類似,有興趣的讀者不妨研究一下。在圖 B 中(由于編者美工基礎(chǔ)差,畫的圖不是很好,機(jī)器人與球是在同

31、一水平線上的,即機(jī)器人與球的方向都為 270度左右,容差為 5度 ,當(dāng)機(jī)器人推著球從 A 區(qū)域往 B 區(qū)域踢的時(shí)候, 如果沒有加入進(jìn)攻算法, 那么機(jī)器人就會(huì)一直推著球繞著球場(chǎng)跑, 這樣就浪費(fèi) 了機(jī)會(huì),因此,可加入幾個(gè)全局變量,用來存儲(chǔ)超聲測(cè)距模塊的返回值,當(dāng)機(jī)器人追著 球時(shí),當(dāng)前角度為 270度或 90度左右的時(shí)候,把讀取到的返回值賦予全局變量,并計(jì) 算當(dāng)前全局變量減去上一全局變量的值是否大于一定的數(shù)值, 若大于, 則說明機(jī)器人走 到了球門前, 還要進(jìn)一步判斷機(jī)器人是朝已方球門還是朝敵方的球門, 若是敵方的球門, 則向左或向右拋,這樣進(jìn)球的概率就高。就以圖 B 為例吧,當(dāng)機(jī)器人推著球往前走,

32、并且其當(dāng)前的角度為 270度左右, 那么機(jī)器人就計(jì)算當(dāng)前全局變量減去上一全局變量的 值是否大于一定的數(shù)值或是裝在機(jī)器人后面的超聲測(cè)距模塊的返回值是否也大于一定 的數(shù)值(需實(shí)測(cè) ,若大于則向左拋,否則繼續(xù)推著球往前走,但是機(jī)器人推著球往前 走的時(shí)候可能出現(xiàn)一個(gè)問題,如右圖 C :當(dāng)機(jī)器人的當(dāng)前角度約為 270度,機(jī)器人從 A 區(qū)域推著球向 B 區(qū)域走,按正常的情 況,機(jī)器人在到了 B 區(qū)域就應(yīng)向右拋,把球攻進(jìn)敵方球門,但是因環(huán)境、場(chǎng)上其他因 素的影響,機(jī)器人可能卡死在 C 區(qū)域。因此,可加入系統(tǒng)時(shí)間 t ,當(dāng)系統(tǒng)時(shí)間 t 大于某 個(gè)設(shè)定值時(shí),而且其角度差值很小,說明球已卡死,不能轉(zhuǎn)入死球處理程序,可讓機(jī)器 人后退兩秒或是向左轉(zhuǎn)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論