水中機(jī)器魚大賽技術(shù)文檔_第1頁
水中機(jī)器魚大賽技術(shù)文檔_第2頁
水中機(jī)器魚大賽技術(shù)文檔_第3頁
水中機(jī)器魚大賽技術(shù)文檔_第4頁
水中機(jī)器魚大賽技術(shù)文檔_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、參賽學(xué)校:某大學(xué)參賽隊(duì)名:水中機(jī)器魚隊(duì)參賽項(xiàng)目:水中機(jī)器人全局視覺水球2VS2 文檔內(nèi)容:摘要 本文章是參加2015年中國水中機(jī)器人大賽。本文描述了 軟件功能介紹,硬件介紹,基本操作,策略編寫,策略加載。引言今年來理工學(xué)院十分重視機(jī)器人比賽團(tuán)隊(duì)的建設(shè),訓(xùn)練和參賽,并特地提供了實(shí)驗(yàn)室,給予了大量人力,物力和財(cái)力支持,以鼓勵(lì)有興趣的同學(xué)們投入到相關(guān)的學(xué)習(xí)和研究中。我隊(duì)主要致力于機(jī)器智能的研究。在機(jī)器人的研究方面,著重于機(jī)器人編程軟件及組裝方面。在仿人形機(jī)器人中,我們隊(duì)主要熟悉MURobot大平臺(tái)(含小平臺(tái)),攝像頭驅(qū)動(dòng),CP210X驅(qū)動(dòng)安裝及應(yīng)用,并用C+語言編寫策略,使仿真魚在水中完成

2、各項(xiàng)任務(wù)。機(jī)器魚的控制,相當(dāng)于參照一條真正魚的行動(dòng)方式,需要“眼睛”來識(shí)別,需要“尾巴”來獲得動(dòng)力,需要一個(gè)“腦子”做決策。我們針對(duì)實(shí)體魚來說明一下,“眼睛”就是我們魚池上方的攝像頭,動(dòng)力就是魚體內(nèi)的舵機(jī),決策的“腦子”就是我們的程序比賽規(guī)則如下:裁判鳴哨開球后,所有的機(jī)器魚由各參賽隊(duì)員手動(dòng)啟動(dòng)。在裁判哨聲前搶先啟動(dòng)的機(jī)器魚將被警告,二次警告后將被移離比賽場地,不得再參加比賽。比賽分上下兩個(gè)半場。在上半場開場時(shí),A隊(duì)機(jī)器魚從靠近水球點(diǎn)出發(fā),B隊(duì)機(jī)器魚從本方球門處出發(fā),以體現(xiàn)開球優(yōu)勢;同理,在下半場開場時(shí),B隊(duì)機(jī)器魚從靠近水球點(diǎn)出發(fā),A隊(duì)機(jī)器魚從本方球門出發(fā)。若有一方進(jìn)球后,則重新開球。被進(jìn)球方

3、的機(jī)器魚從靠近水球點(diǎn)出發(fā),進(jìn)球方的機(jī)器魚則從本方球門出發(fā)。機(jī)器魚要求:機(jī)器魚游動(dòng)方向定義為長度,擺動(dòng)方向定義為厚度,兩者垂直方向定義為高度。頭部長度:150-180mm頭部高度:60-90mm頭部厚度:30-50mm 尾部長度(不包括尾鰭):160-190mm,尾部高度厚度不得超過頭部尾鰭長度:沿長度方向50-80mm,沿高度方向90-120mm胸鰭尾鰭材料:采用較硬塑料材料,不得用金屬材料,以免比賽中刮壞尾部材料:尾部統(tǒng)一使用橡膠皮套機(jī)器魚顏色為黑色,可以在機(jī)器魚的尾鰭側(cè)面粘貼學(xué)校的名稱、標(biāo)志或編號(hào),以區(qū)別不同球隊(duì)的機(jī)器魚。每個(gè)機(jī)器魚重量不得超過2kg;在不受擠壓的情況下,機(jī)器魚必須能夠放進(jìn)

4、一個(gè)底面半徑為75mm,高為450mm的圓筒里面。一、軟硬件安裝1.1水池的搭建比賽場地為長方形水池,包括兩臺(tái)比賽電腦、一個(gè)支架、兩個(gè)個(gè)攝像頭,兩套球門、兩個(gè)無線通信模塊。水池內(nèi)部矩形區(qū)域?yàn)樽罱K的有效比賽場地,不包括水池壁及球門架兩側(cè)區(qū)域,有效比賽場地尺寸為2700 mm ×2000 mm ×300mm(長×寬×高)1.2MURobot控制平臺(tái)安裝在U盤“軟件驅(qū)動(dòng)”目錄下選擇“MURobot”安裝文件,例如上圖所示電腦系統(tǒng)為32位,在安裝文件時(shí)選擇32位安裝包,雙擊打開。(32位安裝包和64位安裝包區(qū)別:32位安裝包為X86,64位安裝包為X64)。如下

5、圖打開32位“MURobot”安裝文件,雙擊運(yùn)行里面安裝包,根據(jù)下圖順序進(jìn)行安裝。正常安裝完成后桌面會(huì)出現(xiàn)三個(gè)快方式,此時(shí)MURobot控制平臺(tái)安裝完畢,如下圖所示(如不能正常安裝查閱附表1-001)二、軟件功能介紹2. 1、串口介紹串行接口(Serial port)又稱“串口”,主要用于串行式逐位數(shù)據(jù)傳輸。在全局視覺機(jī)器魚上我們利用串口來進(jìn)行數(shù)據(jù)交互。在使用全局魚平臺(tái)時(shí),將無線發(fā)射模塊(參考硬件篇)通過USB與電腦連接,就會(huì)出現(xiàn)對(duì)應(yīng)串口的COM口。接下來介紹串口端口號(hào)的查找,鼠標(biāo)右擊桌面“計(jì)算機(jī)”圖標(biāo),單機(jī)“屬性”,出現(xiàn)計(jì)算機(jī)屬性界面,單機(jī)打開左上角的設(shè)備管理器,按下圖操作來找到串

6、口端口號(hào),此串口端口號(hào)是為使用大平臺(tái)、小平臺(tái)時(shí)打開串口號(hào)做準(zhǔn)備的,在使用大平臺(tái)、小平臺(tái)時(shí)時(shí)會(huì)按照此端口號(hào)打開串口。2.2、大平臺(tái)介紹大平臺(tái)是對(duì)機(jī)器魚所在環(huán)境進(jìn)行分析處理另外處理程序代碼與機(jī)器魚互傳指令實(shí)現(xiàn)人機(jī)交互的一個(gè)操作平臺(tái)。雙擊桌面快捷方式,運(yùn)行大平臺(tái),進(jìn)入大平臺(tái)主界面,如下圖(1).通信參數(shù)設(shè)置通過大平臺(tái)主界面的“通信參數(shù)設(shè)置”按鍵,單機(jī)打開,就可以進(jìn)入通信時(shí)各參數(shù)設(shè)置,功能如下圖所示(2).圖像參數(shù)設(shè)置通過大平臺(tái)主界面的“圖像參數(shù)設(shè)置”按鍵,單機(jī)打開,可以對(duì)攝像頭采集的圖像。(3).目標(biāo)識(shí)別控制通過大平臺(tái)主界面的“目標(biāo)識(shí)別”按鍵,單機(jī)打開,可對(duì)打開的原始圖像(Original)中目標(biāo)進(jìn)

7、行識(shí)別控制。選擇魚或球或環(huán)方法:點(diǎn)擊要選魚、球或環(huán)序號(hào)在原始圖像上框選要選擇的對(duì)象即可選擇,按住0框選需取消對(duì)象即可取消選擇。選擇A隊(duì)1-8號(hào)魚的快捷鍵分別是:1、2、3、4、5、6、7、8;選擇B隊(duì)1-8號(hào)魚的快捷鍵分別是:Q、W、E、R、T、Y、U、I;選擇1-9號(hào)魚的快捷鍵分別是:A、S、D、F、G、H、J、K、L;(4).原始圖像控制通過大平臺(tái)主界面的“原始圖像”按鍵,單機(jī)打開,可以設(shè)置加載策略時(shí)使用的臨時(shí)目標(biāo)點(diǎn)或是障礙物。(5).前景圖像通過大平臺(tái)主界面的“前景圖像”按鍵,單機(jī)打開,能顯示捕捉的背景圖像。(6).信息顯示通過大平臺(tái)主界面的“信息顯示”按鍵,單機(jī)打開,能實(shí)時(shí)顯示攝像頭捕

8、獲信息。2.3.小平臺(tái)介紹(1).小平臺(tái)打開方式通過大平臺(tái)主界面的“調(diào)試助手”按鍵,單機(jī)打開小平臺(tái)。在U盤“軟件驅(qū)動(dòng)”目錄下,按下圖所示打開(2).基本控制通過基本控制可對(duì)機(jī)器魚進(jìn)行手動(dòng)操控,連接檢測等操作。(3).高級(jí)控制頻率:單位時(shí)間內(nèi)完成周期性變化的次數(shù),單位赫茲(HZ)。通常在發(fā)射和接收頻率相同的情況下進(jìn)行信號(hào)傳遞、交互。本機(jī)器魚發(fā)射模塊和機(jī)器魚都有6個(gè)一一對(duì)應(yīng)的頻率,當(dāng)兩者頻率相同時(shí)可以進(jìn)行通訊。ID:身份標(biāo)識(shí)號(hào)碼,也稱為序列號(hào)或帳號(hào),是某個(gè)體系中相對(duì)唯一的編碼。在全局視覺機(jī)器魚中,當(dāng)發(fā)射模塊和機(jī)器魚頻率相同時(shí)利用不同的ID來區(qū)分不同的魚。在更改機(jī)器魚時(shí)一定要辨清頻率和ID之間的關(guān)系

9、。(4).關(guān)節(jié)調(diào)直當(dāng)打開魚的開關(guān)魚不能正??囍钡臅r(shí)候,需要用到“關(guān)節(jié)調(diào)直“功能。(5).參數(shù)設(shè)置當(dāng)機(jī)器魚游動(dòng)效果不理想時(shí),或在做科研時(shí)需通過“參數(shù)設(shè)置”修改一些參數(shù)。(6).模式設(shè)置對(duì)一條或多條編輯一些小命令,進(jìn)行自動(dòng)執(zhí)行,可用于機(jī)器魚檢測或展示。 單機(jī)“模式設(shè)置”打開設(shè)置界面,保證機(jī)器魚與小平臺(tái)連接正常,如下圖操作 每條魚(每個(gè)ID)可以編輯10個(gè)不同時(shí)間段的動(dòng)作指令。三、硬件體系結(jié)構(gòu)3.1機(jī)器魚機(jī)器魚是多水下機(jī)器人平臺(tái)的執(zhí)行者,可以實(shí)時(shí)接收信息執(zhí)行相應(yīng)任務(wù),也可以實(shí)時(shí)反饋信息給大平臺(tái)或小平臺(tái)。機(jī)器魚在使用時(shí)注意避免與尖銳物品碰撞,不要使電池過放電。機(jī)器魚在不使用時(shí)氣孔打開,放在干燥蔭涼的環(huán)

10、境中,保證機(jī)器魚電量在50%以上。下面是機(jī)器魚實(shí)物與結(jié)構(gòu)圖。3.2無線發(fā)射模塊大平臺(tái)發(fā)出的指令通過無線模塊傳遞給機(jī)器魚,同時(shí)可以接收機(jī)器魚反饋的信息通過串口傳遞給大平臺(tái)或小平臺(tái)。下圖為發(fā)射模塊和USB接口線1、 攝像頭攝像頭在工作時(shí)采集圖像信息相當(dāng)于一個(gè)傳感器,可獲得機(jī)器魚的各種信息傳遞給大平臺(tái)進(jìn)行處理,來分析魚的坐標(biāo),方向以及其他運(yùn)動(dòng)信息。下圖是攝像頭以及攝像頭USB線四、基本操作4.1機(jī)器魚開機(jī)和充電根據(jù)機(jī)器硬件介紹的開關(guān)位置撥動(dòng)機(jī)器魚開關(guān)(開關(guān)在魚皮內(nèi)部),開關(guān)有三個(gè)檔位,當(dāng)機(jī)器魚不使用時(shí)將檔位撥到中間檔位,開關(guān)偏向魚身左方或右方時(shí)可進(jìn)行開啟或充電(具體檔位根據(jù)機(jī)器魚而定,如果偏左是開啟

11、機(jī)器魚那么另一方即是充電)。開機(jī):撥動(dòng)開關(guān),機(jī)器魚會(huì)稍微顫動(dòng)一下,然后尾部呈繃直狀態(tài)。(若不繃直請(qǐng)參考“燒寫底層”操作,如果仍然無法解決請(qǐng)查閱附表1-003)充電:充電器有兩個(gè)輸出接頭,紅接口為正極,黑接口為負(fù)極。把開關(guān)撥至與機(jī)器魚開機(jī)相反方向,根據(jù)機(jī)器魚硬件介紹中俯視圖,充電器正極接機(jī)器魚正極,充電器負(fù)極接機(jī)器魚負(fù)極。充電器自帶充電保護(hù)功能,一般情況下充兩個(gè)小時(shí)就能充滿。(如果充不上電或不能充電,查閱附表1-004)4.2小平臺(tái)連接機(jī)器魚 通過USB與發(fā)射模塊連接后,通過大平臺(tái)或直接打開小平臺(tái)兩種方式打開小平臺(tái),選定對(duì)應(yīng)的com端口,并打開串口(串口號(hào)通過以上步驟已知道是COM3) 打開機(jī)器

12、魚,當(dāng)機(jī)器魚繃直時(shí),則表明機(jī)器魚已開啟。觀看小平臺(tái)接收區(qū)有沒有數(shù)據(jù)顯示(連接成功如下圖)。當(dāng)無數(shù)據(jù)時(shí)表示通訊模塊發(fā)射頻率和機(jī)器魚的接收頻率不配套,這時(shí)我們需要通過高級(jí)控制更改通訊模塊的頻率來找到機(jī)器魚的頻率(詳見“更改頻率和ID”)。 根據(jù)小平臺(tái)介紹的功能來對(duì)機(jī)器魚進(jìn)行操作。以下是用鍵盤進(jìn)行手動(dòng)操作。速度鍵位:數(shù)字區(qū)19為速度19擋,鍵盤區(qū)05為速度1015擋(注:1最小,15最大) 方向鍵位:鍵盤區(qū) YQ 為方向左鍵,小鍵盤區(qū) 為最大左轉(zhuǎn)向。 鍵盤區(qū) U 為方向右鍵,小鍵盤區(qū) 為最大右轉(zhuǎn)向。直游鍵位:Z 停止鍵位:空格鍵4.3、更改頻率和ID(1)修改無線發(fā)射模塊頻率當(dāng)使用者不慎將機(jī)器魚的頻

13、率弄混淆時(shí)導(dǎo)致機(jī)器魚和上位機(jī)無法通信時(shí),此時(shí)就要用到更改無線發(fā)射模塊頻率了。首先,將無線模塊通過USB接口與電腦連接。打開小平,然后將發(fā)射模塊上的J2排針跳帽,由右邊移到左邊啟動(dòng)內(nèi)部工作模態(tài)如下圖所示,完成后打開小平臺(tái)“高級(jí)控制”,在“更改頻率”按鍵左邊,選擇頻率,單擊“更改頻率”,如果接收區(qū)出現(xiàn)一小段代碼,說明更改完成,點(diǎn)擊“返回當(dāng)前頻率”,將彈出對(duì)話框顯示現(xiàn)在頻率。此時(shí)再將跳帽恢復(fù)到右邊啟動(dòng)外部工作模態(tài)就可以連接機(jī)器魚了,如果連接不上,繼續(xù)更改其他頻率。4.4.修改機(jī)器魚ID多條魚使用一個(gè)頻率上完成不同任務(wù)時(shí),需要對(duì)機(jī)器魚進(jìn)行修改ID。當(dāng)頻率修改正常時(shí),使用小平臺(tái)連接機(jī)器魚,小平臺(tái)接收區(qū)有

14、正常信號(hào)反饋,但使用小平臺(tái)無法控制機(jī)器魚,此時(shí)可以嘗試調(diào)節(jié)小平臺(tái)ID按下圖操作一次一次嘗試。在小平臺(tái)中打開“高級(jí)控制”,再按下圖操作更改魚ID。4.5.修改機(jī)器魚頻率將小平臺(tái)連接和魚,小平臺(tái)與魚能正常通訊的情況下更改機(jī)器魚頻率。打開“高級(jí)控制”更改魚的頻率。點(diǎn)擊“更改頻率”后,重啟機(jī)器魚機(jī)器魚的頻率更改完成。4.6.對(duì)機(jī)器魚燒寫底層對(duì)機(jī)器魚進(jìn)行無線燒寫需要用到超級(jí)終端,超級(jí)終端的版本有好多種,但用法都大同小異,下面選其中一種進(jìn)行講解。在燒寫底層時(shí)發(fā)射模塊頻率要和機(jī)器魚頻率相同,所以使用機(jī)器魚的時(shí)候要養(yǎng)成良好習(xí)慣,每次記錄使用的魚的頻率。(1)、在U盤“超級(jí)終端”中選擇“hypertrm”軟件雙

15、擊打開,如下圖所示(2)、如果電腦第一次使用超級(jí)終端會(huì)出現(xiàn)下面界面內(nèi)容,按圖中所示操作(3)、點(diǎn)擊確定后需要?jiǎng)?chuàng)建連接按下圖操作(4)、完成以上操作,打開機(jī)器魚,會(huì)出現(xiàn)如下界面(5)、關(guān)掉機(jī)器魚,然后按住鍵盤按鍵“D”,同時(shí)打開機(jī)器魚,會(huì)出現(xiàn)以下界面,界面中不斷出現(xiàn)“C”。(6)、單機(jī)窗口中的“傳送”鍵,進(jìn)入發(fā)送界面,選擇“發(fā)送文件”,按以下步驟操作。(7)、等待發(fā)送完畢,機(jī)器魚出現(xiàn)繃直現(xiàn)象。此時(shí)先關(guān)閉機(jī)器魚,然后關(guān)閉超級(jí)終端窗口,燒寫底層完畢。五、機(jī)器魚基本控制策略講解5.1類函數(shù)的定義程序中變量都定義為C+語言中“類”的方式。至于什么是“類”,簡單理解是定義的對(duì)象、變量包含同樣的特性,作為一

16、種形式提供給我們使用的一種函數(shù)類型,定義一種類需要進(jìn)行實(shí)例化,說明類的具體內(nèi)容,包含的參數(shù),變量,對(duì)象是什么。更多的大家可以具體上網(wǎng)查,我們需要知道有這種東西,能用就行。它的基本形式是:Cpoint+變量名;通道臨時(shí)目標(biāo)點(diǎn):指所控制的魚在一定的區(qū)域范圍內(nèi)需要到達(dá)的位置。5.2最基本的定義變量說明1)程序的定義的最基本變量有四個(gè):1、魚中心坐標(biāo);2、球中心坐標(biāo);3、魚頭方向;4、球門中心坐標(biāo)下面具體說明定義魚中心坐標(biāo)是:CPoint f_pt :f是fish的簡寫,pt表示坐標(biāo),f_pt是魚的中心坐標(biāo),魚中心坐標(biāo) f_pt。定義球的中心坐標(biāo)是:CPoint b_pt :b是Ball的簡寫,pt是

17、坐標(biāo),b_pt就是球的中心坐標(biāo)。定義球門中心坐標(biāo)是: CPoint g_pt :g是goal(球門)的簡寫,pt是坐標(biāo),所以g_pt代表球門坐標(biāo)。定義魚頭方向是: double f_dir :f就是fish簡寫,dir是direction的簡寫,這是一個(gè)雙精度的變量。絕對(duì)坐標(biāo)系中范圍是-,所以程序中魚頭方向的范圍就是-,。大家或許有疑問,為什么魚頭方向是雙精度的變量而其他的三個(gè)是類呢。因?yàn)槠渌齻€(gè)都是包含這x和y坐標(biāo),也就是類包含相同的參數(shù)(對(duì)象),而魚頭方向沒有包含這些,僅僅是一個(gè)-,的變化范圍。2)基本變量在程序中的獲取我們定義了最基本的四個(gè)變量,那么程序中是怎么獲得的呢,我們下面來說明。

18、針對(duì)三個(gè)類(魚中心坐標(biāo),球中心坐標(biāo),球門中心坐標(biāo)),我們大平臺(tái)已經(jīng)寫好對(duì)這些這些類的定義和例化函數(shù),具體我們不需要了解。獲取的函數(shù)也已經(jīng)寫好,就是簡單的調(diào)用一個(gè)函數(shù)就行。具體程序是對(duì)魚中心坐標(biāo)的獲取 f_pt=m_FishInfo0.GetCenterPt() ;m_FishInfo0.GetCenterPt()是一個(gè)類函數(shù),不需要具體了解函數(shù)具體內(nèi)容,只需要記住其實(shí)現(xiàn)的功能。功能是獲取魚的中心坐標(biāo)。m_FishInfo0m_是標(biāo)識(shí)作用,fish代表“魚”,info代表“輸入”數(shù)字?jǐn)?shù)字代表魚的編號(hào)這個(gè)獲取的是0號(hào)魚的,GetCenterPt() 代表獲得中心坐標(biāo)。那么2 vs 2 程序獲取0號(hào)

19、是:f_pt0=m_FishInfo0.GetCenterPt() ; 程序獲取1號(hào)是;f_pt1=m_FishInfo1.GetCenterPt() ;對(duì)球中心坐標(biāo)的獲取是: b_pt=m_goalinfo.GetBallPt();m_goalinfo.GetBallPt()是一個(gè)類函數(shù),功能是獲得球中心坐標(biāo)m_goalinfo0同時(shí)在2013的新平臺(tái)上也需要輸入魚的編號(hào)m_ 是標(biāo)識(shí)作用,goal代表球門,info是“輸入”,GetBallPt() 代表球中心坐標(biāo)對(duì)球門中心坐標(biāo)的獲取是:g_pt=m_Channel0.center ;數(shù)字 中括號(hào)內(nèi)部的數(shù)字代表獲取的是第幾個(gè)通道的坐標(biāo)。如果很

20、多個(gè)通道可以代替臨時(shí)目標(biāo)點(diǎn)的作用嗎?對(duì)魚頭方向的獲取是: f_dir=m_FishInfo0.GetDirection() ;數(shù)字也是同樣的含義,代表獲取的方向是第幾條魚的。5.3三個(gè)基本服務(wù)函數(shù)程序中還有最簡單的三個(gè)服務(wù)函數(shù)。1獲取角度函數(shù)Angle(CPoint point,CPoint aimer);2獲取距離函數(shù)Distance(x,y);其中形參都是定義為“類”。3轉(zhuǎn)換角度函數(shù)Checkangle(double dir)形參類型是雙精度。大家有英文字母的含義應(yīng)該就了解函數(shù)的作用了。請(qǐng)記住三個(gè)函數(shù)的功能。1)角度函數(shù) 此函數(shù)所測算的角度建立于絕對(duì)坐標(biāo)系基礎(chǔ)上Angle(CPoint p

21、oint,CPoint aimer)具體定義如下:Angle(CPoint point,CPoint aimer) /聲明函數(shù),兩個(gè)類的形參point和aimer double a;a=atan2(double)(aimer.y-point.y),(double)(aimer.x-point.x);/就是求一個(gè)反正切的角度return a; /返回一個(gè)角度值范圍是-/2,/2(這個(gè)很重要,記住范圍) 紅色為point 黑色為aimer 2)距離函數(shù)Distance(CPoint point,CPoint aimer)函數(shù)具體定義如下:Distance(CPoint point,CPoint a

22、imer)double a;a=sqrt(double)(point.x-aimer.x)*(point.x-aimer.x)+(double)(point.y-aimer.y)*(point.y-aimer.y);/ 就是一個(gè)求距離的平方根公式return a; /返回距離值,雙精度類型3)轉(zhuǎn)換角度函數(shù)Checkangle(double dir) 具體定義如下:Checkangle(double dir) /把dir換算成-pipi之間的數(shù)if(dir>PI)dir-=2*PI;else if(dir<-PI)dir+=2*PI;return dir;5.4點(diǎn)到點(diǎn)函數(shù)的講解這是程

23、序中核心的函數(shù),機(jī)器魚所執(zhí)行的動(dòng)作都是調(diào)用這個(gè)函數(shù)來實(shí)現(xiàn)的,所以請(qǐng)大家一定要理解函數(shù)內(nèi)容,并且能夠修改優(yōu)化這個(gè)程序。先給出函數(shù)功能說明。點(diǎn)對(duì)點(diǎn)底層函數(shù)詳解 重在理解點(diǎn)對(duì)點(diǎn)函數(shù)是如何運(yùn)行的,底層函數(shù)研究根據(jù)自身能力酌情處理。void Roundp2p(CPoint aimpt,CFishAction &action,int fishID,CFishInfo m_FishInfo)/定義一個(gè)函數(shù),包含四個(gè)參變量,第一個(gè)是aimpt作為目標(biāo)點(diǎn)的類,第二個(gè)是魚的動(dòng)作模式action(包括速度、方向以及運(yùn)動(dòng)模式)第三個(gè)是魚的ID,第四個(gè)是魚的入口參數(shù)(包含魚中心坐標(biāo),魚頭方向等)。其中,魚的ID

24、是整數(shù)類型外,其他的都是“類”。 CPoint FishPt;/ 魚中心的位置double FishDir;/ 魚頭的方向CPoint FishHeadPt;/魚頭的位置CPoint LastFishPt;CPoint FishRotatePt;/;/魚的轉(zhuǎn)動(dòng)位置,程序未用到,作為預(yù)留變量待開發(fā)使用。CPoint FishTailPt; /魚尾巴的位置,程序未用到,作為預(yù)留變量待開發(fā)使用。CPoint GoalPt1, GoalPt2;/臨時(shí)目標(biāo)點(diǎn),GoalPt2沒有用到CPoint Pt1, Pt2, Pt3, Pt4;/CPoint f_headpt;/point of fish'

25、s head/f_headpt=m_FishInfo0.GetHeadPoint();double dir1=0;double dir0;double dist0;double dist1=0;double dir2=0;double dist2=0;/臨時(shí)用到的方向和距離CPoint centerpt1,centerpt2;/作為魚要繞的中心來用CPoint centerpt3,centerpt4,centerpt5,centerpt6;CPoint centerpt0,centerpt00;double dis1,dis2;dis1=0;dis2=0; double radius;/需要游

26、動(dòng)的半徑,可以隨意的設(shè)置.FishPt=m_FishInfo.GetCenterPt();/獲取魚的中心位置FishDir=m_FishInfo.GetDirection();/獲取魚頭方向dist1=Distance(FishPt,aimpt);/計(jì)算魚中心位置和所要游動(dòng)目標(biāo)點(diǎn)的距離dist1變量dir1=Angle(FishPt,aimpt);/計(jì)算魚中心位置和所要游動(dòng)目標(biāo)點(diǎn)連線的夾角(絕對(duì)坐標(biāo)系)dir1-=FishDir;/這個(gè)語句的作用是把絕對(duì)坐標(biāo)系表示的角度轉(zhuǎn)換為相對(duì)坐標(biāo)系 /就是以魚和目標(biāo)點(diǎn)的連線為參考軸,dir1代表此情況的魚頭方向dir1=Checkangle(dir1)*1

27、80/PI;/調(diào)用函數(shù),把dir1的從弧度換為角度表示action.speed=15;/定義魚的速度為最快的15執(zhí)行動(dòng)作m_FishInfo.SetAction(action);/發(fā)送動(dòng)作設(shè)置狀態(tài)給魚if(dist1>100) /下面是魚和目標(biāo)點(diǎn)的距離大于100像素的情況if(dir1>-5&&dir1<5)action.direction=7;else if(dir1<-5&&dir1>-10)action.direction=5;else if(dir1<-10&&dir1>-30)action.di

28、rection=4;else if(dir1<-30&&dir1>-50)action.direction=2;else if(dir1<-50&&dir1>-70)action.direction=1;else if(dir1<-70&&dir1>-90)action.direction=0;else if(dir1<-90)action.direction=0;else if(dir1>5&&dir1<10)action.direction=9;else if(dir1&g

29、t;10&&dir1<20)action.direction=10;else if(dir1>20&&dir1<40)action.direction=12;else if(dir1>40&&dir1<50)action.direction=12;else if(dir1>50&&dir1<80)action.direction=14;else if(dir1>80&&dir1<90)action.direction=14;else action.directi

30、on=14;else /以下是魚和目標(biāo)點(diǎn)的距離小于100像素的情況。 if(dir1>-5&&dir1<5)action.direction=7;else if(dir1<-5&&dir1>-20)action.direction=4;else if(dir1<-20&&dir1>-40)action.direction=1;else if(dir1<-40&&dir1>-60)action.direction=0;else if(dir1<-60&&dir1&

31、gt;-70)action.direction=0;else if(dir1<-70&&dir1>-90)action.direction=0;else if(dir1<-120)action.direction=0;else if(dir1>5&&dir1<20)action.direction=10;else if(dir1>20&&dir1<30)action.direction=12;else if(dir1>30&&dir1<50)action.direction=1

32、3;else if(dir1>50&&dir1<70)action.direction=14;else if(dir1>70&&dir1<90)action.direction=14;else if(dir1<120)action.direction=14;else action.direction=14;m_FishInfo.SetAction(action);六、策略編寫策略編寫環(huán)境是Microsoft Visual Studio 2010及以上版本,此軟件屬于微軟公司推出的開發(fā)環(huán)境,可在網(wǎng)上下載和查找安裝過程。安裝Visual

33、 Studio后圖標(biāo)會(huì)變成,在桌面找到,雙擊運(yùn)行。程序入口在程序中右上角的“解決方案與資源管理器”中能看到如下圖所示的一個(gè)函數(shù)名為“strategy.cpp”,這就是策略編寫的函數(shù),在函數(shù)里面有一個(gè)名為“BOOL CStrategy:Strategy0()”,的子函數(shù) 就是策略編寫的入口。編寫策略時(shí),程序的定義的最基本變量有四個(gè)。1、魚中心坐標(biāo)f_pt;2、球中心坐標(biāo)b_pt;3、魚頭方向g_pt;4、球門中心坐標(biāo)f_dir。其他函數(shù)名不知道什么意思可以通過其英文單詞含義大致推斷其含義,另外選中不清楚的函數(shù),鼠標(biāo)右擊,可以“轉(zhuǎn)到定義”或“轉(zhuǎn)到聲明”去具體了解函數(shù)的含義。另外,如果想增加其他策略可在函數(shù)聲明中重新添加策略聲明然后在策略中調(diào)用,如果想添加一個(gè)策略1,按照下圖兩步操作。1、 策略編譯(生成DLL代碼)MURStrategy作為統(tǒng)一的策

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論