fira5v5項目說明_第1頁
fira5v5項目說明_第2頁
fira5v5項目說明_第3頁
fira5v5項目說明_第4頁
fira5v5項目說明_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Fira5V5仿真組介紹北京工業(yè)大學機器人協(xié)會2015年10月1、 Fira5v5項目介紹(一)Fira5v5仿真平臺簡介1.1 仿真型機器人足球介紹仿真型機器人足球(SimuroSot)SimuroSot 是一種仿真的軟件系統(tǒng),在該項比賽中,參賽的每個機器人不是 實際的機器人,而是用計算機模擬的虛擬機器人,它主要研究比賽策略,以軟件為主,忽略機器人的硬件相關的需求。比賽中,我們僅關注的好似軟件部分,主要研究用軟件來實現(xiàn)既定的策略,完成給定的程序邏輯,主體的程序對語言要求很低,主要是要求擁有清晰的邏輯和編程思想。換言之,SimuroSot 類型的比賽是智力與智力的碰撞。1.2 仿真系統(tǒng)基本結構

2、 仿真系統(tǒng)是有FIRA 提供的仿真程序,這個程序通過DLL(動態(tài)連接庫)接收雙方策略,決策系統(tǒng)由各隊提供自己的DLL程序。場上的數(shù)據(jù)由仿真程序計算給出,DLL接收處理并將要發(fā)給機器人的命令傳給仿真程序。1.3 仿真平臺及系統(tǒng)特點 開發(fā)者:澳大利亞的Dr.Jun Jo 領導的Griffith大學信息技術學院RSS開發(fā)小組 系統(tǒng)特點:1 機器人模型:Yujin機器人的物理模型2 模擬精確:碰撞檢測完全,碰撞處理精確(采用商業(yè)游戲引擎公司Havok的碰撞處理引擎)3 界面:3維(采用Direct設計界面,3D Max模型)1.4 運行環(huán)境和開發(fā)工具仿真系統(tǒng):3D Robot Soccer Simul

3、ator 1.5a編程語言:C/C+開發(fā)環(huán)境:MS Visual C+ 6.0 / MS VS2003模 板:使用仿真系統(tǒng)提供的源程序模板程序模板說明:程序使用動態(tài)連接庫(DLL)方式硬件需求:Pentiun III 600 MHz或其以上級別的顯示卡256M系統(tǒng)內存具有32M以上顯存的TNT2或其以上級別的顯示卡能夠支持800×600以上分辨率的顯示器軟件需求:Windows98或以上版本的操作系統(tǒng)DirectX 8.0或以上的版本1.5 仿真平臺的使用介紹1.5.1 運行程序的方法1 先將自己編寫好的代碼編譯成dll文件,黃隊程序拷到C:strategyyellow,藍隊程序拷到

4、C:strategyblue。2 在仿真平臺中點擊STRATEGIES按鈕,選擇C+,然后輸入策略文件名,點擊send。3 選擇相應的比賽模式,按照規(guī)則擺放好球和球員后,點擊start,開始比賽。1.5.2 主菜單A-各隊載入策略B-選擇以何種方式開球,依次為(自由球,開球,點球,任意球,球門球)C-選擇開球方 黃隊 藍隊D-開始比賽 E-比賽時間和比分F-修改時間和比分 G-開始一場新的比賽 H 平臺幫助以及規(guī)則1.5.3 策略載入菜單 選擇使用何種開發(fā)語言(Lingo/C+) 輸入藍隊程序的文件名 輸入黃隊程序的文件名將各隊程序載入平臺打開狀態(tài)查看窗口(相識了球和機器人的一些基本信息)1.

5、5.4 比賽控制菜單 A-立即回放 B-暫停 C-結束比賽1.5.5 回放控制菜單A- 從頭開始回放B- 從前300個周期開始回放C- 一般速度回放D- 慢速度回放E- 逐幀回放F- 推出回放模式G- 當前進球無效 1.5.6 機器人的編號 Home代表己方機器人 Opp代表對方機器人 箭頭所指的方向為機器人當前的正方向1.5.7 鼠標和鍵盤操作鼠標:在比賽開始前或比賽暫停時,可以用鼠標拖動球機器人到場地的任何位置鍵盤:在比賽開始前或比賽暫停時,當鼠標點擊某一個機器人后可以用<-或->鍵來調整該機器人的角度。(二)仿真平臺與策略關系及其運動策略開發(fā)指南2.1 什么是策略程序定義:策

6、略程序就是自己編寫的能夠使仿真平臺中機器人按照預定方式運動的程序。通俗的來說,就是能夠打比賽的程序。2.2 仿真平臺與策略的運行關系2.2.1 仿真平臺與策略程序的通信方式2.2.2 策略程序每個周期接受的數(shù)據(jù)仿真平臺傳遞給策略程序的數(shù)據(jù):4 己方、對方機器人坐標、角度(當前周期,上一周期)5 球的坐標(當前周期,上一周期) 2.2.3 策略程序每個周期發(fā)送的數(shù)據(jù)策略程序發(fā)送給仿真平臺的數(shù)據(jù):己方(homei)每個機器人的左輪速(pwm1)和右輪速(pwm2)2.3 仿真平臺場地數(shù)據(jù)2.3.1 場地頂點坐標 2.3.2 場地的各種標志及尺寸 單位(厘米)機器人小車為理想模型。速度限制在-125

7、125。提供比賽狀態(tài)(GameState)和控球方(WhosBall)兩個參數(shù)。度量單位:英寸(如轉換成厘米,需乘2.54)。球員方位角單位為角度。每方隊員有五名,分別用不同的顏色來標示,右上角是黑色來區(qū)分前后,中間是代表隊伍的顏色,在左下角是區(qū)分不同隊員的標識: 0號一般是守門員,用大紅色表示; 1號用紫色表示,2號用紫紅色表示,這兩個一般用作防守; 3號用綠色表示,4號用藍綠色表示,這兩個一般用作進攻;2.4 接口代碼解析程序的接口API函數(shù): 函數(shù)接口Create主要是程序的初始化,在程序開始時由系統(tǒng)調用,主要作用是定義所有的數(shù)據(jù),如創(chuàng)建對應于:Environment->userD

8、ata的函數(shù),其中可以用來存儲我們的策略執(zhí)行狀態(tài)等 Extern “C” STRATEGY_API void Create (Enviroment *env); 函數(shù)接口Destroy主要是程序的銷毀,在程序結束時由系統(tǒng)調用,主要作用是釋放自定義的數(shù)據(jù),如刪除對應于:Environment->userData的數(shù)據(jù) Extern “C” STARTGY_API void Destroy (Enviroment *env); 函數(shù)接口Strategy是程序的主要執(zhí)行邏輯,由系統(tǒng)反復調用,每次調用相當于真實系統(tǒng)下計算出新的機器人左右輪的速率,并發(fā)送給小車,在這里,我們必須處理針對賽場上每一時

9、刻的對策,每秒調用60次,即仿真周期為1/60秒。Extern “C” STARTGY_API void Strategy (Enviroment *env); 實際上程序只需要這三個接口,而我們的工作就是完成這幾個接口的處理。程序的基本數(shù)據(jù)定義Vector3D /位置向量定義typedef structdouble x, y, z;Vector3D;Bounds /區(qū)域范圍定義typedef struct long left, right, top, bottom; Bounds;Robot /我方機器人的信息定義typedef struct Vector3D pos; /機器人的坐標位置

10、double rotation; /機器人當前的角度 double velocityLeft, velocityRight; /機器人的左右輪速 Robot;OpponentRobot /對方機器人信息的定義typedef struct Vector3D pos; /機器人的坐標位置 double rotation; /機器人當前的角度 OpponentRobot;Ball /小球信息的定義typedef struct Vector3D pos; /小球的坐標位置Ball;Environment /最重要的數(shù)據(jù)定義,包含所有運行時的信息,由系統(tǒng)刷新typedef struct Robot ho

11、mePLAYERS_PER_SIDE; /我方機器人數(shù)組 OpponentRobot opponentPLAYERS_PER_SIDE; /敵方機器人數(shù)組 Ball currentBall, /當前小球的位置 lastBall, /上一次小球的位置 predictedBall; /調用PredictBall()函數(shù)后可獲得數(shù)據(jù)Bounds fieldBounds, /場地范圍 goalBounds; /球門的位置與范圍 long gameState; /當前比賽狀態(tài)(各種定位球的標志變量)long whosBall; /由誰控制球void * userData; /用戶自定義信息Environ

12、ment; 仿真系統(tǒng)每秒會調用dll中的接口函數(shù)Straegy接口60次,也就是我們的每個處理周期是16.67毫秒,在每次調用時,系統(tǒng)通過Environment * env這個指針向我們傳遞當前的系統(tǒng)的運行信息,然后我們運算后設置我方所有機器人的左右輪速,依此來控制機器人進行足球比賽。 需要注意的是:程序對于左右半場,應該分別處理。2.5 程序開發(fā)流程1 在C:Programe FilesRobot Soccer v1.5a目錄下找到Stragegy Source文件。2 將此文件夾的代碼拷出,并在VC6.0或.NET2003下打開,可以看到系統(tǒng)提供的接口代碼,同時也有一些系統(tǒng)提供的策略,這些

13、策略只是提供參考,如果想要寫出好的程序,必須改進,或重新編寫。3 在我們看到的程序中像下面這樣一類函數(shù)都是開發(fā)者留給我們參考的,這些以后都需要自己改進,自己編寫。void PredictBall(Environment *env); /預測球的位置void Goaliel(Robot *robot, Envirnment *env); /守門員策略void NearBound2(Robot *robot, double vl, double vr, Envirnment *env);void Attack2(Robot *robot, Environment *env); /機器人向小球移動方

14、法void Defend(Robot *robot, Environment *env, double low, double high); /防守(后衛(wèi))void MoonAttack(Robot *robot, Environment *env); /移動攻擊void MoonFollowOpponent(Robot *robot , OpponentRobot *opponent); /跟隨對方球員void Velocity(Robot *robot, int vl, int vr); /給機器人發(fā)送左右輪速void Angle(Robot *robot , int desired_an

15、gle); /機器人轉到指定角度void Positon (Robot *robot, double x, double y); /機器人移動到指定的坐標2.6 動作函數(shù)介紹 為了完成各種策略,基本的做法是用分而治之,逐步求精的方法,將主要的策略分為若干個基礎策略,每個完整的策略分別由這些基本的策略組成,而這些策略又由一些基本的行為動作方式組成,我們的機器人控制程序最后就是由這些方法和行為動作方式來構成。 下面是一些基本的動作函數(shù): void Angle (Robot *robot ,int desired_angle) /該動作可以讓機器人轉到任意指定的角度 int theta_e, vl,

16、 vr; theta_e = desired_angle (int) robot -> rotation; while( theta_e >180) theta_e -= 360; while(theta_e <-180) theta_e +=360; if (theta_e < -90) theta_e +=180; else if (theta_e>90) theta_e -= 180;if (abs(theta_e) > 50) vl = ( int ) (-9.0/90.0 * (double) theta_e); vr= (int ) (9.0/9

17、0.0 * (double) theta_e);else if(abs(theta_e) > 20) vl = (int ) (-11.0/90.0*(double)theta_e); vr=(int ) (11.0/90.0 *(double) theta_e);Velocity (robot, vl, vr);void Attack (Robot * robot, Environment *env)/ 機器人向小球的位置移動的方法 PredictBall (env); /估計小球的位置 Position( robot , env-> predictedBall.pos.x, e

18、nv->predictedBall.pos.y); /移動機器人到小球的位置void PredictBall( Environment *env) /預估小球的位置 double dx = env ->currentBall.pos.x env->lastBall.pos.x; double dy = env ->currentBall.pos.y env ->lastBall.pos.y; env->predictedBall.pos.x = env->currentBall.pos.x + dx; env->predictedBall.pos

19、.y = env->currentBall.pos.y + dy;void Position( Robot *robot, double x, double y )/該動作使移動小車到指定位置int desired_angle = 0, theta_e = 0, d_angle = 0, vl, vr, vc = 70;double dx, dy, d_e, Ka = 10.0/90.0;dx = x - robot->pos.x; /計算當前位置與目標的相對位移dy = y - robot->pos.y;d_e = sqrt(dx * dx + dy * dy); /計算機

20、器人到目標位置的直線距離if (dx = 0 && dy = 0) /計算當前位置到目標點的角度desired_angle = 90;elsedesired_angle = (int)(180. / PI * atan2(double)(dy), (double)(dx);theta_e = desired_angle - (int)robot->rotation;/ 當前機器人的角度與機器人到目標連線角度的夾角while (theta_e > 180) theta_e -= 360;while (theta_e < -180) theta_e += 360;

21、if (d_e > 100.) Ka = 17. / 90.;else if (d_e > 50)Ka = 19. / 90.;else if (d_e > 30)Ka = 21. / 90.;else if (d_e > 20)Ka = 23. / 90.;else Ka = 25. / 90.;if (theta_e > 95 | theta_e < -95)theta_e += 180;if (theta_e > 180) theta_e -= 360;if (theta_e > 80)theta_e = 80;if (theta_e &l

22、t; -80)theta_e = -80;if (d_e < 5.0 && abs(theta_e) < 40)Ka = 0.1;vr = (int)(-vc * (1.0 / (1.0 + exp(-3.0 * d_e) - 0.3) + Ka * theta_e);vl = (int)(-vc * (1.0 / (1.0 + exp(-3.0 * d_e) - 0.3) - Ka * theta_e);else if (theta_e < 85 && theta_e > -85)if (d_e < 5.0 &&

23、abs(theta_e) < 40)Ka = 0.1;vr = (int)( vc * (1.0 / (1.0 + exp(-3.0 * d_e) - 0.3) + Ka * theta_e);vl = (int)( vc * (1.0 / (1.0 + exp(-3.0 * d_e) - 0.3) - Ka * theta_e);elsevr = (int)(+.17 * theta_e);vl = (int)(-.17 * theta_e);Velocity(robot, vl, vr);2.7 在策略中調用動作的基本方法1 讓小車沿直線跑到指定的點switch ( env->

24、gameState) case 0: Position (&env->home1,env->Home1.pos.x, 60); /讓小車1沿著直線跑到X軸與機器人位置相等Y軸為60這個點去 Position (&env->home2,env->Home2.pos.y, 60); /讓小車2沿著直線跑到Y軸與機器人位置相等X軸為60這個點去 break; case FREE_BALL: break; case PLACE_KICK: break; case PENALTY_KICK: break;case FREE_KICK: break; case GO

25、AL_KICK: break;讓小車跑到指定的點對球員之間的配合有很大的關系,對于策略的配合極其重要。2 讓小車轉彎跑 switch (env->gameState) case 0: Position( &env->home1, 50, 60); /讓小車跑到指定的坐標(50 ,60) break; case FREE_BALL: break; case PLACE_KICK: break; case PENALTY_KICK: break; case FREE_KICK: break; case GOAL_KICK: break;3 讓小車跟著球跑switch (env-

26、>gameState) case 0: Position(&env->home1, env-> currentBall.pos.x, env-> currentBall.pos.y); /讓小車1跟著球跑 break; case FREE_BALL: break; case PLACE_KICK: break; case PENALTY_KICK: break; case FREE_KICK: break; case GOAL_KICK: break;讓小車跟著球跑也是一種進攻方法,這適合初學開發(fā)者。但這有一個毛病,容易犯規(guī)或造成烏龍球。4 讓守門員根據(jù)球的Y軸

27、的移動而移動switch (env->gameState) case 0: Position(&env->home1, 91.0000, env->currentBall.pos.y); /讓小車1守門,并且根據(jù)球的位置的移動而移動 break; case FREE_BALL: break; case PLACE_KICK: break; case PENALTY_KICK: break; case FREE_KICK: break; case GOAL_KICK: break;讓守門員跟隨著球的Y軸和移動是一種很有效的守門辦法,但守門員又不能離球門太遠,所以守門員的

28、移動還得在一定范圍之內。5讓小車以最快的速度到達指定的點 switch (env->gameState) case 0: Position(&env->home1, 60, env->currentBall.pos.x); /讓小車1沿直線跑到X軸與機器人位置相等Y軸為60這個點去 break; Position(&env->home2, 60, env->currentBall.pos.y); /讓小車2沿直線跑到Y軸與機器人位置相等X軸為60這個點去 Velocity(& env->home1,125,125); /讓小車1以最快

29、的速度移動,125為左右輪最大的速度 Velocity(& env->home2,125,125); /讓小車2以最快的速度移動,125為左右輪最大的速度 break; case FREE_BALL: break; case PLACE_KICK: break; case PENALTY_KICK: break; case FREE_KICK: break; case GOAL_KICK: break;2.8簡單策略開發(fā) 程序主要是在接口Strategy中按照當前的狀態(tài)處理比賽時的信息,通過分支-選擇結構來分別處理各種不同的狀況 switch(env->gameState)

30、 case 0: /default 卻省情況下的策略(即沒有選擇任何比賽模式) /三個機器人進行追逐對方的策略 MoonFollowOpponent(&env->home1, &env->opponent2); MoonFollowOpponent(&env->home2, &env->opponent3); MoonFollowOpponent(&env->home3, &env->opponent4); /第四個搶球 MoonAttack( &env->home 4,env); Goaliel

31、 (&env->home 0, env); /守門員守門 break; case FREE_BALL: /發(fā)球墜球(自由球)時的策略 /跟隨對方 MoonFollowOpponent(&env->home1, &env->opponent2); MoonFollowOpponent(&env->home2, &env->opponent3); MoonFollowOpponent(&env->home3, &env->opponent4); MoonAttack( &env->hom

32、e 4,env); /第四個搶球 Goaliel (&env->home 0, env); /守門員守門 break; case PLACE_KICK: /開球時的策略 MoonAttack( &env->home 2,env); /由二號小車發(fā)球 break; case PENALTY_KICK: /發(fā)生罰球(點球)時的策略 switch (env->whosBall) case ANYONES_BALL: MoonAttack( &env->home 1,env); break; case BLUE_BALL: MoonAttack( &env->home 4,env); break; case YELLOW_BALL: MoonAttack( &env->home 0,env); break; brea

溫馨提示

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

評論

0/150

提交評論