C++大作业项目报告

上传人:可**** 文档编号:209807750 上传时间:2023-05-15 格式:DOC 页数:20 大小:245.04KB
收藏 版权申诉 举报 下载
C++大作业项目报告_第1页
第1页 / 共20页
C++大作业项目报告_第2页
第2页 / 共20页
C++大作业项目报告_第3页
第3页 / 共20页
资源描述:

《C++大作业项目报告》由会员分享,可在线阅读,更多相关《C++大作业项目报告(20页珍藏版)》请在装配图网上搜索。

1、C+大作业项目报告AGV 途径规划与运营仿真软件设计小组成员: 日期:2023年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 途径规划与运营监控仿真软件,合

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

4、:CFixedMapclass CFixedMapstruct 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

5、);int gety(int n2);void 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; /存放最后一个点doubl

6、e distMAX; /存放途径距离int 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; /相应类CAG

7、V中的相关数据void show();2.3程序流程图开始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;

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

10、始查找,直到遍历所有点。刷新每次查找后的最短距离并保存。代码如下:void 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

12、.3动态显示部分问题重要是集中在用easyx画图上,从直线到斜线到反向直线和任意一个线段,所有用循环和间歇控制,重要工作就是每隔一个间隔绘制一定的图像使得间隔连起来的一个整体是一个顺畅的连贯的运营图。说起来简朴可实践起来哪怕是循环中画图和清空的顺序不对,显示的都会是一个完全不像样的运营线路,所以整个程序部分对逻辑的规定比较严格,每个细节都要反复反复地检查和试运营才干达成不犯错的地步。寻找错误几乎成了整个程序设计的重要工作,但是也是在告诉我们,编好程序不一定要多么高级,而是少犯错。程序代码过多,参见cpp文献。 四、程序运营结果展示4.1地图文献4.2运营窗口4.3动态显示窗口4.4fops.t

13、xt途径输出4.5改变地图,改变AGV参数运营。(1).地图文献(2).运营窗口,动态显示,fops途径文献输出。五、程序设计小结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教程。七、源程序及相关文献见所传电子稿。八、各小组成员个人报告单独成份,见所传电子稿。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!