导购机器人程序部分.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
导购机器人程序部分.doc

程序部分: 程序的目的是让机器人自主完成导购过程与跟随过程,以及最后的分类与装袋过程,现分不同的阶段逐一讨论: 一、导购阶段 导购阶段要求机器人自主寻找已经设定好的商品位置,主动前往并且绕过路上的障碍(可能是绕过障碍,或者直接换路行走)。分析可知,该阶段的重点是机器人自动生成最优路径,并且在最优路径检测到障碍物之后,重新生成最优路径,并沿着新生成的路径行走。 考虑到现行流行rpg游戏人物定位方法可以应用到路径自动生成中,我们预在游戏人物定位算法的基础上编辑机器人自定位算法。游戏中人物当前位置被记录,如果鼠标指向已经储存在电脑中的地图某处,计算机就会自动生成最优路径并且命令人物沿着生成路径行走。如果人物行走过程中遇到移动型障碍(我们称之为卡位)一直挡在路径前方,电脑就会随时更新生成最优路径,绕开障碍达到目的地。在最优路径设计过程中,依靠先验地图(可行路线与不可达位置)和后验勘测(发现障碍并生成新路径)的算法可以应用在机器人实践中。这种算法被专业人士称为A星算法。 A星算法简介:首先将地图分为不同的节点,储存节点与相邻节点的关系,将地图中不可达的地方设置为死节点。其次,从起始点开始检索相邻活节点,并计算相邻节点的G值与F值。 如上图所示,G值可以看做从绿色节点到周围节点的距离,H值是可以看做相邻节点到目的地红色节点的距离。在计算G值时,正向相邻记作10,斜向相邻记作14(1.414倍),之所以不用小数是考虑到计算机执行效率。而计算H值时采用简单的曼哈顿算法(移动像过街道一样只有横向与纵向位移),每经过一个格子加十,死节点也需计算进入。这样在上图的节点中生成了F=G+H值(左上角F,左下角G,右下角H),选取F值最小的节点,重复检索该节点的相邻节点(父节点不予考虑以免重复检索)。这样重复下去就可以生成一条相对较短的路径 如上图所示就是A星算法生成最短路径的过程。A星算法避免了深度优先和广度优先算法的遍历,也避免了狄杰斯特拉算法的繁琐,用较简单的方法找到了类优路径。 下面给出A星算法的伪代码实现: heap.add(firstnode) //将开始节点加入堆,同时也是加入openlist do { fleast=heap.pop(); //从openlist取fcost最小的元素 current=fleast; //取出的元素作为当前节点 fleast.flag=1 //1:on close 0:not on open nor on close for(int i=current.x-1;icurrent.x+1;i++) //考察当前节点的所有相邻节点 for(int j=current.y-1;jcurrent.y+1;j++) { if(map[i][j]!=unwalkable||!onclose(node(i,j))) //相邻节点可通并且没有考察过 { if(!onopen(node(i,j))) //相邻节点不在openlist中 { heap.add(node(i,j)); //加入openlist node(i,j).parent=current; //设置相邻节点的父节点为当前节点 node(i,j).calculate(f,g,h); //重新计算fcost,gcost,hcost if(node(i,j)==dest) //如果加入的节点是目标点则找到路径 path=find; } else { temp.gcost=parent.gcost+addcost; //相邻节点已经在openlist中 node(i,j).hcost=10*(abs(i-parent.x)+abs(j-parent.y)); node(i,j).fcost=node(i,j).gcost+node(i,j).hcost; if(tempgcostnode(i,j).gcost) node(i,j).parent=current; node(i,j).recaculate(f,g,h); //重新计算fcost,gcost,hcost } } }while(!hp.isempty()) //如果堆空则没有找到路径 if(path==find) outpath; //输出路径 el

文档评论(0)

love + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档