版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1 課程設計分析 11 課題要求(1)了解5Vs5機器人足球仿真比賽平臺及其策略。(2)在C語言編程環(huán)境下,完成策略的編寫和調(diào)試。(3)運用所寫的程序進行足球機器人比賽,并在比賽中完善所寫的策略。12 編寫目的通過對機器人足球仿真這一課程設計的了解,設計,編寫和調(diào)試,實現(xiàn)足球策略在機器人上的優(yōu)化應用,使己方機器人仿真足球隊在比賽中獲勝。最終達到能熟練運用C語言程序設計知識解決實際問題,實現(xiàn)具體目標的目的,并初步掌握工程化項目化軟件開發(fā)的方法及過程。13 背景機器人足球如今已為越來越多的人所關(guān)注。其國際認可的比賽按機器人可分為三大類:大中型機器人足球?qū)嵨锝M比賽,微型機器人足球?qū)嵨锝M比賽,機器人足
2、球仿真組比賽;按數(shù)量分可分為:3vs3,5vs5,11vs11等。機器人足球仿真5vs5組比賽是在國際認可的同一平臺The Robot Soccer Simulator Director 8.5上運行各隊的策略,從而實現(xiàn)比賽的目的。而其策略是基于Visual C編寫的,只要掌握了C語言課程設計的知識就可以實現(xiàn)策略的編寫。 2用戶手冊 21運行環(huán)境要求 Pentium III 600 MHz 256 megabytes of ram TNT2 3d Graphics accelerator with 32 megabytes of ram 24x CD-ROM Screen resolution
3、 of 800 x 600 16 bit Sound card Microsoft Windows 98 Direct X 8.0 10 megabytes of free hard drive space Director 8.5 Visual C+ 6.0 22使用方法 將包含源代碼的工程文件用Visual C+ 5.0以上版本打開,編譯(快捷鍵F7),鏈接生成動態(tài)鏈接庫。 把生成的動態(tài)鏈接庫文件復制到C:Strategeblue目錄下。并更具需要更換文件名稱。 打開5Vs5平臺程序,將文件名稱輸入到STRATEGIES目錄下的Blue欄中,再用鼠標單擊Lingo把鏈接狀態(tài)更改為C+,然后
4、在點擊Send選項。鏈接文件過程完成。 在右側(cè)的工具欄中,點擊STARE,開始比賽。 如需進一步了解該軟件的用法,單擊右下角HELP選項。 23注意事項 本文中所提供的策略程序,只能在藍隊(右隊)中使用。 3.系統(tǒng)設計 31程序預期功能實現(xiàn)進攻防守兩大功能的合理靈活的切換;通過實現(xiàn)快速反應,精確定點定向移動,路線優(yōu)化設計等方法實現(xiàn)高效進攻和防守。 32功能模塊的劃分4 詳細設計及算法 41進攻的詳細設計及算法(1)當球在對方半場時為進攻模式1 主攻1:當球接近對方禁區(qū)時,在對方球門罰球區(qū)守侯,伺機射門;否則輔助助攻球員進攻。主攻2:當球接近對方禁區(qū)時,在對方球門大禁區(qū)一側(cè)守侯,伺機射門;否則輔
5、助助攻球員進攻,控球。助攻1:控球,將球帶進對方禁區(qū),輔助主攻機器人進攻。助攻2:在助攻1機器人后方適當位置定點,隨時接應助攻1機器人。守門員:調(diào)整位置到初始位置 (2)當球在我方半場且不由對方控球時為進攻模式2 主攻1:控球,將球帶進對方禁區(qū),輔助主攻機器人進攻。主攻2:在助攻1機器人后方適當位置定點,隨時接應助攻1機器人。助攻:準備進入對方半場并尋找有利攻擊位置。 防守:定位到球與我方球門之間的適當位置,隨時準備截球。 (3)另外一套進攻方案: 每個機器人都作為一個獨立的實體,分別進行判斷: 機器人1:當球在對方半場大禁區(qū)線外時,追球;當球在對方半場大禁區(qū)線內(nèi)上方時,留守下方,準備接反彈出
6、來的球;當球在對方半場大禁區(qū)線內(nèi)下方時,留守中間,伺機射門。機器人2:當球在對方半場大禁區(qū)上下方時,將球傳向門前;當球在對方大禁區(qū)和中場線之間時,控球,將球帶向球門。機器人3:。始終追球機器人4:當球在對方半場大禁區(qū)線外時,追球;當球在對方半場大禁區(qū)線內(nèi)上方時,留守中間,伺機射門;當球在對方半場大禁區(qū)線內(nèi)下方時,留守上方,準備接反彈出來的球。42防守的詳細設計及算法當球在我方半場且對方控球時為防守模式 主防:定位到球前方截球,使球向?qū)Ψ桨雸鲆苿印?助防:定位到球與球門之間的適當位置截球,協(xié)助主防和守門員。 后衛(wèi)1:定位到球門前適當位置做好截球接應準備。后衛(wèi)2:定位到球門前適當位置做好截球接應準
7、備。守門員:開始就自行運動到如圖所示位置,這樣可借助球門柱防止守門員因慣性偏離球門,可大大提高其運動速度,并可減少與其他隊員的碰撞。不足之處在于因碰撞而姿態(tài)變化后調(diào)整空間較小。 (1)當球在圖中所示陰影內(nèi)時,守門員的Y坐標盡量與球保持一致,當球坐標在球門范圍外時,守門員保持在離球最近位置侯球。(2)當球在圖中所示陰影內(nèi)時,守門員進入積極防守狀態(tài)。 積極防守狀態(tài)按球的方向和位置不同分四種狀態(tài): (1)球的運動方向指向球門,此時守門員應位于球的運動方向上,阻截球的運動。(2)球的運動方向背離球門。此時守門員應位于球與兩門柱連線夾角的角平分線方向上,為下一次截球作準備。(3)在圖示情況下,守門員的Y
8、坐標盡量與球保持一致,當球坐標在球門范圍外時保持 ,球門內(nèi)時運動。(4)當球在如圖虛線內(nèi)運動時,守門員與球相反運動,以把球撞出. 43數(shù)據(jù)結(jié)構(gòu)機器人球員的數(shù)據(jù) (Vector3D pos表示機器人的三維坐標; rotation表示機器人的方向; velocityLeft表示機器人的左輪速度, velocityRight表示機器人的右輪速度;) typedef struct Vector3D pos; double rotation; double velocityLeft, velocityRight; Robot; 對方機器人 (成員意義同上) typedef struct Vector3D
9、 pos; double rotation; OpponentRobot; 總的環(huán)境參量結(jié)構(gòu) (homePLAYERS_PER_SIDE表示我方幾號機器人;opponentPLAYERS_PER_SIDE表示對方幾號機器人;currentBall表示當前球的位置,lastBall表示上個周期球的位置,predictedBall表示下個周期球的位置,用來預測球下個周期位置;fieldBounds表示場地邊界坐標,goalBounds表示球門邊線坐標;gameState表示比賽狀態(tài), whosBall表示球的掌控狀態(tài), *userData預留給用戶的數(shù)據(jù)指針) typedef struct Rob
10、ot homePLAYERS_PER_SIDE; OpponentRobot opponentPLAYERS_PER_SIDE; Ball currentBall, lastBall, predictedBall; Bounds fieldBounds, goalBounds; long gameState; long whosBall; void *userData; Environment; 44程序流程 45函數(shù)說明基本動作 void PredictBall ( Environment *env ); 預測球的位置,單步預測,運用微量調(diào)節(jié)。入口參數(shù):環(huán)境參量。void Velocity
11、( Robot *robot, double vl, double vr ); 將響應產(chǎn)生的機器人速度寫入系統(tǒng)參量中,即引發(fā)機器人運動。入口參數(shù):機器人指針,左輪速度,右輪速度。void Angle1(Robot *robot,int desired_angle); 使機器人轉(zhuǎn)到預定角度。入口參數(shù):機器人指針,預定角度。void AngleOfPosition(Robot *robot,double x, double y); 使機器人轉(zhuǎn)某一角度,指向特定點。入口參數(shù):機器人指針,特定點橫坐標,特定點縱坐標。以下函數(shù)有方向性,基于以上的基本動作void NormalGame_Right( En
12、vironment *env ); 右隊總策略。入口參數(shù):環(huán)境參量。void Defender_Right(Environment *env); void Defend1_Right(Environment *env); void Defend2_Right(Environment *env); void Defend_Right_py(Environment *env); 右隊防守策略。入口參數(shù):球員指針,環(huán)境參量。void Defence1_Right(Robot *robot,Environment *env);右隊防守策略。入口參數(shù):球員指針,環(huán)境參量。 void GoalKeeper
13、_In_Right(Robot *robot,Environment *env); 右隊守門員策略。入口參數(shù):球員指針,環(huán)境參量。新加入的策略 void Kick( Environment *env, Robot *robot, double aim_angle ); 基本動作,繞到球后方,帶球運動到對方球場。入口參數(shù):環(huán)境參量,球員指針,目標角度。void Position1_cz( Robot *robot, double x, double y ); 移動到預定點,這是整個程序最重要的底層函數(shù)基礎。入口參數(shù):球員指針,預定點橫坐標,預定點縱坐標。void Position_py(Robo
14、t *robot, double x, double y); 移動到預定點,無速度衰減。入口參數(shù):球員指針,預定點橫坐標,預定點縱坐標。void Attack_cz1( Robot *robot, Environment *env ); void Attack_hx( Robot *robot, Environment *env ); 機器人攻擊策略。入口參數(shù):球員指針,環(huán)境參量。void Shoot_Right_cz( Robot *robot, Environment *env ,double aimx ,double aimy); 射門函數(shù),這是進攻中最重要的底層函數(shù)基礎,引導機器人相指
15、定點射門。入口參數(shù):球員指針,環(huán)境參量,指定點橫坐標,指定點縱坐標void Goalkeeper_right_hx( Robot *robot, Environment *env ) 根據(jù)球的運動軌跡,預計球?qū)⒌竭_球門的位置,移動到該點截球。入口參數(shù):球員指針,環(huán)境參量。void Goalkeeper_Right_py2( Robot *robot, Environment *env )快速反應,在球的運動方向上攔截。入口參數(shù):球員指針,環(huán)境參量。5總結(jié) 51 存在的不足 (1) 定位函數(shù)在 Shoot 時,擊球定位的過程中精度很低,有時會丟球。(2) 精確到點的位置函數(shù)還有待進一步改善,現(xiàn)階
16、段在實現(xiàn)時還有一定的誤差,有 一定的振蕩現(xiàn)象。(3) 守門員角度校正函數(shù)還有待改善,現(xiàn)階段其實現(xiàn)角度校正時不分前后,導致守 門員有時遭碰撞后復位前后相反,不能很好防守。52 我們的體會我們的程序,建立在穩(wěn)定、快速的底層函數(shù)中,并且在強大有效的上層策略分 配下,結(jié)合動態(tài)分配角色技術(shù),組織成為一支能與正式比賽隊相抗衡的仿真機器人 足球隊。另外,改進了現(xiàn)有的定位運動函數(shù),使我方進攻、防守的整體性能大幅提高;自行編寫射門函數(shù),使機器人具備智能射門攻擊能力;采用了動態(tài)分配技術(shù),對高效進攻進行了有益的嘗試;新增了機器人“獨立思考綜合攻防”的新思路,為今后高級智能化足球機器人進行了一次超前并且大膽的嘗試。同
17、時,我們也有一些策略與功能未能付諸實現(xiàn),如利用一階微分量來精確控制 下車的運動沒有實現(xiàn);在動態(tài)分配角色時,還只是逐次刷新分配,沒有保證角色連 續(xù)性的算法;守門員程序還沒有做好精確有效的縱向運動的專用底層程序。小組在熟悉 C+界面、學習現(xiàn)有代碼、嘗試編寫、正式編寫、組合調(diào)試的各個過程中,相互交流、幫助,各自充分發(fā)揮自己的長處,最后讓我們小組在并不很長的時間內(nèi)很好的完成了課題任務。我們最大的收獲還在于,在實際編寫中領悟模塊化思想,在實際的合作中體會 編程規(guī)范性的重要性,由此建立起的工程學意識將使我們受益終生。大家在一起的 這段時間中,團隊的有機合作讓我們在看似繁瑣、枯燥的過程中不僅收獲了知識, 更
18、收獲了快樂。 我相信這次的課程設計的完成并不是終點,而是一個新的起點,在這個起點上,我們會更加努力的學習與實踐,讓自己更加優(yōu)秀。6程序代碼(只給出部分)/ Strategy.cpp : Defines the entry point for the DLL application./#include stdafx.h#include Strategy.h#include #include #define square(a) (a)*(a) /求平方#define leng(a,b,c,d) sqrt(square(a)-(c)+square(b)-(d) /自定義函數(shù),求兩點間距離BOOL A
19、PIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) switch (ul_reason_for_call)case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break; return TRUE;const double PI = 3.1415923;char myMessage200; /void PredictBall ( Environment *e
20、nv );void Goalie1 ( Robot *robot, Environment *env );void NearBound2 ( Robot *robot, double vl, double vr, Environment *env );void Attack2 ( Robot *robot, Environment *env );void Defend ( Robot *robot, Environment *env, double low, double high );/ by moon at 9/2/2002void MoonAttack (Robot *robot, En
21、vironment *env );/ just for testing to check whether the &env-opponent works or notvoid MoonFollowOpponent ( Robot *robot, OpponentRobot *opponent );void Velocity ( Robot *robot, int vl, int vr );void Angle ( Robot *robot, int desired_angle);void Position( Robot *robot, double x, double y );void Ang
22、le1(Robot *robot,int desired_angle);void AngleOfPosition(Robot *robot,double x, double y);void Position1( Robot *robot, double x, double y );bool Position2(Robot *robot,double x, double y);bool GoaliePosition(Robot *robot,double x, double y);void Defence1_Right(Robot *robot,Environment *env);void De
23、fender_Right(Environment *env); void Defend1_Right(Environment *env);void Defend2_Right(Environment *env); void Defend_Right_py(Environment *env);void Position1_cz( Robot *robot, double x, double y );void Defend ( Robot *robot, Environment *env, double low, double high );void Defence1_Right(Robot *r
24、obot,Environment *env);void Position1_cz( Robot *robot, double x, double y );void Position0_cz(Robot *robot, double x, double y); void GoalKeeper_In_Right(Robot *robot,Environment *env);void Kick( Environment *env, Robot *robot, double aim_angle ); void Attack_cz1( Robot *robot, Environment *env , d
25、ouble x, double y ) ;void Shoot_Right_cz( Robot *robot, Environment *env ); void Attack1( Robot *robot , Environment *env); void Attack3( Robot *robot , Environment *env);void Attack4( Robot *robot , Environment *env);void shoot(Robot *robot , Environment *env); void pass(Robot *robot , Environment
26、*env); void NormalGame_Right_wl(Environment *env);void Goalkeeper_right_hx(Robot *robot,Environment *env); void Goalkeeper_Right_py2( Robot *robot, Environment *env );void Kick( Environment *env, Robot *robot, double aim_angle ); void Defend1_Right(Environment *env);void shoot_1(Robot *robot,Environ
27、ment *env);void closeto(Robot *robot,Environment *env);void Kick(Environment *env , Robot *robot , Vector3D ToPos);void _cdecl odprintf(const char *format, .);void Defence1_Right1(Robot *robot,Environment *env);extern C STRATEGY_API void Create ( Environment *env )/ allocate user data and assign to
28、env-userData/ eg. env-userData = ( void * ) new MyVariables ();extern C STRATEGY_API void Destroy ( Environment *env )/ free any user data created in Create ( Environment * )/ eg. if ( env-userData != NULL ) delete ( MyVariables * ) env-userData;extern C STRATEGY_API void Strategy ( Environment *env
29、 )/ the below codes are just for demonstration purpose.dont take this seriously testInt = 100;int k;switch (env-gameState)case 0:/ defaultMoonFollowOpponent ( &env-home 1, &env-opponent 2 );MoonFollowOpponent ( &env-home 2, &env-opponent 3 );MoonFollowOpponent ( &env-home 3, &env-opponent
30、 4 ); Position(&env-home3,env-currentBall.pos.x,env-currentBall.pos.y);MoonAttack ( &env-home 3, env );NormalGame_Right_wl(env);if(env-currentBall.pos.xhome3,30); if(env-currentBall.pos.xhome1,env); Position2(&env-home2,env-currentBall.pos.x,env-currentBall.pos.y);if(env-currentBall.pos.x79)Defend1_
31、Right(env);GoalKeeper_In_Right(&env-home2,env); if(env-currentBall.pos.x78) Defend2_Right(env); Goalkeeper_right_hx(&env-home3,env);if(env-home1.pos.xenv-currentBall.pos.x) PredictBall(env);Position(&env-home1,env-predictedBall.pos.x,env-predictedBall.pos.y); /* Shoot_Right_cz(&env-home3,env);Normal
32、Game_Right_wl(env); Defence1_Right(&env-home3,env); Defender_Right(env); Shoot_Right_cz( &env-home2, env ); Attack1(&env-home1 , env); Attack3( &env-home3 , env); Attack4( &env-home4,env); shoot(&env-home2, env); pass(&env-home2, env);Attack2(&env-home2,env);Position1(&env-home1,&env-opponent2.pos.x
33、,&env-opponent2.pos.y);GoalKeeper_In_Right(&env-home1,env);Shoot_Right_cz(&env-home2,env); Kick(env,&env-home3,180); Defend1_Right(Environment *env);void Defend2_Right(Environment *env); void Defend_Right_py(Environment *env); Position1_cz( &env-home1, env-currentBall.pos.x, env-currentBall.pos.y );
34、if(&env-currentBall.pos.xhome2,env); if(&env-currentBall.pos.x78)Position1(&env-home1 ,&env-currentBall.pos.x,) Goalie1 ( &env-home0, env ); break; */case FREE_BALL:/ Follow opponent guyMoonFollowOpponent ( &env-home 1, &env-opponent 2 );MoonFollowOpponent ( &env-home 2, &env-opponent 3 );MoonFollow
35、Opponent ( &env-home 3, &env-opponent 4 );/ attackMoonAttack ( &env-home 3, env ); / Goal keeperGoalie1 ( &env-home 0, env );/ by moon at 24/03/2002/ below code will not work. never try./env-home0.pos.x = 50;/env-home0.pos.y = 0;/env-home0.rotation = 20.0;break;case PLACE_KICK:MoonAttack ( &env-home
36、 2, env );break;case PENALTY_KICK: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;break;case FREE_KICK:FILE * debugfile; debugfile = fopen(debugfile.txt,a); for (k
37、=0;kopponentk.pos.x, env-opponentk.pos.y, env-opponentk.pos.z); fclose(debugfile); MoonAttack ( &env-home 0, env );break;case GOAL_KICK:/MoonAttack ( &env-home 4, env );/Position(&env-home4,env-currentBall.pos.x,env-currentBall.pos.y);/shoot(&env-home3,env);Kick(env,&env-home3,180);break; void close
38、to(Robot *robot,Environment *env)void avoid(Robot *robot,Environment *env)void MoonAttack ( Robot *robot, Environment *env )PredictBall ( env );Position(robot, env-predictedBall.pos.x, env-predictedBall.pos.y);void MoonFollowOpponent ( Robot *robot, OpponentRobot *opponent )Position(robot, opponent-
39、pos.x, opponent-pos.y);void Velocity ( Robot *robot, int vl, int vr )robot-velocityLeft = vl;robot-velocityRight = vr;void Angle ( Robot *robot, int desired_angle)int theta_e, vl, vr;theta_e = desired_angle - (int)robot-rotation;while (theta_e 180) theta_e -= 360;while (theta_e -180) theta_e += 360;
40、if (theta_e 90) theta_e -= 180;if (abs(theta_e) 50) vl = (int)(-9./90.0 * (double) theta_e);vr = (int)(9./90.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 Angle1(Robot *robot,int desired_an
41、gle)/ 讓機器人原地旋轉(zhuǎn)到某一角度 int theta_e, vl, vr; double Kp=1.2; 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; vl = (int)(0 - Kp*theta_e); vr = (int)(0 + Kp*theta_e); Velocity (robot, vl, vr); void Angle
42、OfPosition(Robot *robot,double x, double y)/讓機器人原地旋轉(zhuǎn)始終對著某一點, 不分前后 int vl, vr; double dx,dy,d_e,desired_angle,theta_e; double Kp=0.8; dx=x-robot-pos.x; dy=y-robot-pos.y; d_e=sqrt(dx*dx+dy*dy); if(dx=0 & dy=0) vl=0; vr=0; Velocity(robot,vl,vr); else desired_angle = (int)(180.0/PI*atan2(double)(dy),(do
43、uble)(dx); 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; vl = (int)(0 - Kp*theta_e); vr = (int)(0 + Kp*theta_e); Velocity(robot, vl, vr); void Position1( Robot *robot, double x, double y )/改造原始 Posi
44、tion 函數(shù), 提高直線和轉(zhuǎn)彎速度, 提速至 125,兩方向前進 double vl, vr, vc = 120 ; double desired_angle = 0, theta_e = 0, d_angle = 0 ; 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); if (dx = 0 & dy = 0) desired_angle = 90; else desired_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 100.) Ka = 1.2; /17. / 90.; else if (d_e 50) Ka = 0.9; /19. / 90.; else if (d_e 30) Ka = 0.8; /21. / 90.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球農(nóng)業(yè)張力計行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球便攜式激光測風雷達行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球軍用聚脲防護涂料行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球室溫固化環(huán)氧膠行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國戰(zhàn)術(shù)靶標系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 硅礦開采合同書
- 股票期權(quán)協(xié)議書合同協(xié)議
- 個人房屋買賣合同協(xié)議書模板
- 鐵礦設備買賣合同
- 2025隧道施工合同
- 中職安全管理方案
- 百詞斬托福詞匯excel版本
- 高考寫作指導常見議論文論證方法知識梳理與舉例解析課件27張
- (完整word版)高中英語3500詞匯表
- 玻璃反應釜安全操作及保養(yǎng)規(guī)程
- 高中英語新課標詞匯表(附詞組)
- 2023年心理咨詢師之心理咨詢師基礎知識考試題庫附完整答案【有一套】
- 證券公司信用風險和操作風險管理理論和實踐中金公司
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- 2022年高考湖南卷生物試題(含答案解析)
- GB/T 20909-2007鋼門窗
評論
0/150
提交評論