当前位置:论文写作 > 论文大全 > 文章内容

中南大学学报论文格式年度,中南大学学报论文格式湖北

主题:机器人主板等于大脑吗 下载地址:论文doc下载 原创作者:原创作者未知 评分:9.0分 更新时间: 2024-03-27

简介:大学硕士与本科等于机器人毕业论文开题报告范文和相关优秀学术职称论文参考文献资料下载,关于免费教你怎么写等于机器人方面论文范文。

等于机器人论文范文

机器人主板等于大脑吗论文

目录

  1. 机器人主板等于大脑吗:【奥创智能】揭秘一瓶碳酸饮料等于巨大棒棒糖

成绩:

   空军航空大学第二航空学院

   毕业论文(设计)

   课题:机器人足球视觉系统精度提高算法

   系 别: 六系

   专 业: 摄影测量与遥感

   期 班: 测00401

   学 员: 罗万民

   指导教员: 陶军

   2004年6月

   目录

   摘 要,引言等等等等等等等等等等等等.等.1

   一,RoboCup小型组足球机器人及其系统组成等等等.2

   二,提高图像坐标本身的精度等等等等等等等4

   2.1,位置精度的改进等等等等等等等等等等等等..4

   2.2,角度精度的改进等等等等等等等等等等等等..6

   三,提高坐标转换模型的精度等等等等.等等.7

   3.1,采用线性模型求解摄像机参数等等等等等等等等.等.7

   3.2,纠正径向畸变等等等等等等等等等等等等.等.8

   四,等等等等等等.9

   4.1,彩色模型等等等等等. 等等等等等等等等.等.9

   4.2,彩色模型选择等等等等等等等等等等等等..11

   五,目标分割等等等等等等等等等等..11

   5.1 象素分类等等等等等. 等等等等等等等.等.11

   5.2 颜色空间阈值法等等等等等等等等................12

   六,数字图像预处理等等等等等等等等.等13

   6.1噪声的产生及处理等等等等等. 等.等等等等等.等13

   6.2图像模板匹配等等等等等等等等...................13

   七,球与色标的识别等等等等等等等等...15

   7.1 球的扫描定位等等等等等等等....................15

   7.2 队标的识别等等等等等等..........................17

   八,机器人足球的战略意义和应用前景等等等等..17

   8.1 战略意义等等等等. 等等等等等等等等等17

   8.2 应用前景等等等等. 等等等等等等等等等18

   九,结论.等等等等等等等等等等等..18

   致谢等等等等等等等等等等等等等等.19

   参考文献等等等等等等等.等等等等等..等.20

   摘 要: 机器人足球比赛中,需要通过视觉系统获取环境的信息,并且要求视觉系统具有良好的实时性,鲁棒性和精确性.本文在现有的颜色识别方法的基础上,提出了提高识别精度和增强稳定性的改进方案.视觉识别的基本原理,是由图像坐标经过变换得到实际坐标,因此本文从提高图像坐标本身的精度,提高摄像机标定的精度,彩色模型的选择,目标分割,图像模板匹配这几个方面同时进行改进.实验结果表明,改进后的算法较大的提高了识别的精度和稳定性.

   关键词: 足球机器人,,bstract: Robot soccer requires vision to be fast, robust and accurate to capture environment situation. This paper presents methods to improve accuracy and stability of vision system in robot soccer, based on the existed color-based algorithm. Since the basic principle of vision system is to tran论文范文orm the image coordinate to the real coordinate. Accuracy of the image coordinate itself and the mode of camera calibration are both considered. The experiment results show that the new method significantly improves accuracy and stability of vision system significantly.

   引言

   足球机器人比赛是近年来国际上兴起的一种高科技竞赛活动.足球机器人分为两大系列.MiroSot系列和RoboCup系列.足球机器人是集机器人学,智能控制,数据融合计算机技术,无线通讯,图像处理,机械学等多种学科和技术于一体的综合性产物,它本身又是一个很典型的非线性的控制对像,为各种控制理论提供了一个非常好的实验平台.

   RoboCup系列足球机器人主要由视觉子系统,决策子系统,通讯系统,机器人小车系统四部分组成.本文阐述RoboCup系列足球机器人视觉子系统图像信号处理算法的改进.文*绍了RoboCup足球机器人视觉子系统的一些实现技术,然后分析了从足球机器人视觉子系统存在的误识别,丢失目标以及识别出的目标位置精度不高这三个方面的问题,针对这些方面提出了改造方法.这些方法分别是:建立自适应多值化颜色查找表解决误识别问题.通过高阶插值算法提高色标采集准确率从而减少丢失目标的可能性;通过位置补偿的方法来矫正由于摄像机镜头的光学作用引起的图像形变.采用一阶矩阵目标中心定位法提高目标中心点的计算精度.

   文中提出了一种根据彩论文范文像用YUV分量,分割目标与背景的有效方法.本文通过以下途径来提高视觉系统识别的精度:提高图像坐标本身的精度,主要是将像素细化到"子像素"的级别.由于像素坐标身是离散的,相邻两个像素,对应的实际比赛场地的距离大约是5mm,造成了实际坐标的离散.如果我们能够突破这一限制,例如得到了0.2像素的精度,就可以使得实际坐标仅仅相差lmm.实验表明这种方法能将目标与背景完好地分离出来,计算速度快,大大地减少了目标错误识别率,提高了定位精度,具有较好的实际应用价值.

   RoboCup小型组足球机器人及其系统组成

   机器人足球比赛是近年来出现的一项集科研,体育和娱乐于一位的比赛活动.机器人足球的最初想法由加拿大不列颠哥伦比亚大学的Alan Mackworth教授于1992年正式提出.日本学者立即对这一想法进行了系统的调研和可行性分析.1993年,Minoru Asada(浅田埝),Hiroaki Kitano(北野宏明)和Yasuo Kuniyoshi等着名学者创办了RoboCup机器人足球论文范文赛(Robot world cup soccer games,简称RoboCup).RoboCup联合会和FIRA组织.

   RoboCop(Robot World Cup),即机器人论文范文足球锦标赛.1992年10月,在日本论文范文举行的关于人工智能领域重大挑战的研讨会中,与会的研究人员对制造和训练机器人进行足球比赛以促进相关领域研究进行了探讨.在一些学者的积极倡导下(如美国CMU的 Manuela M.Veloso教授),SONY公司的支持下,成立了RoboCup联合会,并于96年在日本举行了一次表演赛,获得了很大地成功.第一届RoboCup比赛和会议于1997年举行,大约有40个机器人球队(包括美国,日本和欧洲的主要大学及研究机构)和超过5000名观众参加此次盛会.第二届比赛(RoboCup98,Paris)有接近100支球队参赛,是历史上最大规模的移动机器人会议,之后每年举办一届.

   FIRA(Federation of International Robot-Soccer Association),是由韩国人创立的组织,从 1997年开始每年举办一届比赛.在FIRA的比赛中只设实际机器人的比赛,没有模拟组比赛.目前主要有韩国,新加坡,巴西等一些国家的研究机构组队参赛.

   图1.1 机器人足球比赛场地

   两项赛事各有特点,其中最明显的区别在两者的系统结构不同,FIRA是集中控制,在比赛中,所有的机器人都是由同一个控制软件做统一的规划,调度和控制,总体上,一个球队就象是一个完整的人,由一个大脑指挥他的四肢运动.而RoboCup是分布式控制,每一个机器人都有一个独立的Client程序,可以把Client程序看成是一个独立机器人的大脑,而机器人只是一个执行机构,每个机器人之间都独立规划,独立调度,独立控制,而且相互之间的通信也是受限制的不完全通信,在总体上,这样的系统结构就象在真实环境中的机器人足球队一样.

   RoboCop小型组的比赛在两支各有5个机器人的队伍中进行.每个机器人的尺寸必须能放进一个直径180m高度150m的圆筒.除非使用局部视觉系统.比赛在2.8m×2.3m的铺有绿色地毯的场地上进行,比赛用球是一个桔论文范文的高尔夫球,

   机器人有使用全局视党和局部视觉的两种不同类型.全局视觉是最通用的类型.使用置于场地上方3m的摄像头和场外的PC来识别机器人的轨迹.使用局部视觉的机器人在本体上有视觉传感器,由机器人自己处理或者传回场外的计算机处理.场外的PC用于传递参考命令.使用全局视觉的时候也要传递位置信息.场外的计算机也用于处理机器人协作控制.通讯一般采用专门的商用无线芯片,主要是商用调频FM发射和接收单元.对于基于视觉进行运动的足球机器人来说,视觉系统是其大脑——决策系统的唯一信息来源.视觉系统的任务是利用摄像头和图像采集卡,采集赛场的图像信号,通过图像处理技术进行&#

机器人主板等于大脑吗:【奥创智能】揭秘一瓶碳酸饮料等于巨大棒棒糖

22788;理,识别一幅幅彩论文范文像中不同颜色的机器人以及小球.得到各个机器人的位置坐标和方向及小球的位置坐标,把这些数据传递给决策系统,然后决策系统根据这些值确定我方各个机器人的动作:进攻,防守或是打回合.

   目前,机器人足球比赛的科研色彩更浓厚些,人们可以期待,随着研究领域的不断深入和开拓,不久的将来,在绿荫场上参加比赛的将是能与人类球员一争高低的机器人.正如人工智能专家蔡自兴教授在中国2000年机器人学大会上所预言的那样:50年后,人类将实现这一光辉梦想.

   图1.2 足球机器人比赛系统组成

   二,,,,

   图2.2 位置精度提高实验结果

   图2.2是对一个静止的机器人进行连续50个视觉周期的识别结果.左边上下两个图分别表示只采用中心色标定位方法得到的机器人位置的X和Y分量,右边则采用了圆周定位方法.可以看出,采用圆周定位方法后,机器人的位置很少发生抖动,其最大的位置误差小于3mm,约相当于半个像素距离.而原来的方法中,机器人位置不断出现震荡,误差最大为2个像素,约为10mm.也就是说,新方法突破了像素的限制,己经将精度提高到了"子像素"的级别.

   2.2角度精度的改进

   除了论文范文和蓝色队标以外,小型组比赛中还允许使用其它颜色的色标,例如图2.1中编号为1,2,3的色标.这些色标有两个作用,一是为了分辨己方不同的机器人,二是确定机器人的朝向.

   在本文的色标方案中,如果忽略误差影响,色标2和色标0的中心连线方向就是机器人的正前方朝向.但是在实际使用过程中,由于像素值的离散性,这样计算出来的角度不精确.而且由于两点相距太近,一旦点的位置出现误差,将带来连线角度的较大跳变.

  

   图2.3 根据色标计算方向

   根据误差理论,两点之间的距离越远,其连线方向的相对误差也越小.例如:0,1两点连线和3,1两点连线虽然理论上是共线的,但实际上后者的精度要高得多.在色标相对几何关系已知的情况下,我们可以将三个论文范文坐标的连线矢量a,b,C分别旋转一定角度,使它朝向机器人的前方,然后将这三个矢量相加得到总的方向矢量V.利用最终得到的矢量

   V,就可以得到精度较高的角度.

   图2.4 角度精度提高实验结果

   同样对静止机器人纪录连续50视觉周期的方向角度.可以看出,采用改进后的方法, 获取的角度也相当稳定,其角度变化范围仅0.02弧度,远远小于左图中的0.14弧度.

   三,

   图3.1 特征点的选择

   以上这些点相对于世界坐标系的坐标可以通过准确的测量得到,并预先保存在文件中, 然后在图像上按顺序选取对应的特征点,这些点相对于图像坐标系的像素坐标也被保存在同一个文件中,以便读取计算.

   摄象机定标方法,采用线性模型,对于选定的n个特征点,有2n个关于计算参数矩阵M元素的方程,用矩阵形式表示为:

   ×等于

   其中,需要计算的参数矩阵为M等于,用最小二乘法可以求出以上这个方程的解.对于我们的足球机器人比赛,计算得到参数矩阵M后,不必再分解去求出具体的摄像机内外参数,因为我们的目标只是为了确定空间点坐标和图像坐标的转换关系.

   3.2纠正径向畸变

   为了进一步提高定标的精度,在计算参数矩阵M和图像点的空间坐标时,增加了修正径向畸变的功能.因为我们的摄像机架在3米左右的横梁上,而小型组比赛的场地就有 2.9*2.4米,因此在使用广角镜头时,图像边缘的地方会有比较大的畸变.一般的,一个或者两个系数就足够用来补偿径向畸变,描述图像坐标系中实际图像坐标和理想图像坐标的关系式为:

  

   其中,(,)代表观察到的远离中心的距离,而(x,y)是实际的未失真的图像点坐标.摄像机的畸变校正,就是要求出上式中的畸变系数和. 实际上,这个等式表示两个可逆的过程.首先,我们可以使用Matlab的摄像机校正工具箱,求得上式中的畸变系数和.对于RoboCup小型组的比赛场地,摄像机拍摄到的图像和畸变校正后的效果如图3.2.然后,在比赛中,我们己知观察到的图像点坐标,反过来需要求出实际的图像坐标.由于这时的, 无法直接求解,因此,使用了牛顿迭代的方法.

   我们采用前一种简单的校正方法,其步骤如下:首先调整摄像头使得所摄图像位于视频窗口正中间,然后标定如图所示的八个点,这八个点在校正后的图像中的位置可以由标定场景区域Field得知.校五分四个区域分别进行双线性插值.以第一区域为例,以l,2,4,0点为控制点,列方程:

   图3.2 畸变示意图 图3.3 校正后示意图

   (3.1)

   式中,(X,Y)是某点在畸变校正后视频坐标中的坐标值,1′的坐标是(Field.Left,Field.Top),其它各点依此类推.(x,y)是校正前的坐标值.由四个控制点代入上式中即可求得插值参数a,b,c,d,e,f,g和h.在目标检测出各个目标颜色块的中心坐标后,代入式(3.1)进行位置校正和方向角校正.

  

   图3.4 未校正的图像 图3.5 校正后的图像

   四,

   色度信号U和V在二维平面空间中形成一个二维矢量,其模值C代表了彩色的饱和度,体现了RGB的大小.而相位角色调,体现了RGB的比例.

   4.2 彩色模型选择

   视觉系统大多采用CCD作为摄像输入系统,其典型的输出模式为RGB.在识别处理中,如能采用RGB颜色模型.则无需换算,可直接采用CCD摄像机的输人值.但是理论分析和实验结论都表明,RGB模型中的R,G,B除了受到构成物体的材料特性影响外,而且还受到光照强度等因素的影响,在基于RGB的划分方法中在同一场景颜色均匀的同一物体会由于光照和反射的影响,往往会被分成数个区域.很难确定识别RGB阈值范围,而且容易把并非指定颜色的物体包括进去.或漏掉应该识别的物体

   物体的色度与饱和度通常由构成物体的原材料的光线吸收和反射特性来决定,但物体的亮度明显受到光照的影响,这样在色度——饱和度平面分割图像将会更容易得出正确的结果.因此,从原理上说.YUV较之RGB模型更适合用作识别处理的基础.图像的分割可以归结为由色度——饱和度确定的二维直方图中白面的峰谷的划分,但由前面RGB到YUV的转换公式可见.当图像中有接近黑色的象素即R等于G等于B且较小,如果颜色稍有变化,饱和度将剧烈变化.如R等于G等于B时,Y等于0;R等于G等于1时,Y等于1;而这两种颜色的差别人眼根本觉察不出,而且当有灰色像素时,求出的饱和度会剧烈变化.此时,识别参数还应该包括V.因此,在本视觉系统的算法中采用了YUV模型作为颜色识别处理的基础,选取其中的参数Y,U和V作为识别判断依据.

   五,目标分割

   分割是将图像细分成相互独立的组成部分或目标,是图像自动分析中最重要的环节之一,它从图像中提取目标,为后续处理如目标识别,目标跟踪奠定基础.

   在图像分割,目标识别及目标跟踪应用中,颜色是一种极为重要的视觉信号,相对于几何信号及灰亮度来说,它有明显的忧势.它对局部封闭(partial occlusion),深度旋转(rotation in depth),比例及分辨率变化的承受能力,使它成为图像分割应用中极具吸引力的方法.尽管如此,在实时性应用中,分割速度是一个关键性因素,因此,一些计算量比较大的基于彩论文范文像分割算法的应用受到了一些限制.

   5.1 像素分类(pixel labeling)

   目标分割的第一步是像素分类.利用颜色标准将图像中像素归类成分类成一些离散的子类.为了获得一种能适用于实时视觉系统的理想方法,本文在颜色空间中实现.

   阈值法是一种最直观的彩色分割方法,当目标颜色是可知的,或能被预先测量(如检测目标颜色的直方图)时,可使用阈值作为目标颜色的一个限定范围.我们可以采样学习目标物体颜色,计算出每一个颜色分量的均值与方差来自动设定阈值,也可以通过自动分析彩色直方图来设定阈值.

   分割的结果是产生一类二值图象,其中被归类为感兴趣目标象素点的值被设置成非0(或1,或者可使用其它的一些标志值),另类为背景,其象素值设置为0.下面介绍本文采用的阈值方法:颜色空间阈值法

   5.2 颜色空间阈值法(Color space thresholding)

   颜色空间阈值法是一种最直接了当的阈值方法,它对每个颜色分量使用常量阈值,从而形成一个论文范文颜色空间中的长方体,并因此而限定目标颜色范围,如果象素颜色值在该立方体内,则将其设置成目标的标志值(非0),否则将其作为背景点处理.颜色空间阈值法实际上是线性颜色阈值法的一个特例.图 5.1说明了YUV空间的阈值法原理.

  

   图5.1 YUV空间阈值分割原理图

   当被分割的目标是一种统一的颜色时,颜色空间阈值法则非常适宜于实时应用中.而效果用好.但应该注意的是,该方法的计算量与所使用的颜色空间间的级数密切相关.如果使用一维颜色空间阈值,它对每个象素最多有2次比,运算.然而实际中常用的是二级颜色空间的阈值,导致每个象素需要2-4次比较,三维的则更多一些,这样,复杂度随着维数递增.

   通常,使用象素颜色查询表可优化阁值处理过程,从而可避免因维数增加而导致的计算负担.从程序设计角度来讲,这个查询表可以是一个多维数组,数组下标表示颜色分量值,数组元素值则表示具有某颜色值象素的类别标志值,如目标点为1,其它为0,这样可避免过多的比较操作.或使用文件的方式存储颜色表,事先采集颜色阈值,需要作比较用的时候再读进来.

   六,数字图像预处理

   6.1噪声的产生及处理

   在实际的比赛过程中,由于场地和设备条件的限制,在制作机器人足球比赛用识别算法中,必须考虑到光反射的影响.由于光反射的影响,同一个色标在球场的不同地方会呈现出不同的颜色,如果一直沿用原来采样的颜色值,就会对识别效果产生根大的影响,甚至会丢掉机器人的位置.这个问题有两个办法解决,其一是适量扩大三基色的阈值范围,然后重新扫描动态窗口,这就造成了计算量不必要的增大,也影响了识别算法效率的稳定性;其二,需要停止机器人并在下一帧重新扫描动态窗口,这样显然会对机器人足球比赛产生不利的影响.

   与此同时,我们还要面对噪声的影响,影响图像质量的噪声源可以分成二类:电子噪声,光电子噪声和感光片颗粒噪声.其中第三种噪声在这里可以不于考虑.电子噪声是三种模型中最简单的,由在阴性元器件中因为电子随机热运动而造成的,一般常用的零均值高斯白噪声作为征模型,他具有一个高斯函数形状的直方图分布以及平坦的功率谱.有时电子器件还会产生一种所谓的1/f噪声,这时一种强度与频率成反比的随机噪声.然而,图像处理问题很少需要对这种1/f噪声进行建模.光电子噪声是由光的统计本质和图像传感器中光电转换过程引起的,在弱光照的情况下,其影响更为严重,此时常用具有泊松密度分布的随机变量作为光电噪声的模型.这种分布的标准差等于其均值的平方根.在光照较强时,柏松型分布趋向更易描述的高斯型分布.

   在机器人足球比赛中,照明条件一般都能保证,因此可以采用零均值高斯白噪声为其模型,当然,我们必须做出这样的假定:即噪声模型的特性不随时间,场地以及反射光强度的改变而改变.

   为了抑制噪声提高识别的精确度,必须对图象进行平滑处理.可以使用卷积核对噪声进行平滑,用信号处理的理论来解释,这种做法实现的是一种简单的低通滤波器(low pass filter).低通滤波器的作用就是滤掉高频分量,从而达到减少图像噪声的目的.使用卷积核进行操作实现了一种邻城运算(Neighborhood Operation), 即某个像素点的结果不仅和本像素及度值有关,而目和其邻域点的值有关.其表达式为:

  

   其离散形式为

  

   根据傅立叶变换的性质.两个函数在时域卷积的博立时变换相当于其在频域的乘积.选择合适的响应函数h(x,y),就可以达到滤除噪声的结果.卷积运算在图像处理中是要经常用到的,但是计算量还是比较大的,而且会对图像中物体的边界产生模糊效应,同时其系数的指定也没有明确的依据.

   邻域平滑处理可更直观地看作一个作用于图像f(x,y)的低通空域滤波器.该滤波器的冲激响应函数为H(r,s),那么,滤波输出图像g(x,y)可用如下离散卷积表示

  

   上式中,冲激响应函数可看作一块模板,上式的数学运算等价于用模板中心顺序地逐个对准每一像素f(x,y),其顺序由图像的左上角开始,从左到右,从上到下,然后将模板元素和被模板覆盖的图像像素的灰度相乘,求和,其运算给果即为该点平滑处理后的输出g(x,y).

   6.2图像模板匹配

   在机器识别事物的过程中,常需把不同传感器或同一传感器在不同时间,不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一副图中寻找相应的模式,这就叫做匹配.由于机器人上的色标的颜色及大小是已知的,因此可以利用色标的模板对机器人进行匹配.

   首先,对被匹配的图像进行二值化预处理.将图像区域内的像素逐点与色标颜色YUV的阈值相比较,满足阈值条件的为1,否则为0.这样便把图像从空间域变换成了频域.

   接着,选择特征空间进行匹配,利用色标的模板与二值化后的图像进行卷积:

   其中为作为匹配的模板.二值化图像进行卷积后,其图像直方图的峰值便为色标的中心点,因此得到了机器人或球的精确坐标.

   通过实验测试,本文己总结出如下几个具有较好效果的模板.

   (1) (2)

   其中(1)可作为全局搜索时的模板,(2)可作为局部搜索时的模板.

   七,球与色标的识别

   7.1 球的扫描定位

   因为图像的分辨率比较大(640×480),如果直接逐行逐列扫描,必然计算量极大,可采用移动网格法进行扫描.从理论上说,这种方法是可行的,而目减少了大量的计算时间,但是存在两个问题.一是由于上面所说的色彩不平衡,噪声于扰及灯光反射的影响,数字摄像机里面进来的图像中,色彩就发生畸变,以这种方法进行扫描,可靠性的问题就很难保证;二是这样显着降低了识别的精度,实际上回避了大分辨率情况下的对特定目标进行快速搜索目的的同时,如何保证精确定位的问题.现在借用小波分析中多分辨分析的思想,构造出如下算法:

   1,先以较大的尺度对球场区域进行扫描,找出满足球颜色值域的象素点.如图6.1所示:灰色为目标区域,虚线为搜索路径.

   2,使用线段编码(Line Segment Encoding),对找到的象素点进行空间聚类,连成许多连通块.

   3,找到其中最大的连通块,计算出它的是小外切矩MER(Minimum enclosing rectangle)和MER的中心点.

   4,以该点为中心,扩人一定的区域进行逐行逐列扫描(如图6.2所示),该区域略大于上面计算所得的MER.

   5,重新对筛选出来的象累点进行空间聚类和连通块搜索,方法同2和3,所得的最大连通块即为球的区域,求出其坐标则可.

  

   图7.1 大尺寸搜索示意图 图7.2 第二次逐行逐列搜索示意图

   足球质心的确定:根据色标的对称性,先用交叉线法粗略确定质心位置,最后按下式得到物体精确质心.

   其中b(x,y)等于

   交叉线法流程图如图所示·

   图7.3 交叉线法程序流程图

   7.2 队标的识别

   队标的识别和球的识别有相似之处,都可以使用多分辨率的方法过行快速定位.但是,机器人的速度是受控制的,且其速度是有一定范围时.因此,只要知道前一帧图像中队标的位置,下一帧搜索的范围就会人大减少,所以不把要对某个球场进行扫描,只需经对前一帧上队标为中心的一定区域进行扫描,该区域称之为动态窗.

   找到了某个机器人的队标,就可以在它的周围搜索标识机器人号数的色标了.为此,要根据场地及摄像头的高度来确定搜索的范围.

   八,机器人足球的战略意义和应用前景

   8.1 战略意义

   随着机器人向系统应用的方向发展,提出了多机器人群体的组织和控制问题,并形成了协作机器人学.其中基于分布式人工智能问题,受到全世界各国的高度重视,像美国,德国,日本等都将它作为国家重点投资和开发项目.在第十五届国际人工智能联合大会(IJCAI-97)上,机器人足球被正式确立为人工智能新的挑战问题.从多智能体系统的观点来看,机器人足球系统是一个极富挑战性的研究平台.硬件机器人足球系统融合了实时视觉信息处理,计算机,自动控制,传感,无线通讯,精密机械和仿生材料等众多学科的前沿研究与综合集成.在此系统中的每个机器人都被视为一个具有智能行为的自主或半自主系统.在自主系统中,每个智能体不仅处理和自身相关的局部目标和局部信息,进行自主运动,同时根据系统总任务目标,动态地规划运动序列,这样各机器人可充分发挥其智能和自主行为来与其它机器人进行协作;在半自主系统中,多个机器人共用一个大脑,该大脑根据系统的总任务和各个机器人的位置和姿态信息整体规划各个智能体的运动轨迹和速度.仿真机器人足球赛在标准软件平台上进行,平台设计充分体现了控制,通讯,传感等方面的实际限制.仿真机器人足球队的研究重点是球队的高级功能,包括动态多主体系统中的合作,决策,实时规划和机器学习等当前人工智能的热点问题.

   机器人足球赛有利于人工智能理论研究与实践结合起来,检验新思想,新技术,促进相关科技发展.机器人足球赛所催生成熟的一系列高新技术,将为社会经济和文化的发展提供重要手段.机器人足球既是一种前沿研究的竞争和高技对抗活动,又具有与足球类似的娱乐性,观赏性和刺激性.可以预料,这一活动将产生极大的市场需求和新的产业机会,带来不可估量的经济和社会效益.

   8.2 应用前景

   机器人足球的研究和应用前景极其广阔.最直接的应用是智能机器论文范文多机器人系统,例如家用机器入,军用机器人(如美,英正在研究的无人驾驶战斗机机群),工业机器人,救援机器论文范文太空机器人(如火星车)等等.第二类研究前景与网络'信息*"有关.这些所谓的*即网络空间中的"信息机器人"(事实上.最早从事"信息*"研究的学者中有一批机器人专家).第三类研究前景涉及各种"软件自主体系统",即由一些自主的计算实体(类似于机器人足球队中的队员)通过合作的方式形成的软件系统,这种系统有可能成为下一代软件工程主流技术的一个关键部分.多主体系统,信息*和软件自主体被认为是来来信息产业(特别是电子商务)的主要理论基础和技术手段.

   九,结论

   实验结果可以看出,通过对机器人的位置和角度计算方法进行改进之后,极大地提高了定位的相对精度,减少了图像坐标本身带来的定位误差,实际上已经达到了"子像素"的精度级别.在实际系统中,获取的机器人的位置和角度更加稳定,很少出现震荡,有利于上层决策和整个系统的性能提高.而且,使用针孔模型计算得到的摄像机内外参数,以及畸变校正后的效果都能够达到足够的精度要求.

   从实际效果看,基本上都满足了设计时提出的要求.达到了预期的目标,在机器人足球的识别算法中,大大地减少了计算时间,以对于640X480的数字图像中对5个我方机器论文范文5个对方机器人的识别过程中,识别一帧图像的时间(稳定以后)只有40毫秒左右.从纵向发展来看,后面的识别算法都是前一识别算法的一个改进,不管在识别时间上,还是在识别精度和鲁律性上,都得到很大的改善.本文进行了一些具有开创性的工作,对有志于计算机视觉,图像采集卡的二次开发,图像处理工作方面和从事足球机器人比赛的人员具有一定的借鉴作用.

   图9.1为软件主界面及足球机器人视觉识别过程的截图,它能够具有较高精度的识别我方机器人的位置和朝向角,对方机器论文范文球的方位.识别算法采用了全新的设计,优化了软件的结构,识别精度较去年参加比赛的软件有了一个数量级的提高.

   图9.1 足球机器人视觉识别过程

   但是.由于本人水平和时间有限,以及基础条件的不足,木文的研究工作也存在一些缺陷.例如,在机器人足球比赛模式识别系统中,识别出的机器论文范文球的位置有一定幅度的振动和偏差,也有很小比例的丢失及误识率.除此之外,在论文中肯定也还存在我本人没有发现的错误或缺陷,恳请大家指正.

   致 谢

   在实验室的五百多个论文范文夜夜中,繁忙的学习和研究构成了生活的主旋律,使我得到了前所未有的充实,学到了很多知识和技能,已记不清有多少个不眠之夜,在遇到难题时的一筹莫展和解缺困惑以后的兴奋交织成了我的实验室生活.在对RobotCup视觉子系统的分析和研究中,我得到了四系主任王社伟,自控教研室主任陶军,高翔教员,蔡文澜教员,十六队队领导和战友们无微不至的关心和热情的帮助以及杨建波教员得大力支持.他们的热心帮助使我克强了计算机语言和机器视觉方面的许多难题.在实验室的这些日子里.老师和同学们的刻苦钻研的精神给我留下了深刻的印象并将激励我走向新的工作岗位.

   在写论文的过程中,导师陶军副教授和蔡文澜教员在面临繁忙的工作时仍然抽出时间详细地批阅了我的论文,并给我做了具体的指导.陶主任对科研一丝不苟的态度强烈感染了我,而这正是我所欠缺的.这种对人对事来不得半点马虎的态度将激励我在未来的工作中认认真真做好身边的每一件事情.

   最后,向所有帮助过我的老师同学,还有我的家人表示深深的感谢!

   参考文献

   [l]Gordon Wyeth and Ben Brown Robust Adaptive Vision for Robot Soccer,Computer Science and Electrical Engineering,University of Queensland,Brisbane,Australia 4072

   [2]J.Bruce and M.Veloso,Fase and accurate vision-based patection and identification,Proceedings of ICRA-03,the 2003 IEEE International Conference on Robotics and Automation (ICRA'03),May,2003

   [3]马颂德,张正友 计算机视觉一一计算理论与算法基础 科学出版社

   [4]张艳珍,欧宗瑛,薛斌党 一种基于斜率的摄像机畸变校正方法 小型微型计算机系统2002年5 月

   [5]Janne Heikkila and Olli Silven, A Four-step Camera Caiibration Procedure with Implicit Image Correction, Infotech Oulu and Department of Electrical Engineering University of Oulu IN-90570 Oulu,Finland

   [6]沈邦乐 计算机图象处理 解放军出版社

   [7]杨枝灵,王开 Visual C++数字图象获取处理及实践应用 人民邮电出版社

   [8]靳济芳 Visual C++小波变换与工程实践人民邮电出版社

   [9]郑南宁 计算机视觉与摸式识别 国防工业出版社

   [10]夏良正 数字图像处理 东南大学出版

   [11]冬国峰,赵珠颖,徐心和 提高足球机器人彩色视觉系统实时性的若干图像识别关键技术的研究 中南大学学报(第31卷专辑)

   [12]严蔚敏,吴伟民 数据结构(第二版) 清华大学出版社

   [13]高文,陈熙霖 计算机视觉——算法与系统原理 清华大学出版社

   [14]马颂德,张正发 计算机视觉——计算机与算法基础 北京科学出版社

   [15]李庆扬,王能超,易大义 数值分析 武汉华中理工大学出版社

   [16]章绩普 图象工程上册 图像处理与分析 清华大学出版社

   [17]贾云得 机器视觉 北京科学出版社

   [18]边肇祺,张学工 模式识别 清华人学出版社

   [19]何斌,马天予,王运坚,朱红莲 Visual C++数字图像处理 人民邮电出版社

   附录:

   识别部分主要源代码:

   void CVideoDlg::SearchObject()

   {

   int i,j;

   int count 等于 0;

   int patchindex 等于 0;

   static PATCH_INFO *patches 等于 new PATCH_INFO[5];

   g_teamFoundCount 等于 0;

   g_oppoFoundCount 等于 0;

   pinkindex 等于 0;

   greenindex 等于 0;

   FILE *fp;

   fp 等于 fopen("search.txt","a");

   for(i等于0;i<m_TeamRobotCount;i++)

   {

   if( m_lastRobotFound[i] ){

   //search from last position

   count ++;

   ScanRect等于CRect((int)m_lastRobotPos[i].x-Team_Search_Size,(int)m_lastRobotPos[i].y-Team_Search_Size,

   (int)m_lastRobotPos[i].x+Team_Search_Size,(int)m_lastRobotPos[i].y+Team_Search_Size);

  

   findColorPatch(ScanRect,m_pConfigDlg->m_upper_MyTeamLable,m_pConfigDlg->m_lower_MyTeamLable,1,patches);

   g_teampatch[i] 等于 patches[0];

  

   }else{

   g_teampatch[i].pixelnum 等于 0;

   }

   }

   //按照pixelnum排序

   for(i等于0;i<count-1;i++){

   for(j 等于 i+1;j<count;j++){

   if( g_teampatch[i].pixelnum < g_teampatch[j].pixelnum ){

   PATCH_INFO swap 等于 g_teampatch[i];

   g_teampatch[i] 等于 g_teampatch[j];

   g_teampatch[j] 等于 swap;

   }

   }

   }

   //去掉找丢的,根据相对的强度判断

   for(i等于count-1;i>0;i--){

   if( g_teampatch[i].pixelnum < m_pColorrange[PATCH_TEAM].minSize

   || g_teampatch[i].pixelnum < g_teampatch[0].pixelnum * 0.4 )

   count --;

   else

   break;

   }

   if(g_teampatch[0].pixelnum < 5)

   count 等于 0; //有可能一个色标都没有找到

   //去掉重合的点

   for(i等于0;i<count-1;i++){

   for(j等于i+1;j<count;j++){

   float dx 等于 (g_teampatch[i].x - g_teampatch[j].x) ;

   float dy 等于 (g_teampatch[i].y - g_teampatch[j].y) ;

   float r 等于 dx*dx + dy * dy;

   if( r < 10*10 ){

   count --;

   j --;

   for( int k等于j;k<count-1;k++){

   g_teampatch[k] 等于 g_teampatch[k+1];

   }

   }

   }

   }

   //是否有机器人没有找到 ?

   if(count < m_TeamRobotCount)

   {

   ScanRect 等于 m_FieldRect;

   for(i等于0;i<count;i++){

   Vector p;

   p.x 等于 g_teampatch[i].x;

   p.y 等于 g_teampatch[i].y;

   MaskPatch(p);

   }

   fastFindColorPatch(ScanRect,m_pConfigDlg->m_upper_MyTeamLable,m_pConfigDlg->m_lower_MyTeamLable,m_TeamRobotCount-count,patches);

   for(i等于count;i<m_TeamRobotCount;i++){

   g_teampatch[i] 等于 patches[i-count];

  

   }

   //按照pixelnum排序

   for(i等于count;i<m_TeamRobotCount-1;i++){

   for(j 等于 i+1;j<m_TeamRobotCount;j++){

   if( g_teampatch[i].pixelnum < g_teampatch[j].pixelnum ){

   PATCH_INFO swap 等于 g_teampatch[i];

   g_teampatch[i] 等于 g_teampatch[j];

   g_teampatch[j] 等于 swap;

   }

   }

   }

   count 等于 m_TeamRobotCount;

   //去掉找错的

   for(i等于count-1;i>0;i--){

   if( g_teampatch[i].pixelnum < m_pColorrange[PATCH_TEAM].minSize

   || g_teampatch[i].pixelnum < g_teampatch[0].pixelnum * 0.4 ){

   count --;

   }else

   break;

   }

   //去掉重合的点

   for(i等于0;i<count-1;i++){

   for(j等于i+1;j<count;j++){

   float dx 等于 (g_teampatch[i].x - g_teampatch[j].x) ;

   float dy 等于 (g_teampatch[i].y - g_teampatch[j].y) ;

   float r 等于 dx*dx + dy * dy;

   if( r < 10*10 ){

   count --;

   j --;

   for( int k等于j;k<count-1;k++){

   g_teampatch[k] 等于 g_teampatch[k+1];

   }

   }

   }

   }

   }

   for(i等于0;i<m_TeamRobotCount;i++){

   if( i< count){

   m_lastRobotFound[i] 等于 true;

   m_lastRobotPos[i].x 等于 g_teampatch[i].x;

   m_lastRobotPos[i].y 等于 g_teampatch[i].y;

  

   MaskPatch(m_lastRobotPos[i],6);

   // if( fp )

   // fprintf(fp,"%d,%3.1f ,%3.1f \n",i,g_teampatch[i].x,g_teampatch[i].y);

   g_teampatch[i].colorid 等于 PATCH_TEAM;

   g_teampatch[i].robotid 等于 i;

   g_teampatch[i].checked 等于 false;

   m_patch[patchindex] 等于 g_teampatch[i];

   patchindex++;

   }else{

   m_lastRobotFound[i] 等于 false;

   g_teampatch[i].robotid 等于 -1;

   }

   }

  

   //在己方机器人的周围寻找色标

   for (i等于0;i<count;i++)

   {

   PATCH_INFO colorPatch[5];

   ScanRect等于CRect((int)m_lastRobotPos[i].x-Color_Search_Size,(int)m_lastRobotPos[i].y-Color_Search_Size,

   (int)m_lastRobotPos[i].x+Color_Search_Size,(int)m_lastRobotPos[i].y+Color_Search_Size);

  

   findColorPatch(ScanRect,m_pConfigDlg->m_upper_MyTeamPink,m_pConfigDlg->m_lower_MyTeamPink,3,patches);

   for(j等于0;j<3;j++){

   colorPatch[j] 等于 patches[j];

   colorPatch[j].robotid 等于 i;

   colorPatch[j].colorid 等于 PATCH_PINKCOLOR;

   }

  

   findColorPatch(ScanRect,m_pConfigDlg->m_upper_MyTeamGreen,m_pConfigDlg->m_lower_MyTeamGreen,2,patches);

   for(j等于0;j<2;j++){

   colorPatch[j+3] 等于 patches[j];

   colorPatch[j+3].robotid 等于 i;

   colorPatch[j+3].colorid 等于 PATCH_GREENCOLOR;

   }

   //按照pixelnum排序

   for(j等于0;j<4;j++){

   for(int k 等于 j+1;k<5;k++){

   if( colorPatch[j].pixelnum < colorPatch[k].pixelnum ){

   PATCH_INFO swap 等于 colorPatch[j];

   colorPatch[j] 等于 colorPatch[k];

   colorPatch[k] 等于 swap;

   }

   }

   }

   //根据距离和颜色过滤

   for(j等于0;j<5;j++){

   float dx 等于 colorPatch[j].x - g_teampatch[i].x;

   float dy 等于 colorPatch[j].y - g_teampatch[i].y;

   // if( fp )

   // fprintf(fp,"%d ,%f ,%f\n",colorPatch[j].colorid,colorPatch[j].pixelnum,sqrt(dx*dx + dy*dy));

   float minSize 等于 m_pColorrange[colorPatch[j].colorid].minSize;

   if((dx*dx+dy*dy) < 15*15 && colorPatch[j].pixelnum > minSize){

   colorPatch[j].checked 等于 true;

   }else{

   colorPatch[j].checked 等于 false;

   }

   }

   int invalidCount 等于 0;

   //选取前三个有效的作为色标

   for(j等于0;j<3;j++){

   if( ! colorPatch[j+invalidCount].checked ) {

   invalidCount ++;

   j--;

   continue;

   }

   m_patch[patchindex] 等于 colorPatch[j+invalidCount];

   m_patch[patchindex].checked 等于 false;

   patchindex++;

   // if( fp )

   // fprintf(fp,"%f ,%f\n",colorPatch[j+invalidCount].x,colorPatch[j+invalidCount].y);

   if( colorPatch[j+invalidCount].colorid 等于等于 PATCH_PINKCOLOR ){

   g_pinkpatch[pinkindex] 等于 colorPatch[j+invalidCount];

   pinkindex++;

   }else if( colorPatch[j+invalidCount].colorid 等于等于 PATCH_GREENCOLOR ){

   g_greenpatch[greenindex] 等于 colorPatch[j+invalidCount];

   greenindex++;

   }

   }

   //有可能周围 有四个

   if( colorPatch[3+invalidCount].checked && invalidCount < 2){

   m_patch[patchindex] 等于 colorPatch[j];

   m_patch[patchindex].checked 等于 false;

   patchindex++;

   if( colorPatch[j].colorid 等于等于 PATCH_PINKCOLOR ){

   g_pinkpatch[pinkindex] 等于 colorPatch[j];

   pinkindex++;

   }else if( colorPatch[j].colorid 等于等于 PATCH_GREENCOLOR ){

   g_greenpatch[greenindex] 等于 colorPatch[j];

   greenindex++;

   }

   }

  

   }

   for(i等于0;i<pinkindex;i++){

   MaskPatch(Vector(g_pinkpatch[i].x,g_pinkpatch[i].y),7);

   }

   for(i等于0;i<greenindex;i++){

   MaskPatch(Vector(g_greenpatch[i].x,g_greenpatch[i].y),7);

   }

   g_teamFoundCount 等于 count;

   g_pinknum 等于 pinkindex;

   g_greennum 等于 greenindex;

   //搜索对方机器人

   count 等于 0;

   for(i等于0;i<m_OppoRobotCount;i++)

   {

   if( m_lastOppoFound[i] ){

   count ++;

   //search from last position

   ScanRect等于CRect((int)m_lastOppoPos[i].x-Oppo_Search_Size,(int)m_lastOppoPos[i].y-Oppo_Search_Size,

   (int)m_lastOppoPos[i].x+Oppo_Search_Size,(int)m_lastOppoPos[i].y+Oppo_Search_Size);

  

   findColorPatch(ScanRect,m_pConfigDlg->m_upper_TheirTeamLable,m_pConfigDlg->m_lower_TheirTeamLable,1,patches);

   g_opponentpatch[i] 等于 patches[0];

   fprintf(fp,"%3.1f \n",g_opponentpatch[i].pixelnum);

   }else{

   g_opponentpatch[i].pixelnum 等于 0;

   }

   }

   //按照pixelnum排序

   for(i等于0;i<count-1;i++){

   for(j 等于 i+1;j<count;j++){

   if( g_opponentpatch[i].pixelnum < g_opponentpatch[j].pixelnum ){

   PATCH_INFO swap 等于 g_opponentpatch[i];

   g_opponentpatch[i] 等于 g_opponentpatch[j];

   g_opponentpatch[j] 等于 swap;

   }

   }

   }

   //去掉找丢的,根据相对的强度判断

   for(i等于count-1;i>0;i--){

   if( g_opponentpatch[i].pixelnum < m_pColorrange[PATCH_OPPONENT].minSize )

   count --;

   else

   break;

   }

   if(g_opponentpatch[0].pixelnum < 5) count 等于 0;

   //去掉重合的点

   for(i等于0;i<count-1;i++){

   for(j等于i+1;j<count;j++){

   float dx 等于 (g_opponentpatch[i].x - g_opponentpatch[j].x) ;

   float dy 等于 (g_opponentpatch[i].y - g_opponentpatch[j].y) ;

   float r 等于 dx*dx + dy * dy;

   if( r < 10*10 ){

   count --;

   j --;

   for( int k等于j;k<count-1;k++){

   g_opponentpatch[k] 等于 g_opponentpatch[k+1];

   }

   }

   }

   }

   //是否有机器人没有找到 ?

   if( count < m_OppoRobotCount ){

  

   ScanRect 等于 m_FieldRect;

   for(i等于0;i<count;i++){

   Vector p;

   p.x 等于 g_opponentpatch[i].x;

   p.y 等于 g_opponentpatch[i].y;

   MaskPatch(p);

   }

   fastFindColorPatch(ScanRect,m_pConfigDlg->m_upper_TheirTeamLable,m_pConfigDlg->m_lower_TheirTeamLable,m_OppoRobotCount-count,patches);

  

   for(i等于count;i<m_OppoRobotCount;i++){

   g_opponentpatch[i] 等于 patches[i-count];

   fprintf(fp,"%3.1f \n",g_opponentpatch[i].pixelnum);

   }

   count 等于 m_OppoRobotCount;

   //去掉找错的

   for(i等于count-1;i>0;i--){

   if( g_opponentpatch[i].pixelnum < m_pColorrange[PATCH_OPPONENT].minSize ){

   count --;

   }else

   break;

   }

   }

   //按上次找到的位置将对方机器人从新排序

   {

   bool flag[ROBOT_NUM] 等于 {false};

   for( i等于0;i<count;i++){

   int id 等于 -1;

   float minDist 等于 30;

   for(j等于0;j<m_OppoRobotCount;j++){

   if( ! m_lastOppoFound[j] ) continue;

   float dist 等于 Vector(g_opponentpatch[i].x,g_opponentpatch[i].y).dist(m_lastOppoPos[j]);

   if( dist < minDist ){

   id 等于 j;

   minDist 等于 dist;

   }

   }

   g_opponentpatch[i].robotid 等于 id;

   if( id >等于 0){

   flag[id] 等于 true;

   }

   }

   for( i等于0;i<count;i++){

   if ( g_opponentpatch[i].robotid >等于0) continue;

   for(j等于0;j<m_OppoRobotCount;j++){

   if( flag[j] ) continue;

   g_opponentpatch[i].robotid 等于 j;

   flag[j] 等于 true;

   break;

   }

   }

   }

   for(i等于0;i<m_OppoRobotCount;i++)

   m_lastOppoFound[i] 等于 false;

   for(i等于0;i<count;i++){

   int id 等于 g_opponentpatch[i].robotid;

   m_lastOppoFound[id] 等于 true;

   m_lastOppoPos[id].x 等于 g_opponentpatch[i].x;

   m_lastOppoPos[id].y 等于 g_opponentpatch[i].y;

   // if( fp )

   // fprintf(fp,"%d,%3.1f ,%3.1f \n",id,m_lastOppoPos[id].x,m_lastOppoPos[id].y);

   MaskPatch(m_lastOppoPos[id],Oppo_Robot_Size);

   g_opponentpatch[i].colorid 等于 PATCH_TEAM;

   g_opponentpatch[i].checked 等于 false;

   m_patch[patchindex] 等于 g_opponentpatch[i];

   patchindex++;

   }

   g_oppoFoundCount 等于 count;

   //识别球

   if( m_lastBallFound ){

   ScanRect等于CRect((int)m_lastBallPos.x-Ball_Search_Size,(int)m_lastBallPos.y-Ball_Search_Size,

   (int)m_lastBallPos.x+Ball_Search_Size,(int)m_lastBallPos.y+Ball_Search_Size);

   // if( fp )

   // fprintf(fp,"%f ,%f\n",m_lastBallPos.x,m_lastBallPos.y);

   findColorPatch(ScanRect,m_pConfigDlg->m_upper_Ball,m_pConfigDlg->m_lower_Ball,2,patches);

   if( patches[1].pixelnum > patches[0].pixelnum) patches[0] 等于 patches[1];

   if( patches[0].pixelnum >等于 m_pColorrange[PATCH_BALL].minSize ){

   m_lastBallFound 等于 true;

   m_lastBallPos.x 等于 patches[0].x;

   m_lastBallPos.y 等于 patches[0].y;

   g_ballpatch[0] 等于 patches[0];

   g_ballpatch[0].robotid 等于 9;

   g_ballpatch[0].colorid 等于 PATCH_BALL;

  

   m_patch[patchindex] 等于 g_ballpatch[0];

   patchindex ++;

   }else{

   m_lastBallFound 等于 false;

   g_ballpatch[0].robotid 等于 -1;

   }

   }

   if( !m_lastBallFound ){

   ScanRect 等于 m_FieldRect;

   fastFindColorPatch(ScanRect,m_pConfigDlg->m_upper_Ball,m_pConfigDlg->m_lower_Ball,1,patches);

  

   if( patches[0].pixelnum >等于 m_pColorrange[PATCH_BALL].minSize ){

   m_lastBallFound 等于 true;

   m_lastBallPos.x 等于 patches[0].x;

   m_lastBallPos.y 等于 patches[0].y;

   g_ballpatch[0] 等于 patches[0];

   g_ballpatch[0].robotid 等于 9;

   g_ballpatch[0].colorid 等于 PATCH_BALL;

  

   m_patch[patchindex] 等于 g_ballpatch[0];

   patchindex ++;

   }else{

   m_lastBallFound 等于 false;

   g_ballpatch[0].robotid 等于 -1;

   }

   }

   m_patchnum 等于 patchindex;

   fclose(fp);

   }

   空军航空大学第二航空学院毕业设计(论文)专用

   34

   中国人民

   解放军

总结:关于免费等于机器人论文范文在这里免费下载与阅读,为您的等于机器人相关论文写作提供资料。

机器人主板等于大脑吗引用文献:

[1] 热门焊接机器人论文选题 焊接机器人论文标题怎样定
[2] 容易写的机器人论文选题 机器人论文题目选什么比较好
[3] 农业机器人类论文题目 农业机器人论文题目怎么定
《中南大学学报论文格式年度,中南大学学报论文格式湖北》word下载【免费】
机器人主板等于大脑吗相关论文范文资料