版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用C+大作业工程报告AGV路径规划与运行仿真软件设计小组成员:日期:2021年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程序设计的缺陷
2、和缺乏 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路径规划
3、与运行监控仿真软件,合理规划单台AGV运行路径并动态显示运行轨迹.1.4具体分析由以上介绍可知,AGV在工业生产中有着很广泛的应用,对AGV导引程序的研究是有着很强实际意义的.要完成一个完整的AGV路径规划程序,就要考虑地图,AGV,和路径三个方面的问题.而其中,路径又是最为重要的.本程序要求仿真显示,所以显示局部也是重点. 假设制作多台AGV的路径规划程序,还应当考虑到路径的重叠,以防止碰撞产生.、系统设计2.1类体系设计继承的派生类CPathPlan和一个多重派包含了两个基类 CFixedMap和CAGV, 个单 生类 CAGVShow.2.2类定义及函数描述各个类的成员以及成员函数的作用
4、如注解所示.(1) .基类:CFixedMapclass CFixedMapstruct Coordin ateint兀int y;int num;/记录点的结构体struct combpint x1,y1;int x2,y2;/连通点坐标struct Comb nameint nu ml;int nu m2;/连通点名 public:/顶点数/边数/邻接矩阵/连通点名/连通点坐标/顶点集合int mVexNum;int mEdgNum;double mMatrixMAXMAX;Comb name combMAX;combp cpMAX;Coordi nate mVexsMAX;int get
5、x(i nt n 1);int gety(i nt n 2);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 CPathPla n:public CFixedMap public:in t
6、 pathMAX; double distMAX;in t v0;int route40;int rnum;Coordi nate rpoi ntsMAX; void MaptoGraph();/存放最后一个点/存放路径距离/起始点/路径/路径顶点数路径点集void Dijstra();void Putpath();(4) 多重继承类CAGVShowclass CAGVShow:public CPathPla n,public CAGV public:#define k (abs(y2-y1)/(abs(x1-x2)int a,b,c,d;/AGV实际坐标/对应类CAGV中的相关数据int x
7、1,x2,y1,y2;int i,j;int l,w,s; void show();2.3程序流程图二、程序重点解析3.1文本文档读入地图信息在最初的设计中,为了方便调试与信息录入, 地图文本做的粗糙不堪, 但这确实为程序编写 提供了许多便利.如图,优化前的地图文件:T13p4.txr -迅事本2 DOI1:1II-3 n_3 O5 OO1 53 9 一IOO 51'O 55 2o O3 5O 457 44 3E E0 5O 11E6& 8O 7s q59 OO 2LQ2 O可以看出,全都是由数字组成,如果不了解程序,就不知道文件包含了什么,应该怎样修改. 在优化时,参加了大量
8、提示信息, 由此也出现了问题. 由于文件流输入无法判断输入的信息 类型,造成了将提示信息录入而无法得到正确信息的错误.为解决这一问题,我们使用了一个简单的手段,即将提示信息与地图信息分隔,并分别录入,然后不再处理提示信息.改良后的地图文本如下:程序中的相应代码:/以文件方式输入地图信息void CFixedMap:l nput()int panju;char fname10="map2.txt"cout<<"是否载入默认地图? (1:是,2:否)cin> >panju;if(panju=2)cout<<"请输入地图信息
9、文件名cin>> fname;ifstream file(fname); char use1100;char use2100;char use3100;/use数组用来储存提示信息./端点个数/边数char use4100; file>>use1; file»mVexNum; file>>use2; file»mEdgNum;file>>use3;for(int i=O;i<mVexNum;i+) / 输入所有点的信息file»mVexsi. num> >mVexsi.x»mVexsi.y
10、;file>>use4;for(i=0;i<mEdgNum;i+) / 输入连通点编号 file»combi. nu m1»combi. nu m2; file.close();3.2 Dijkstra算法程序设计Dijkstra算法主要就是查找和更新,开始时想过用指针来做,后来由于跟地图的输入结合 要用到in put函数里的变量,于是就采用了用数组来储存距离和路径.在Diikstra算法中首先是初始化源点数组,然后就是查找其他到源点距离最近的点,然后就是将该点并入源点集,再就是更新,以上次并入的点为起点开始查找,直到遍历所有点.刷新每次查找后的最短距离并
11、保存.代码如下:void Dijstra()cout<<"输入起点:"cin> >v0;v0-;int sMAX;in t v;int i;int j;int w;double mi n;for(v=0;v<mVexNum;v+) / 初始化 S,dist,pathsv=0;0表示未求出最短路径distv=mMatrixvOv;/开始时假定为最短路径if(distv<maxD && v!=v0)pathv=v0;/ 直达情况else pathv=-1;/ 无直达路径distvO=O; /初始时v0属于s集,v0到v0路径最
12、短sv0=1;for(i=1;i<mVexNum;i+)/假设由一个中转点到达会近些,验证.再假设由两个中转点到达会近些,验证.穷举mi n=maxD;for(w=0;w<mVexNum;w+) /找一个最近到的点,下标装入vif(sw=O && distw<min)/ 点 w 不属于 s 集且离 v0 更近v=w;/经点w中转min=distw;sv=1;/将v并入S由v0到达v点最短距离为 min,假设由v0到v再由v到其余各点,更新当前最后一个点及距离for(j=0;j<mVexNum;j+)if(sj=0 && (mi n+mMa
13、trixvj<distj)/ 如果多经过一个点 v 到点j的距离更短,更新distj=mi n+mMatrixvj;pathj=v; /点的序号3.3动态显示局部问题主要是集中在用 easyx画图上,从直线到斜线到反向直线和任意一个线段,全部用循 环和间歇限制,主要工作就是每隔一个间隔绘制一定的图像使得间隔连起来的一个整体是一 个顺畅的连贯的运行图.说起来简单可实践起来哪怕是循环中画图和清空的顺序不对,显示的都会是一个完全不像样的运行线路,所以整个程序局部对逻辑的要求比拟严格,每个细节都要重复重复地检查和试运行才能到达不出错的地步.寻找错误几乎成了整个程序设计的主要工作,不过也是在告诉我
14、们,编好程序不一定要多么高级,而是少犯错.程序代码过多,参见 cpp文件.四、程序运行结果展示4.1地图文件 map2.txt - :£事本文吻叭幣iE書弍Q堂看稻訓H虑的个数输入所有数据前谙摊行1:2&依祕输入所有点楚编号,乌遅标启空格隔卄八1 50 50 2 250 50 3 550 50 4 750 50 5 50 150 6 25Q 350 10 250 3E0 11 550 350 12 750 350 13 50 550 U 输入所有互相连通的点的编号:1 2 2 3 3 4 5 6 7 5 10 10 11 11 12 13 14 14 153 7 7 11 1
15、1 15 4 8 9 12 12 16 1 S 6 11 G 9 3 124.2运行窗口O1 .55.n7 5o o551- nz150 8 750 150 9 50550 550 16 750 5509 9 13 S 10 :0 14卜芝虹+程序D能帕扶陀业克成虧1.0宀語;否2txt# 2 I是W-)7l:詈>:名2;107 件,ll图畫息l: H/k疆豁甲a;4呵呵入地一後点一重寡輩all eagaqSr 否入入入乂扁贸入婪口入入項否 俞4製是是pr>l< & < h ¥a:-l*?Q y4.3动态显示窗口4.4 . fops.txt路径输出4.
16、5改变地图,改变 AGV参数运行(1) 地图文件(2) 运行窗口,动态显示,fops路径文件输出.-nuj否in 2' 3 2S严丿 丄沁否 J:名和 薜蠶就輕.isMff TAAfx' 殳曇曹;ress anv key to continue丁 究时 n匸二| 回 is五、程序设计小结5.1程序设计的缺陷和缺乏(1) 地图输入的方式虽然采用了文件流,但是实用价值仍然不高,负责输入的组员曾经 考虑过使用图片载入,但查阅相关资料后由于难度较大而放弃.(2)算法的革新未能实现,直接使用了比拟简单和落后的Dijkstra算法,程序的处理能力并不强.(3) 多台AGV运行未能实现.后期优化的同时,尝试将1台AGV增加到两台,但是由于动态显示局部程序的特殊性未能完成.(4) 动态显示比拟流畅,然而利用sleep方法完成的显示局部会将整个程序冻结,计时器没能使用,是一个遗憾.(5) 程序的界面不够友好,由于前期各项
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论