C++大作业综合项目报告_第1页
C++大作业综合项目报告_第2页
C++大作业综合项目报告_第3页
C++大作业综合项目报告_第4页
C++大作业综合项目报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++大作业项目报告——AGV途径规划与运营仿真软件设计小构成员:日期:6月16日指引教师:目录C++大作业项目报告 1——AGV路径规划与运行仿真软件设计 1一、课题背景 31.1案例背景 31.2问题描述 31.3任务目标 31.4具体分析 3二、系统设计 42.1类体系设计 42.2类定义及函数描述 42.3程序流程图 5三、程序重点解析 73.1文本文档读入地图信息 73.2Dijkstra算法程序设计 83.3动态显示部分 9四、程序运行结果展示 104.1地图文件 104.2运行窗口 104.3动态显示窗口 114.5改变地图,改变AGV参数运行。 12五、程序设计小结 145.1程序设计的缺陷和不足 145.2设计中遇到的困难 14六、参考资料 15七、源程序及相关文件 15八、各小组成员个人报告 15

一、课题背景1.1案例背景AGV(自动导引车)由于运动灵活,被广泛用于生产车间物料搬运。由于单机搬运能力有限,实践中经常需要由多台AGV同步进行搬运。由于AGV普通无法感知全局信息,为避免多AGV发生碰撞并提高AGV搬运效率,多台AGV需要与上位机调度系统进行通信并根据调度指令运营。1.2问题描述在已知AGV运营地图以及AGV运营速度前提下,采用C++编写单台AGV途径规划最短途径算法,并动态显示AGV运营。1.3任务目的针对AGV搬运调度需求开发一套AGV途径规划与运营监控仿真软件,合理规划单台AGV运营途径并动态显示运营轨迹。1.4详细分析由以上简介可知,AGV在工业生产中有着很广泛应用,对AGV导引程序研究是有着很强实际意义。要完毕一种完整AGV途径规划程序,就要考虑地图,AGV,和途径三个方面问题。而其中,途径又是最为重要。本程序规定仿真显示,因此显示某些也是重点。若制作多台AGV途径规划程序,还应当考虑到途径重叠,以避免碰撞产生。

二、系统设计2.1类体系设计包括了两个基类CFixedMap和CAGV,一种单一继承派生类CPathPlan和一种多重派生类CAGVShow。2.2类定义及函数描述各个类成员以及成员函数作用如注解所示。(1).基类:CFixedMapclassCFixedMap{ structCoordinate { intx; inty; intnum; };//记录点构造体 structcombp { intx1,y1; intx2,y2; };//连通点坐标 structCombname { intnum1; intnum2; };//连通点名 public: intmVexNum;//顶点数 intmEdgNum;//边数 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;//途径顶点数 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中有关数据 voidshow(); };2.3程序流程图开始开始AGV信息设定自动设立AGV?是自动载入地图?手动输入AGV信息手动输入地图文献名载入地图文献(文本)多次演示?否显示地图途径文献输出途径规划动态显示动态显示显示地图途径规划途径文献输出结束?结束是否是否是否三、程序重点解析3.1文本文档读入地图信息在最初设计中,为了以便调试与信息录入,地图文本做粗糙不堪,但这的确为程序编写提供了许多便利。如图,优化前地图文献:可以看出,全都是由数字构成,如果不理解程序,就不懂得文献包括了什么,应当如何修改。在优化时,加入了大量提示信息,由此也浮现了问题。由于文献流输入无法判断输入信息类型,导致了将提示信息录入而无法得到对的信息错误。为解决这一问题,咱们使用了一种简朴手段,即将提示信息与地图信息分隔,并分别录入,然后不再解决提示信息。改进后地图文本如下:程序中相应代码://以文献方式输入地图信息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数组用来储存提示信息。 file>>use1; file>>mVexNum;//端点个数 file>>use2; file>>mEdgNum;//边数 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函数里变量,于是就采用了用数组来储存距离和途径。在Diikstra算法中一方面是初始化源点数组,然后就是查找其她到源点距离近来点,然后就是将该点并入源点集,再就是更新,以上次并入点为起点开始查找,直到遍历所有点。刷新每次查找后最短距离并保存。代码如下: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;//经点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动态显示某些问题重要是集中在用easyx画图上,从直线到斜线到反向直线和任意一种线段,所有用循环和间歇控制,重要工作就是每隔一种间隔绘制一定图像使得间隔连起来一种整体是一种顺畅连贯运营图。说起来简朴可实践起来哪怕是循环中画图和清空顺序不对,显示都会是一种完全不像样运营线路,因此整个程序某些对逻辑规定比较严格,每个细节都要重复重复地检查和试运营才干达到不出错地步。寻找错误几乎成了整个程序设计重要工作,但是也是在告诉咱们,编好程序不一定要多么高档,而是少出错。程序代码过多,参见cpp文献。

四、程序运营成果展示4.1地图文献4.2运营窗口4.3动态显示窗口4.4.fops.txt途径输出4.5变化地图,变化AGV参数运营。(1).地图文献(2).运营窗口,动态显示,fops途径文献输出。五、程序设计小结5.1程序设计缺陷和局限性地图输入方式虽然采用了文献流,但是实用价值依然不高,负责输入成员曾经考虑过使用图片载入,但查阅有关资料后由于难度较大而放弃。算法革新未能实现,直接使用了比较简朴和落后Dijkstra算法,程序解决能力并不强。多台AGV运营未能实现。后期优化同步,尝试将1台AGV增长到两台,但是由于动态显示某些程序特殊性未能完毕。动态显示比较流畅,然而运用sleep办法完毕显示某些会将整个程序冻结,计时器没能使用,是一种遗憾。程序界面不够和谐,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论