C++大作業(yè)綜合項目報告_第1頁
C++大作業(yè)綜合項目報告_第2頁
C++大作業(yè)綜合項目報告_第3頁
C++大作業(yè)綜合項目報告_第4頁
C++大作業(yè)綜合項目報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++大作業(yè)項目報告——AGV途徑規(guī)劃與運營仿真軟件設計小構成員:日期:6月16日指引教師:目錄C++大作業(yè)項目報告 1——AGV路徑規(guī)劃與運行仿真軟件設計 1一、課題背景 31.1案例背景 31.2問題描述 31.3任務目標 31.4具體分析 3二、系統(tǒng)設計 42.1類體系設計 42.2類定義及函數(shù)描述 42.3程序流程圖 5三、程序重點解析 73.1文本文檔讀入地圖信息 73.2Dijkstra算法程序設計 83.3動態(tài)顯示部分 9四、程序運行結果展示 104.1地圖文件 104.2運行窗口 104.3動態(tài)顯示窗口 114.5改變地圖,改變AGV參數(shù)運行。 12五、程序設計小結 145.1程序設計的缺陷和不足 145.2設計中遇到的困難 14六、參考資料 15七、源程序及相關文件 15八、各小組成員個人報告 15

一、課題背景1.1案例背景AGV(自動導引車)由于運動靈活,被廣泛用于生產(chǎn)車間物料搬運。由于單機搬運能力有限,實踐中經(jīng)常需要由多臺AGV同步進行搬運。由于AGV普通無法感知全局信息,為避免多AGV發(fā)生碰撞并提高AGV搬運效率,多臺AGV需要與上位機調(diào)度系統(tǒng)進行通信并根據(jù)調(diào)度指令運營。1.2問題描述在已知AGV運營地圖以及AGV運營速度前提下,采用C++編寫單臺AGV途徑規(guī)劃最短途徑算法,并動態(tài)顯示AGV運營。1.3任務目的針對AGV搬運調(diào)度需求開發(fā)一套AGV途徑規(guī)劃與運營監(jiān)控仿真軟件,合理規(guī)劃單臺AGV運營途徑并動態(tài)顯示運營軌跡。1.4詳細分析由以上簡介可知,AGV在工業(yè)生產(chǎn)中有著很廣泛應用,對AGV導引程序研究是有著很強實際意義。要完畢一種完整AGV途徑規(guī)劃程序,就要考慮地圖,AGV,和途徑三個方面問題。而其中,途徑又是最為重要。本程序規(guī)定仿真顯示,因此顯示某些也是重點。若制作多臺AGV途徑規(guī)劃程序,還應當考慮到途徑重疊,以避免碰撞產(chǎn)生。

二、系統(tǒng)設計2.1類體系設計包括了兩個基類CFixedMap和CAGV,一種單一繼承派生類CPathPlan和一種多重派生類CAGVShow。2.2類定義及函數(shù)描述各個類成員以及成員函數(shù)作用如注解所示。(1).基類:CFixedMapclassCFixedMap{ structCoordinate { intx; inty; intnum; };//記錄點構造體 structcombp { intx1,y1; intx2,y2; };//連通點坐標 structCombname { intnum1; intnum2; };//連通點名 public: intmVexNum;//頂點數(shù) intmEdgNum;//邊數(shù) doublemMatrix[MAX][MAX];//鄰接矩陣 Combnamecomb[MAX];//連通點名 combpcp[MAX];//連通點坐標 CoordinatemVexs[MAX];//頂點集合 intgetx(intn1); intgety(intn2); voidInput();//以文獻方式輸入地圖信息 voidShowMap();//easyx顯示地圖};(2).基類CAGVclassCAGV{ intspeed;//AGV速度 intwidth;//AGV寬度 intlength;//AGV長度public: CAGV(); intgetl();//返回AGV長度 intgetw();//返回AGV寬度 intgets();//返回AGV速度};(3).單一繼承類CPathPlanclassCPathPlan:publicCFixedMap{public: intpath[MAX];//存儲最后一種點 doubledist[MAX];//存儲途徑距離 intv0;//起始點 introute[40];//途徑 intrnum;//途徑頂點數(shù) Coordinaterpoints[MAX];//途徑點集 voidMaptoGraph(); voidDijstra(); voidPutpath();}; (4).多重繼承類CAGVShowclassCAGVShow:publicCPathPlan,publicCAGV{public:#definek(abs(y2-y1))/(abs(x1-x2)) inta,b,c,d; intx1,x2,y1,y2;//AGV實際坐標 inti,j; intl,w,s;//相應類CAGV中有關數(shù)據(jù) voidshow(); };2.3程序流程圖開始開始AGV信息設定自動設立AGV?是自動載入地圖?手動輸入AGV信息手動輸入地圖文獻名載入地圖文獻(文本)多次演示?否顯示地圖途徑文獻輸出途徑規(guī)劃動態(tài)顯示動態(tài)顯示顯示地圖途徑規(guī)劃途徑文獻輸出結束?結束是否是否是否三、程序重點解析3.1文本文檔讀入地圖信息在最初設計中,為了以便調(diào)試與信息錄入,地圖文本做粗糙不堪,但這的確為程序編寫提供了許多便利。如圖,優(yōu)化前地圖文獻:可以看出,全都是由數(shù)字構成,如果不理解程序,就不懂得文獻包括了什么,應當如何修改。在優(yōu)化時,加入了大量提示信息,由此也浮現(xiàn)了問題。由于文獻流輸入無法判斷輸入信息類型,導致了將提示信息錄入而無法得到對的信息錯誤。為解決這一問題,咱們使用了一種簡樸手段,即將提示信息與地圖信息分隔,并分別錄入,然后不再解決提示信息。改進后地圖文本如下:程序中相應代碼://以文獻方式輸入地圖信息voidCFixedMap::Input(){ intpanju; charfname[10]={"map2.txt"}; cout<<"與否載入默認地圖?(1:是,2:否)"; cin>>panju; if(panju==2) { cout<<"請輸入地圖信息文獻名:"; cin>>fname; } ifstreamfile(fname); charuse1[100]; charuse2[100]; charuse3[100]; charuse4[100];//use數(shù)組用來儲存提示信息。 file>>use1; file>>mVexNum;//端點個數(shù) file>>use2; file>>mEdgNum;//邊數(shù) file>>use3; for(inti=0;i<mVexNum;i++)//輸入所有點信息 { file>>mVexs[i].num>>mVexs[i].x>>mVexs[i].y; } file>>use4; for(i=0;i<mEdgNum;i++)//輸入連通點編號 { file>>comb[i].num1>>comb[i].num2; } file.close();}3.2Dijkstra算法程序設計Dijkstra算法重要就是查找和更新,開始時想過用指針來做,日后由于跟地圖輸入結合要用到input函數(shù)里變量,于是就采用了用數(shù)組來儲存距離和途徑。在Diikstra算法中一方面是初始化源點數(shù)組,然后就是查找其她到源點距離近來點,然后就是將該點并入源點集,再就是更新,以上次并入點為起點開始查找,直到遍歷所有點。刷新每次查找后最短距離并保存。代碼如下:voidDijstra() { cout<<"輸入起點:"; cin>>v0; v0--; ints[MAX]; intv; inti; intj; intw; doublemin; for(v=0;v<mVexNum;v++)//初始化S,dist,path { s[v]=0;//0表達未求出最短途徑 dist[v]=mMatrix[v0][v];//開始時假定為最短途徑 if(dist[v]<maxD&&v!=v0) path[v]=v0;//直達狀況 elsepath[v]=-1;//無直達途徑 } dist[v0]=0;//初始時v0屬于s集,v0到v0途徑最短 s[v0]=1; for(i=1;i<mVexNum;i++)//假設由一種中轉點到達會近些,驗證。再假設由兩個中轉點到達會近些,驗證。窮舉 { min=maxD; for(w=0;w<mVexNum;w++)//找一種近來到點,下標裝入v if(s[w]==0&&dist[w]<min)//點w不屬于s集且離v0更近 { v=w;//經(jīng)點w中轉 min=dist[w]; } s[v]=1;//將v并入S,由v0到達v點最短距離為min,假設由v0到v再由v到別的各點,更新當前最后一種點及距離 for(j=0;j<mVexNum;j++) if(s[j]==0&&(min+mMatrix[v][j]<dist[j]))//如果多通過一種點v到點j距離更短,更新 { dist[j]=min+mMatrix[v][j]; path[j]=v;//點序號 } } }3.3動態(tài)顯示某些問題重要是集中在用easyx畫圖上,從直線到斜線到反向直線和任意一種線段,所有用循環(huán)和間歇控制,重要工作就是每隔一種間隔繪制一定圖像使得間隔連起來一種整體是一種順暢連貫運營圖。說起來簡樸可實踐起來哪怕是循環(huán)中畫圖和清空順序不對,顯示都會是一種完全不像樣運營線路,因此整個程序某些對邏輯規(guī)定比較嚴格,每個細節(jié)都要重復重復地檢查和試運營才干達到不出錯地步。尋找錯誤幾乎成了整個程序設計重要工作,但是也是在告訴咱們,編好程序不一定要多么高檔,而是少出錯。程序代碼過多,參見cpp文獻。

四、程序運營成果展示4.1地圖文獻4.2運營窗口4.3動態(tài)顯示窗口4.4.fops.txt途徑輸出4.5變化地圖,變化AGV參數(shù)運營。(1).地圖文獻(2).運營窗口,動態(tài)顯示,fops途徑文獻輸出。五、程序設計小結5.1程序設計缺陷和局限性地圖輸入方式雖然采用了文獻流,但是實用價值依然不高,負責輸入成員曾經(jīng)考慮過使用圖片載入,但查閱有關資料后由于難度較大而放棄。算法革新未能實現(xiàn),直接使用了比較簡樸和落后Dijkstra算法,程序解決能力并不強。多臺AGV運營未能實現(xiàn)。后期優(yōu)化同步,嘗試將1臺AGV增長到兩臺,但是由于動態(tài)顯示某些程序特殊性未能完畢。動態(tài)顯示比較流暢,然而運用sleep辦法完畢顯示某些會將整個程序凍結,計時器沒能使用,是一種遺憾。程序界面不夠和諧,

溫馨提示

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

評論

0/150

提交評論