- 240.26 KB
- 15页
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'C++大作业项目报告——AGV路径规划与运行仿真软件设计小组成员:日期:2015年6月16日指导老师:15
目录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八、各小组成员个人报告1515
一、课题背景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的路径规划程序,还应当考虑到路径的重叠,以避免碰撞产生。15
二、系统设计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显示地图15
};(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程序流程图15
开始AGV信息设定自动设置AGV?是自动载入地图?手动输入AGV信息手动输入地图文件名载入地图文件(文本)多次演示?否显示地图路径文件输出路径规划动态显示动态显示显示地图路径规划路径文件输出结束?结束是否是否是否15
三、程序重点解析3.1文本文档读入地图信息在最初的设计中,为了方便调试与信息录入,地图文本做的粗糙不堪,但这确实为程序编写提供了许多便利。如图,优化前的地图文件:可以看出,全都是由数字组成,如果不了解程序,就不知道文件包含了什么,应该怎样修改。在优化时,加入了大量提示信息,由此也出现了问题。由于文件流输入无法判断输入的信息类型,造成了将提示信息录入而无法得到正确信息的错误。为解决这一问题,我们使用了一个简单的手段,即将提示信息与地图信息分隔,并分别录入,然后不再处理提示信息。改进后的地图文本如下:程序中的相应代码://以文件方式输入地图信息voidCFixedMap::Input(){intpanju;charfname[10]={"map2.txt"};cout<<"是否载入默认地图?(1:是,2:否)";cin>>panju;if(panju==2){cout<<"请输入地图信息文件名:";cin>>fname;15
}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>mVexs[i].num>>mVexs[i].x>>mVexs[i].y;}file>>use4;for(i=0;i>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;15
for(v=0;v
您可能关注的文档
- 新建6400万块煤矸石页岩环保砖项目报告书.doc
- 物流三班第五组供应链管理第一次项目报告.ppt
- 公司绩效管理项目报告.ppt
- PVA粘均分子量测定项目报告.ppt
- 《科技项目报告模版》PPT课件.ppt
- 丙烯酸甲酯项目报告.ppt
- 本科教学工作水平评估特色项目报告.pdf
- 北京中广信亦庄4号地项目报告(2005年-57页).ppt
- 建行和平支行神秘人项目报告PPT.ppt
- 奥特莱斯-西咸项目报告.ppt
- 某公司收购风电项目报告.doc
- 罗兰贝格上海国际赛车场项目报告.pdf
- 罗兰贝格天狮管控项目报告好.pdf
- 林木团队KAB项目报告书样本.doc
- QCC项目报告范例7.pdf
- c语言项目报告.pdf
- 怎样撰写项目报告.pdf
- 美国带薪实习计划项目报告(for students).pdf