导购机器人计划书.docx
《导购机器人计划书.docx》由会员分享,可在线阅读,更多相关《导购机器人计划书.docx(54页珍藏版)》请在冰豆网上搜索。
![导购机器人计划书.docx](https://file1.bdocx.com/fileroot1/2023-4/16/b8d38056-8f44-410e-92db-fec6bf087942/b8d38056-8f44-410e-92db-fec6bf0879421.gif)
导购机器人计划书
中国科技大学第十三届RoboGame机器人大赛
参赛计划书
队伍名称:
A杖地卜师
所在院系:
工院九系
参赛内容:
机器人导购
负责人姓名:
何启明
负责人电话:
队员信息:
职务
姓名
学号
手机
学校邮箱
队长
何启明
PB11009
@
队员
曹龙轩
PB11009
@
队员
卢强
PB11009
luqiang@
队员
成亚能
PB11009
@
队员
杨金钊
PB11009
@
指导老师:
承诺书
组委会承诺:
我们组委会保证及时解决各参赛队就比赛相关问题提出的疑问,为各参赛队的制作计划等保密,公正处理机器人比赛相关事务,选拔优秀成员担任比赛裁判,保证裁判的公正。
组委会负责人(签字):
2013年5月22日
参赛者承诺:
我们队承诺对本人填写的各项内容保证是本队的原创,没有抄袭他人。
我们保证以本承诺为有约束力的协议,遵守中国科学技术大学第十三届robogame组委会的有关规定,认真进行机器人的设计制作等工作,就比赛相关问题积极与组委会交流,服从组委会的活动安排与最终裁判。
对于由本队引发的一切不良后果由本队承担相应责任。
参赛队员(签字):
何启明
曹龙轩
卢强
杨金钊
成亚能
——2013年5月22日
序:
战队简介
队伍取名渊源:
地卜师生活在黑森林中,最初被赫尔马尼的异族所崇拜的神Meepo,是个淘气的小土灵。
身体偏小的土精一点也不弱小,造世主给予了他们过人的智慧。
它的强大在于它“分则能成”的强力大招,出A杖后五只精灵一起进攻更是强大到不可思议,我们战队的五个人就代表了这五精灵。
战队宣言:
五只精灵团结一致,同进同退,我们相信在队长的带领下我们一定能发挥出“分则能成”的强大力量,秒杀一切,马到成功!
战队分工:
何启明:
程序设计及调试
曹龙轩:
程序设计及调试
卢强:
机械设计,加工及调试
杨金钊:
程序设计,加工及调试
成亚能:
电路设计及调试
一.机械部分
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;ifor(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(tempgcostnode(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星算法需要知道地图的分布,因此合理将场地划分是执行程序的第一步。
考虑到现实情形,机器人有碰撞体积,并不能将场上所有的空地设置为活节点,可以设置机器人型心为质点,考虑该型心所能到达的地方,如果机器人型心超出此范围,则其边界有可能碰到货架或者场地边界,地图的分块是建立在此范围之内,下图显示了计算过机器人大小的型心运动区域分布图,其中阴影部分就是机器人的型心可以到达的区域。
之后在这个区域上划分小块,考虑到机器人绕障碍的精度要求,我们将可行区域划分为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,因此可以保证在跟随过程中只要人大致在机器人前方时,就能保证至少有一个超声波传感器是正对着前方的人的,如下图所示:
在导购和跟随过程中,只要人的中心位置在上图所示两条绿色虚线范围之内,机器人就能比较准确地测定与人之间的距离。
由于超声波传感器有一定的发射角(约15°),因此图中所示范围与实际相比还要略小一些。
跟随阶段的大致流程图如下:
分类装袋与报价过程
由于已知商品分为食品类与生活类两种,机器人需要准确区分两种商品,并自主将其分类在不同的位置。
我们的机械结构设计留出了这种装置。
简单而言,通过已经储存在电脑中的商品位置来判断商品种类,通过带轮正反转来将放置在平台的商品转送到不同的袋子中。
导购阶段商品的位置是提前输入给电脑,而跟随阶段的商品由摄像机识别条形码,由电脑将条形码信息与商品信息对应并顺利完成计算与报价、分类等过程。
下简单介绍条形码的实现。
在跟随过程中,商品的识别我们决定采用条形码识别的方案,现今的商品上都贴有条形码标识,很容易通过商品上的条形码来判别商品的各项信息(类别,价格等)。
条形码(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平行且共线。
在这种理想的结构形式中,左右摄像机配置的几何关系最为简单,极线已具