导购机器人计划书.docx

上传人:b****9 文档编号:23416793 上传时间:2023-05-16 格式:DOCX 页数:51 大小:3.28MB
下载 相关 举报
导购机器人计划书.docx_第1页
第1页 / 共51页
导购机器人计划书.docx_第2页
第2页 / 共51页
导购机器人计划书.docx_第3页
第3页 / 共51页
导购机器人计划书.docx_第4页
第4页 / 共51页
导购机器人计划书.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

导购机器人计划书.docx

《导购机器人计划书.docx》由会员分享,可在线阅读,更多相关《导购机器人计划书.docx(51页珍藏版)》请在冰豆网上搜索。

导购机器人计划书.docx

导购机器人计划书

 

导购机器人计划书

 

一.机械部分

1.机器人总装配图

主视图:

俯视图:

侧视图:

2.机器人各零部件介绍

2.1三角钢

我们机器人的构架由三角刚来搭建,三角钢较易购买,易打孔与其他构件连接,而且性能稳定。

三角钢:

2.2底框

底座俯视图:

底座主视图:

上面是底座的俯视图和主视图,是50cm乘50cm的方形结构,由三角钢搭成。

2.3轮子

底座框架前面和后面的正中间有两个从动轮(万向轮),20mm的宽度,类似超市里的手推车的前轮,起到支撑和导向的作用。

前后万向轮:

左右两侧是两个主动轮,用俩控制行走和转向,每个轮子分别用一个电机控制。

左右主动轮:

转向轮和电机和底边三角钢:

2.4机器人直线行走及转向问题

当左右轮子转速相等时,机器人走直线。

在机器人转弯的问题上,我们采用原地转的方式,即机器人向左转时,左侧轮子反转,右侧轮子正转,同理,机器人右转时左轮正传右轮反转。

用原地转能很好地控制机器人的位置,不至于在转弯过程中机器人因发生位移而使后面的运动跑偏。

底部是一块铁板,铺在方形框架上,用来放电机等其他东西。

底板:

从底边框架的立起四个三角钢的竖直杆,用来支撑其他结构。

在杆的中部和顶部会搭建两个平板,中部的平板用来放置传送带的电机和篮子,顶部的电机用来丝杠电脑及其它的一些东西。

2.5底座加杆

底座加杆后视图:

支撑平板用的是与竖直丝杠焊接的三角铁。

2.6三角铁及固定

三角铁:

三角铁固定于三角钢上:

2.7电机

下面介绍一下电机和传送带分类装置。

电机简介:

电机固定板:

我们的机器人总共需要五个电机,左右两个轮子各一个,传送带两侧各一个,还有一个用来收放绳子。

2.8分类装置介绍:

我们用传送带的传送来完成分类任务。

传送带左侧和右侧各焊接一个矩形铁框,框下吊着一个布袋子,布袋用来缓冲压力,以免物品落下后摔碎。

传送带电机的正传和反转由程序控制,电机带动传送带向左或向右转动,从而使放到传送带上的物品掉到左侧(生活类)或右侧(食品类)的篮子里,达到分类的目的。

本来我们打算只用一个电动机,另一个带轮用从动轮,但考虑到一个电机可能动力不足,最后决定两侧带轮均由电机控制。

传送带装配图:

下面详细介绍一下传送带这一部分用到的各个部件:

传送带履带:

传送带带轮:

传送带履带和带轮:

传送带固定1:

传送带固定2:

传送带装配图及固定:

左右分类框及固定板:

2.9提篮装置

下面介绍机器人完成导购任务后,最后一步走向收银台将货物打包并提到收银台上的过程。

由于我们的传送带分类装置已经直接把两类物品分别放到两个购物袋里面,所以机器人下面只需将购物袋从篮子里面提出即圆满完成了任务。

我们设计用一个丝杠来完成提袋的任务。

购物袋放在篮子里,两个袋口用一根线穿起来(不系),与左右两侧连接的两根线最后均通过一根总线与丝杠连接。

丝杠上面还有一节杆,杆端有一个定滑轮,总线通过定滑轮连接到下面的一个电机,通过电机的转动来控制总线的收放,从而来完成购物袋提起和放下的任务。

丝杠水平放置,可以前后运动。

机器人到达收银台后,在完成提起购物袋的过程中,丝杠往前伸,同时,控制拉绳子的电机开始转动,使绳子开始收缩。

这两个部分的综合作用,能使购物袋同时提到收银台的上方,最后电机反转,绳子伸长,购物袋放到桌面上,即圆满完成任务!

下面具体介绍一下提篮的装置:

2.9.1提篮工具总图:

2.9.2丝杠和电机:

2.9.3混合步进电机86BYGHS:

该电机放在丝杠的一端,电机转动来控制丝杠的前伸和后缩,从而来完成提袋和放袋的过程。

2.9.4定滑轮:

我们需要两个这样的定滑轮,一个固定在丝杠的前端,另一个固定在框架的上平的下方。

滑轮固定1:

滑轮固定2:

这个滑轮固定装置相当于一个轴承,把滑轮固定在滑轮固定1当中。

2.9.5拉绳电机

下面讲一下转动电机部分。

拉绳转轴:

上面是拉绳转轴,中间有一个洞,绳子从洞中穿过。

该转轴与电机相连,电机固定在中间的平板上。

电机转动时带动拉绳转轴旋转,从而达到收缩绳子的目的。

拉绳电机及固定:

在机器人完成任务的过程中,需要电脑随时控制,电脑放在框架中部的平板上。

2.9.6电脑:

3:

重要步骤介绍

以上,我把机器人地卜师每个机械部分及其工作原理都做了详细介绍,下面具体介绍一下机器人执行任务两个重要步骤的动作。

3.1重要步骤一:

物品分类

在分类过程中,人取物品后放在传送带上,机器人的程序控制传送带电机旋转,物品即落入左边或右边的框中,完成分类任务。

机器人在进行物品分类:

3.2重要步骤二:

提袋过程

在完成所有的导购任务后,机器人走到收银台前面,机器人转向,正面面对收银台。

然后开始完成提袋任务。

购物袋很难用solidworks画图画出来,就简单地用一个立方体代替。

在该过程中,固定在框架中部控制拉绳的电机开始转动,绳子收缩,两个购物袋同时从左右两侧的框中被提到半空中。

机器人在提袋:

3.3重要步骤三:

放袋过程

最后,控制丝杠的电机转动,丝杠前伸,同时控制拉绳的电机反转,使绳子略微放长。

两个购物袋被放到收银台的上空。

然后,控制拉升的电机继续反转,绳子伸长,购物袋被到收银台上,本次比赛任务圆满完成!

二.程序部分:

程序的目的是让机器人自主完成导购过程与跟随过程,以及最后的分类与装袋过程,现分不同的阶段逐一讨论:

1.导购阶段

导购阶段要求机器人自主寻找已经设定好的商品位置,主动前往并且绕过路上的障碍(可能是绕过障碍,或者直接换路行走)。

分析可知,该阶段的重点是机器人自动生成最优路径,并且在最优路径检测到障碍物之后,重新生成最优路径,并沿着新生成的路径行走。

考虑到现行流行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:

onclose0:

notonopennoronclose

for(inti=current.x-1;i

for(intj=current.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(tempgcost

node(i,j).parent=current;

node(i,j).recaculate(f,g,h);//重新计算fcost,gcost,hcost

}

}

}while(!

hp.isempty())//如果堆空则没有找到路径

if(path==find)

outpath;//输出路径

else

cout<<"pathnotfind;!

"<

A星算法应用在本次机器人制作需要以下几个工作:

1.1、地图的划分

A星算法需要知道地图的分布,因此合理将场地划分是执行程序的第一步。

考虑到现实情形,机器人有碰撞体积,并不能将场上所有的空地设置为活节点,可以设置机器人型心为质点,考虑该型心所能到达的地方,如果机器人型心超出此X围,则其边界有可能碰到货架或者场地边界,地图的分块是建立在此X围之内,下图显示了计算过机器人大小的型心运动区域分布图,其中阴影部分就是机器人的型心可以到达的区域。

之后在这个区域上划分小块,考虑到机器人绕障碍的精度要求,我们将可行区域划分为200X200MM的小区域,以区域中心作为节点所在位置,如下图所示,所画区域恰好分成诸多小块

1.2、节点的储存

为了避免不稳定性,我们设定机器人只能沿节点横向或纵向移动(G值不能为14),将每个节点与其邻居节点用结构体储存,结构体应该包括节点编号,节点死活,节点邻居指针,节点中心坐标等元素。

1.3节点的定标

我们拟采用加速度计与陀螺仪判定机器人当前位移与身姿(详见电路部分)加速度的积分是速度,速度的积分是位移,只需知道水平面上的加速度,通过计算机的积分运算可以得到位移数据,只要知道机器人的具体坐标值,就可以判定机器人现在位置属于哪个具体的节点。

这对于绕障碍以及出现故障重新开始时重新定标起到帮助作用。

1.4、相邻节点间的移动

控制转向的节点结构体具体包含的几个变量如下:

typedefstruct{

floatx;//该方块的x坐标

floaty;//该方块的y坐标

floatG;//该方块的G值

floatH;//该方块的H值

rectR;//该方块的右邻方块(right)

rectL;//该方块的左邻方块(left)

rectT;//该方块的上邻方块(top)

rectD;//该方块的下邻方块(down)

intisLive;//该方块的死活状态

IntN//该方块的编号

}*rect;

为了使机器人能够判断怎样走到相邻的方块(如应该先旋转多少角度后再移动),则机器人必须先知道自己现在的朝向(朝向可以通过之前走过的路径判断,如果出现故障,可以采用电子罗盘辅助寻找朝向,具体见电路部分)为此,我们将四个方向标记为不同的值以资区分,各个方向对应的值如下图:

设机器人当前朝向方向的值为direct,则机器人要走到R方块(右邻方块),则需要顺时针旋转的角度为:

angle=(direct%4-1)*(-90)%360;

下面为各个值对应的顺时针旋转角度:

若direct==1,则angle=0*(-90)%360=0;

若direct==2,则angle=1*(-90)%360=-90;

若direct==3,则angle=2*(-90)%360=-180;

若direct==4,则angle=(-1)*(-90)%360=90;

同理可以得到要走到T方块需要顺时针旋转的角度:

angle=((direct%4-1)*(-90)-90)%360;

同理可以得到要走到L方块需要顺时针旋转的角度:

angle=((direct%4-1)*(-90)-180)%360;

同理可以得到要走到D方块需要顺时针旋转的角度:

angle=((direct%4-1)*(-90)+90)%360;

当角度转完后,再前行200mm即可到达下一节点

这样就可以从一个节点移动到它任意邻居节点。

 

1.5、卡位节点的删除

如果机器人在行进过程中偶遇障碍物,需要将障碍物所在处的节点删除并重新生成最优路径(绕障碍或者换路)。

首先发现障碍并且确定障碍位置和障碍所在节点(发现障碍的算法见程序部分的识别板块),之后并不能简单删除该节点,如果只删除单一节点有时并不能生成符合实际的最优路径。

如图,假设机器人处于蓝色方块的位置检测到障碍物的存在,如果仅删除一个节点,其余节点仍然可以行走,则机器人可能走到如图所示位置,会碰到障碍

因此为了保证行走的可行性与避障不碰障碍的要求,我们采用以下方法:

首先检测到障碍中心所在节点,其次删除其所有相邻节点,删除相邻节点时检测相邻节点的相邻节点(邻居的邻居),如果邻居邻居节点中心到障碍中心的横坐标(或纵坐标)之差的绝对值小于400mm,就将该节点删除,否则不删除。

改进以后的删除方式见下图

这样机器人若想到对面去只有一条路可以选择就是绕道(我们设定机器人转向只能原地旋转再前行)。

经多次测试,这种方法可以保证准确删除障碍节点,并完成绕路算法。

如果路被堵死的情况:

机器人前行检测到障碍并删除节点

机器人重新生成最优路径并转向。

3.商品的定位

商品的位置可以对应到相应最近的节点上,由于我们分块的时候已经照顾到商品的位置,故只需将机器人目的地设置在商品旁边的位置,这样也方便机器人接近货架200mm以内

如图绿色框图所在节点就是商品所在的节点,可以将商品编号与节点进行一一映射,从而让机器人方便的找到目的地。

综上,我们可以对基于A星算法的导购过程进行一个概述:

 

2、跟随部分:

跟随部分不再需要机器人自己寻找最优路径,而是只要跟着人走就可以了,因此也就不再需要使用划分的方块,考虑到前后的一致性,机器人按照如下图的路径行走比较合适(与导购阶段的路径相比只是将方块去掉了):

跟随阶段有几个主要的问题需要解决:

2.1.识别人和障碍。

识别需要摄像头。

但由于导购阶段人跟随在机器人后方,因此机器人只需要通过超声波传感器测出与人之间的距离,就可以通过调整自己的速度来达到距离上的要求,这样来看机器人后方并没有安装摄像头的必要。

而跟随阶段机器人需要跟随着人行走,并且还有可能遇到障碍,因此机器人前方一定至少有一个摄像头,以识别人和障碍。

2.2.测量与人之间的距离以及与障碍之间的距离。

机器人通过超声波传感器测量与人之间的距离。

但是由于超声波传感器基本上只能测量与它正对的物体的距离,而机器人需要测量的人的位置不是固定的,因此在机器人上安装多个超声波传感器是必要的;由于测量与障碍之间的距离是非常重要的(这涉及到导购阶段的挖掉死方块),为了保证尽可能准确地测出机器人与障碍之间的距离,我们通过双目识别来测量,这需要机器人前方有两个摄像头。

这些装置我们认为按下图(俯视图)放置比较合适。

其中前方的两个摄像头的高度在500mm(障碍的高度)以下,通过双目识别技术,这两个摄像头可以比较有效精准地识别圆柱体障碍物到机器人的距离。

由于人的中心位置不好测定,因此我们不打算也用双目识别来测量机器人与人之间的距离,而是通过超声波传感器直接测量。

由于测量人的上半身的距离比较容易,因此前后的超声波传感器都放置在机器人的顶部,这样可以达到人的腰部的高度;由于安装在机器人前面(后面)的超声波传感器之间的距离为200mm,超声波传感器与机器人边缘的距离为150mm,而人的腰部宽度一般大于200mm,因此可以保证在跟随过程中只要人大致在机器人前方时,就能保证至少有一个超声波传感器是正对着前方的人的,如下图所示:

在导购和跟随过程中,只要人的中心位置在上图所示两条绿色虚线X围之内,机器人就能比较准确地测定与人之间的距离。

由于超声波传感器有一定的发射角(约15°),因此图中所示X围与实际相比还要略小一些。

跟随阶段的大致流程图如下:

分类装袋与报价过程

由于已知商品分为食品类与生活类两种,机器人需要准确区分两种商品,并自主将其分类在不同的位置。

我们的机械结构设计留出了这种装置。

简单而言,通过已经储存在电脑中的商品位置来判断商品种类,通过带轮正反转来将放置在平台的商品转送到不同的袋子中。

导购阶段商品的位置是提前输入给电脑,而跟随阶段的商品由摄像机识别条形码,由电脑将条形码信息与商品信息对应并顺利完成计算与报价、分类等过程。

下简单介绍条形码的实现。

在跟随过程中,商品的识别我们决定采用条形码识别的方案,现今的商品上都贴有条形码标识,很容易通过商品上的条形码来判别商品的各项信息(类别,价格等)。

条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。

常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。

条形码的扫描需要扫描器,扫描器利用自身光源照射条形码,再利用光电转换器接受反射的光线,将反射光线的明暗转换成数字信号。

不论是采取何种规则印制的条形码,都由静区、起始字符、数据字符与终止字符组成。

有些条码在数据字符与终止字符之间还有校验字符。

关于识别的部分,我们可以采用摄像头的拍照传输给计算机,然后通过特定的识别软件将分析得出的结果传给单片机,从而达到机器人识别商品的目的。

相对于手动输入,条形码识别主要有以下几点好处:

1.输入速度快:

与键盘输入相比,条形码输入的速度是键盘输入的5倍,并且能实现“即时数据输入”。

2.可靠性高:

键盘输入数据出错率为三百分之一,利用光学字符识别技术出错率为万分之一,而采用条形码技术误码率低于百万分之一。

机器人需要实现的另一项任务是计算总价并报价,我们计划用扩音器让机器人发声,机器人将每件已购产品储存并计算出总价值并通过电脑传输指令播放音频,通过扩音器发出声音。

该过程用简图表示如下

 

3.基于双目视觉的障碍识别系统

由之前的循迹算法可知,定位绕路等算法的核心在于如何准确识别障碍物所在的节点,我们考虑使用计算机视觉中的双目视觉来实现对障碍物的识别。

双目立体视觉,即由不同位置的两台或者一台摄像机(CCD)经过移动或旋转拍摄同一幅场景,通过计算空间点在两幅图像中的视差,获得该点的三维坐标值。

当一个摄像机拍摄图像时,由于图像中的像素点坐标相对于真实的世界坐标并不是唯一的,这就造成深度信息的丢失。

然而用两个摄像机同时拍摄图像时,可以获取同一场景的两幅不同的图像,通过三角测量原理计算图像像素间的位置偏差,复原三维世界坐标中的深度信息。

融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来,这个差别,我们称作视差(Disparity)图像,如图。

 

以下对双目视觉原理进行简单阐述:

立体视觉系统由左右两部摄像机组成。

如图所示,图中分别以下标l和r标注左、右摄像机的相应参数。

世界空间中一点A(X,Y,Z)在左右摄像机的成像面Cl和Cr上的像点分别为al(ul,vl)和ar(ur,vr)。

这两个像点是世界空间中同一个对象点A的像,称为“共轭点”。

知道了这两个共轭像点,分别作它们与各自相机的光心Ol和Or的连线,即投影线alOl和arOr,它们的交点即为世界空间中的对象点A(X,Y,Z)。

这就是立体视觉的基本原理。

在平行光轴的立体视觉系统中,左右两台摄像机的焦距及其它内部参数均相等,光轴与摄像机的成像平面垂直,两台摄像机的x轴重合,y轴相互平行,因此将左摄像机沿着其x轴方向平移一段距离b(称为基线baseline)后与右摄像机重合。

由空间点A及左右两摄像机的光心Ol、Or确定的极平面(Epipolarplane)分别与左右成像平面Cl、Cr的交线pl、pr为共轭极线对,它们分别与各自成像平面的坐标轴ul、ur平行且共线。

在这种理想的结构形式中,左右摄像机配置的几何关系最为简单,极线已具有很好的性质,为寻找对象点A在左右成像平面上的投影点al和ar之间的匹配关系提供了非常便利的条件。

将上述原理应用于计算机识别还需要进行特征点匹配,特征点匹配分为稀疏点匹配和密集点匹配,由于本次任务对识别对象形状要求并不高(红色圆柱体),并且只需要定出圆柱体型心所在的坐标值,故只需采用基于窗口的稀疏点匹配。

下面将结合圆柱实物简单介绍特征匹配的方法并定出型心。

实验所用的圆柱

对上述识别图像进行轮廓提取

由于图形轮廓具有很好的连续性,在一些弱角点的地方无法提取到角点却可以提取到轮阔点。

提取到特征点以后,以左摄像机的图像为参考对象,对右图进行匹配,用极点坐标法中的向量夹角匹配的方法计算两图同一行特征点的cos值,将取值最大且大于0.9的特征点作为对应匹配点,两个点x坐标差值为视差值,视差越大则三维点离摄像机距离越近,反之越远。

上式中的最大视差

,最小视差

,则视差图中的灰度值

就可以帮助计算出视点离摄像头的距离。

在获取多个视点之后,就是圆柱型心的判定。

上面通过灰度值算出了圆柱边缘到摄像机的距离,为了简化起见,我们现将机器人视为质点,计算出圆柱的位置,如下图:

设测出的机器人到圆柱边缘的距离为d1,圆柱半径为r(已知量),设圆心到摄像机的距离为x,则由勾股定理容易得到:

x^2=(d1^2-r^2),又因为h为已知量,则圆心到摄像机的水平距离s=x^2+h^2=(d1^2+h^2-r^2)^0.5,摄像机的位置是已知的,则圆柱圆心的坐标也就很容易得到,为(x摄-s,y摄+h)。

 

三.电路部分

1.电路总体框图:

 

2.电源电路:

鉴于这次的机械部分较为复杂,简化后可以将电源分为三部分。

其一,是为传感器,单片机这类低功耗器件提供电力的电源;其二,是为机器人下部的移动部分以及机械臂牵引绳子的部分提供电力的电源;其三,是在机器人上部平台处提供机械臂丝杠部分以及传送带部分电力的电源。

这三处电源我们决定采用一个三端子稳压器变压来给低功耗器件提供电力,其余电机的可以使用两个电池分别在机器人的上,下方供电。

正电压输出的78系列的三端稳压集成电路输出的电压X围是5V~24V,可以在选购时挑选出符合需

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1