收藏 分销(赏)

C++大作业综合项目报告.doc

上传人:精*** 文档编号:2993128 上传时间:2024-06-12 格式:DOC 页数:20 大小:244.54KB
下载 相关 举报
C++大作业综合项目报告.doc_第1页
第1页 / 共20页
C++大作业综合项目报告.doc_第2页
第2页 / 共20页
C++大作业综合项目报告.doc_第3页
第3页 / 共20页
C++大作业综合项目报告.doc_第4页
第4页 / 共20页
C++大作业综合项目报告.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

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

3、运营途径并动态显示运营轨迹。1.4详细分析 由以上简介可知,AGV在工业生产中有着很广泛应用,对AGV导引程序研究是有着很强实际意义。要完毕一种完整AGV途径规划程序,就要考虑地图,AGV,和途径三个方面问题。而其中,途径又是最为重要。本程序规定仿真显示,因此显示某些也是重点。若制作多台AGV途径规划程序,还应当考虑到途径重叠,以避免碰撞产生。二、系统设计2.1类体系设计包括了两个基类CFixedMap和CAGV,一种单一继承派生类CPathPlan和一种多重派生类CAGVShow。2.2类定义及函数描述各个类成员以及成员函数作用如注解所示。(1).基类:CFixedMapclass CFix

4、edMapstruct Coordinateint x;int y;int num;/记录点构造体struct combpint x1,y1;int x2,y2;/连通点坐标struct Combnameint num1;int num2;/连通点名public:int mVexNum; / 顶点数int mEdgNum; / 边数double mMatrixMAXMAX; / 邻接矩阵Combname combMAX; /连通点名combp cpMAX; /连通点坐标Coordinate mVexsMAX; / 顶点集合int getx(int n1);int gety(int n2);vo

5、id Input();/以文献方式输入地图信息void ShowMap();/easyx显示地图;(2).基类CAGVclass CAGVint speed; /AGV速度int width; /AGV宽度int length; /AGV长度public:CAGV();int getl(); /返回AGV长度int getw(); /返回AGV宽度int gets(); /返回AGV速度;(3).单一继承类CPathPlanclass CPathPlan:public CFixedMappublic:int pathMAX; /存储最后一种点double distMAX; /存储途径距离int

6、 v0; /起始点int route40; /途径int rnum; /途径顶点数Coordinate rpointsMAX;/途径点集void MaptoGraph();void Dijstra();void Putpath();(4).多重继承类CAGVShowclass CAGVShow:public CPathPlan,public CAGVpublic:#define k (abs(y2-y1)/(abs(x1-x2)int a,b,c,d;int x1,x2,y1,y2; /AGV实际坐标int i,j;int l,w,s; /相应类CAGV中有关数据void show();2.3

7、程序流程图开始AGV信息设定自动设立AGV?是自动载入地图?手动输入AGV信息手动输入地图文献名载入地图文献(文本)多次演示?否显示地图途径文献输出途径规划动态显示动态显示显示地图途径规划途径文献输出结束?结束是否是否是否三、程序重点解析3.1文本文档读入地图信息在最初设计中,为了以便调试与信息录入,地图文本做粗糙不堪,但这的确为程序编写提供了许多便利。如图,优化前地图文献:可以看出,全都是由数字构成,如果不理解程序,就不懂得文献包括了什么,应当如何修改。在优化时,加入了大量提示信息,由此也浮现了问题。由于文献流输入无法判断输入信息类型,导致了将提示信息录入而无法得到对的信息错误。为解决这一问

8、题,咱们使用了一种简朴手段,即将提示信息与地图信息分隔,并分别录入,然后不再解决提示信息。改进后地图文本如下:程序中相应代码:/以文献方式输入地图信息void CFixedMap:Input()int panju;char fname10=map2.txt;coutpanju;if(panju=2)coutfname;ifstream file(fname);char use1100;char use2100;char use3100;char use4100; /use数组用来储存提示信息。fileuse1;filemVexNum; /端点个数fileuse2;filemEdgNum; /边

9、数fileuse3;for(int i=0;imVexsi.nummVexsi.xmVexsi.y;fileuse4;for(i=0;icombi.num1combi.num2;file.close();3.2 Dijkstra 算法程序设计Dijkstra 算法重要就是查找和更新,开始时想过用指针来做,日后由于跟地图输入结合要用到input函数里变量,于是就采用了用数组来储存距离和途径。在Diikstra算法中一方面是初始化源点数组,然后就是查找其她到源点距离近来点,然后就是将该点并入源点集,再就是更新,以上次并入点为起点开始查找,直到遍历所有点。刷新每次查找后最短距离并保存。代码如下:vo

10、id Dijstra()coutv0;v0-;int sMAX;int v;int i;int j;int w;double min;for(v=0;vmVexNum;v+) /初始化S,dist,pathsv=0; /0表达未求出最短途径distv=mMatrixv0v; /开始时假定为最短途径if(distvmaxD & v!=v0)pathv=v0; /直达状况else pathv=-1; /无直达途径distv0=0; /初始时v0属于s集,v0到v0途径最短sv0=1;for(i=1;imVexNum;i+) /假设由一种中转点到达会近些,验证。再假设由两个中转点到达会近些,验证。穷

11、举min=maxD;for(w=0;wmVexNum;w+) /找一种近来到点,下标装入vif(sw=0 & distwmin) /点w不属于s集且离v0更近v=w; /经点w中转min=distw;sv=1; /将v并入S,由v0到达v点最短距离为min,假设由v0到v再由v到别的各点,更新当前最后一种点及距离for(j=0;jmVexNum;j+)if(sj=0 & (min+mMatrixvjdistj) /如果多通过一种点v到点j距离更短,更新distj=min+mMatrixvj;pathj=v; /点序号3.3动态显示某些问题重要是集中在用easyx画图上,从直线到斜线到反向直线和

12、任意一种线段,所有用循环和间歇控制,重要工作就是每隔一种间隔绘制一定图像使得间隔连起来一种整体是一种顺畅连贯运营图。说起来简朴可实践起来哪怕是循环中画图和清空顺序不对,显示都会是一种完全不像样运营线路,因此整个程序某些对逻辑规定比较严格,每个细节都要重复重复地检查和试运营才干达到不出错地步。寻找错误几乎成了整个程序设计重要工作,但是也是在告诉咱们,编好程序不一定要多么高档,而是少出错。程序代码过多,参见cpp文献。 四、程序运营成果展示4.1地图文献4.2运营窗口4.3动态显示窗口4.4fops.txt途径输出4.5变化地图,变化AGV参数运营。(1).地图文献(2).运营窗口,动态显示,fo

13、ps途径文献输出。五、程序设计小结5.1程序设计缺陷和局限性(1) 地图输入方式虽然采用了文献流,但是实用价值依然不高,负责输入成员曾经考虑过使用图片载入,但查阅有关资料后由于难度较大而放弃。(2) 算法革新未能实现,直接使用了比较简朴和落后Dijkstra 算法,程序解决能力并不强。(3) 多台AGV运营未能实现。后期优化同步,尝试将1台AGV增长到两台,但是由于动态显示某些程序特殊性未能完毕。(4) 动态显示比较流畅,然而运用sleep办法完毕显示某些会将整个程序冻结,计时器没能使用,是一种遗憾。(5) 程序界面不够和谐,由于前期各项工作完毕进度不如人意,程序MFC改编也未能完毕。5.2设计中遇到困难重要是小构成员各个某些衔接问题。人们各自完毕后,程序整合比想象中困难许多,挥霍了大量时间。由于每个人使用变量习惯不同,几种某些一开始完全分离,往往是一种小问题就要排查半天才干解决。六、参照资料1.Visual C+程序设计2.Sunshine 博客 图邻接矩阵存储C语言实现。3豆丁网最短途径Dijkstra算法。4.easyx教程。七、源程序及有关文献见所传电子稿。八、各小构成员个人报告单独成分,见所传电子稿。

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服