还剩39页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
本科毕业设计(论文)题目(中文)室内巡视机器人设计和仿真实现(英文)Indoorpatrolrobotdesignandsimulation诚信承诺我谨在此承诺本人所写的毕业论文《室内巡视机器人设计和仿真实现》均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担承诺人(签名)年月日室内巡视机器人设计和仿真实现【摘要】巡视机器人是一个集环境感知、路线规划、动态决策、行为控制等功能集于一体的综合系统,采用巡视机器人进行定点监控巡视或不间断自动巡视将是目前一种可行的解决方案将机器人用于巡视工作,具有广阔的应用前景本文以自主移动机器人为平台,主要任务与目标是在RoboticStudio仿真系统中建立差分驱动轮式移动机器人进行巡视仿真环境,通过获取激光数据和摄像头数据来完成路径规划,避障和实时监控,设计手动控制界面来手动控制机器人进行巡视【关键词】移动机器人;路径规划;避障;巡视;仿真;【Abstract】Withtheconstantlyexpandingthesizeandnumberofsocialandeconomicdevelopmentsupermarketsairportsrailwaystationsexhibitioncentersandlogisticswarehousesandotherlarge-scaleflowofpassengersandplaceslargeandmedium-sizedcitiesofhigh-levelhigh-endcommercialbuildingsanincreasingnumbertheautomationneedsoftheincreasinglyurgent.Thepatrolrobotisasetofenvironmentalperceptionrouteplanningdynamicdecision-makingbehaviorcontrolfunctionsintooneintegratedsystempatrolrobotsentinelsurveillancevisitsorcontinuousautomaticinspectionwillbeaviablesolution.Therobotfortheinspectionworkhasbroadapplicationprospects.InthispapertheautonomousmobilerobotplatformthemaintaskandgoaldifferentialdrivewheeledmobilerobotsintheRoboticStudiosimulationsystemtoconductaninspectionofthesimulationenvironmentbyacquiringlaserdataandcameradatapathplanningobstacleavoidanceandreal-timemonitoringdesignmanualcontrolinterfacetomanuallycontroltherobottoconductaninspection.【Keywords】MobileRobot;PathPlanning;ObstacleAvoidance;Inspections;Simulation;目录TOC\o1-8\h\z\u1绪论
11.1引言
11.2移动机器人的研究内容及发展趋势
11.
2.1移动机器人的国内外研究现状
11.
2.2移动机器人的发展趋势
21.3论文的主要内容22室内巡视机器人设计的总体方案
32.1研究任务
32.2仿真机器人的组成
32.
2.1激光传感器
32.
2.2摄像头
32.
2.3差分驱动轮
42.3室内巡视机器人的开发环境
52.
3.1仿真环境MicrosoftRoboticsDeveloperStudio2008R
352.
3.2编程环境visualstudio
200862.4仿真机器人的总体巡视方案
62.
4.1总体巡视方案
62.
4.2传感器数据接口
62.
4.3避障
62.
4.4路径规划
72.
4.5实时监控
72.
4.6手动控制73仿真机器人巡视算法及实现
83.1仿真环境建立及编程调试
83.
1.1仿真环境建立
83.
1.2控制程序的编写
83.2避障
103.
2.1获取激光数据
103.
2.2避障的实现
113.
2.3避障程序
123.3路径规划
143.
3.1机器人沿墙巡视的设计
153.
3.2最小二乘原理
153.
3.3直线拟合
163.
3.4机器人沿墙走巡视的设计
163.
3.5机器人沿墙走巡视的实现
183.
3.6机器人沿墙走巡视的特殊情况
203.4实时监控
203.
4.1获取摄像头数据
203.
4.2图像显示及刷新
223.5手动控制器的设计
243.
5.1手动操作面板控制原理
253.
5.2手动操作面板控制的功能
253.
5.3手动控制器的实现264实验结果
284.1数据输出程序
284.2数据分析
284.
2.1避障时数据分析
284.
2.2沿墙走时数据分析
294.3总结315总结与展望
325.1本文总结
325.2展望32参考文献33致谢351绪论
1.1引言21世纪,随着经济,科技,社会不断向前进步和发展,我们生活中的各种各样的的人流以及物流的集散场所不断的增加,其数量与规模是以往所不能比拟的,例如仓库、车站,大型购物中心,高级写字楼、会议中心以及飞机场等等正是由于这些人流,物流集散场所在数量和规模上的不断增加,随之而来的是这些场所中各种设备、装置的自动化需求也越来越高然而巡视机器人,它是一个集环境感知、路线规划、动态决策、行为控制等功能集于一体的综合系统,采用巡视机器人进行定点监控巡视或不间断自动巡视将是目前一种可行的解决方案将机器人用于巡视工作,具有广阔的应用前景,近年来已受到国内外的重视,成为服务机器人的一个新研究方向本文主要综述室内巡视机器人设计的相关问题,并进行问题分析及提出相关的解决方案
1.2移动机器人的研究内容及发展趋势
1.
2.1移动机器人的国内外研究现状国外移动机器人的研究开展较早,斯坦福研究院从1966年开始并用了6年时间研制出了“Shakey”的移动机器人目前研究的方向主要是人工智能技术,即在复杂环境下机器人能够进行自主推理、规划和控制,并且它还安装有视觉、距离和碰撞等传感器,可以通过计算机对采集的图像进行处理和任务规划等功能70年代,美国加州理工大学研制的移动机器人和法国LAAS的机器人和人工智能研究小组开发的Hiare移动机器人,是当时移动机器人研究领域的代表之作80年代,美国国防高级研究计划局揭开了世界范围内全面研究移动机器人的序幕其代表是MIT研发的Wheelesley机器人90年代,移动机器人进入更高层次的研究领域,其研究的主要内容在于研发出高水平的环境信息传感器、信息处理技术、高适应性的移动机器人控制技术和真实环境下的规划技术等美国Probotics公司1999年生产了Cye小型家用移动机器人,它采用双轮差动驱动方式,可以自主的进行相应的工作国内移动机器人的研究起步较晚,但通过对国外机器人平台的引进和自主开发,现已取得很大进展很多高校和研究机构对移动机器人各方面的功能展开了广泛的研究
1.
2.2移动机器人的发展趋势虽然,在目前欧美一些国家和日本在移动机器人研究领域取得很大的进步,并领先于其他国家,但是其相应的成本也是相当高昂的因此结台我国的基本国情,且考虑到移动机器人的市场等相关因素,我们必须在以下几个方面上进行努力1必须降低成本,研发出能够满足不同功能需求的相关系列产品2移动机器人未来的发展方向是智能化和自主式3保证移动机器人能够正常巡视并正确的呈现出当前环境的具体状况4必要时我们可以通过人机结台,运用无线通信技术和因特网技术对移动机器人系统进行控制,来处理一些突发、紧急情况,保证移动机器人的正常工作
1.3论文的主要内容本论文的主要内容是在RoboticStudio仿真系统中建立差分驱动轮式机器人的室内巡视仿真环境,通过编写程序对激光传感器数据的采集和处理,规划机器人的运动路径及避障,使其能够自主巡视,再将摄像头采集到的图像显示出来,进行实时监控,然后在设计一个手动控制功能,即手动控制机器人进行巡视课题的主要工作如下
1.学习和了解RoboticStudio仿真系统,掌握建立机器人仿真环境和编程控制机器人的基本方法;
2.学习和了解差分驱动轮式移动机器人的基本运动控制方式;本文中我们要求机器人完成的动作都是在改变机器人左右轮子的速度来实现的,所以我们的重点是掌握机器人左右轮速度的控制上
3.通过编程实现机器人沿墙进行自主巡视及实时监控;其中涉及到机器人移动的路径规划,避障,摄像头数据获取,图像显示,图像实时刷新等问题
4.通过编程来实现对机器人进行手动控制进行巡视;虽然自动巡视具有很多的优点,如方便,快捷,自主等,但是也有些不足,比如操作不灵活,功能单一等为此我们专门引入了手动控制器来增加操作的灵活性和多样化的功能
5.在RoboticStudio仿真系统中编程实现机器人在室内进行巡视机器人能够沿着墙壁进行自动巡视,实时监控,躲避障碍物,还要能够进行手动控制,是机器人进行手动巡视2室内巡视机器人设计的总体方案
2.1研究任务本文的研究任务主要为机器人的自动巡视和手动控制巡视两部分,其中包括路径规划,避障,实时图像显示等内容寻找一种合理,有效,方便,成熟的方法来到达我们所要求的设计要求,是机器人在室内的巡视效果到达最佳
2.2仿真机器人的组成本次研究中所使用的仿真机器人是采用轮式结构,由2个驱动轮和一个辅助轮组成,此外还安装有激光传感器,摄像头
2.
2.1激光传感器本文中所用的仿真激光传感器是按照德国SICK公司生产的LMS200设计的,它的扫描范围最大可以到达8m,扫描角度为180°,而将这个180°的半圆分成0~360共361份,其角度分辨率为
0.5°一份如图
2.1所示图
2.1激光传感器扫描范围示意图
2.
2.2摄像头本文中所用的仿真摄像头是按照日本SANYO公司生产的CCD设计的,它主要将机器人在室内巡视时所到的地方的图像显示在窗口中,便于我们观察,有利于我们对室内的一切状况进行实时的监控一旦遇到什么情况,我们可以第一时间知道并及时的做出相应的正确的反应
2.
2.3差分驱动轮本次研究中所使用的仿真机器人是采用轮式结构,由2个驱动轮和一个辅助轮组成因此机器人所能完成的动作主要通过对仿真机器人左右轮的不同控制来实现的,现在我们分别设仿真机器人的左轮子的速度为,右轮子的速度为,如图
2.2所示图
2.2机器人平面图接下来,我们对二轮差分轮式移动机器人进行相关的分析,现在分别设仿真机器人的左轮子的速度为,右轮子的速度为 图
2.3机器人位置和姿势示意图则将仿真机器人的左右轮子的速度,转换成线速度v及角速度分别为:(2-1)式中d为仿真机器人右边轮子到左边轮子的距离根据图
2.3知,机器人的位置和姿势的表达形式为x,y,θ,其中x,y为机器人重心到坐标轴边界的距离,θ为机器人与坐标轴X的夹角,则(2-2)式(2-2)说明,我们可以讲对机器人线速度和角速度的控制转化对机器人左右轮子的速度的控制现在我们重新来定义一个新的函数关系式d=fx,y,其中x,y为仿真机器人此时此刻所处的地理位置,而fx,y=0为我们期望机器人所做的运动轨迹,则(2-3)式中,为我们刚刚设的控制变量由式(2-3)得:
2.3室内巡视机器人的开发环境
2.
3.1仿真环境MicrosoftRoboticsDeveloperStudio2008R3本文所采用的仿真环境是MicrosoftRoboticsDeveloperStudio2008R3,微软机器人的通用开发平台RoboticsDeveloperStudio2008第三个版本R3版本,简称RDS2008R3RoboticsDeveloperStudio是微软在06年开始,面向机器人应用开发而推出的一个平台,是基于.NETFramework的开发环境,微软RDS支持多种机器人平台,既可以在运行着Windows系统的嵌入式PC上直接运行,也可以在WindowsPC上通过蓝牙、Wi-Fi等无线连接远程控制
2.
3.2编程环境visualstudio2008本文所采用的仿真环境是MicrosoftVisualStudio,是面向WindowsVista、Office
2007、Web
2.0的开发工具VS2008引入了250个新特性,整合了对象、关系型数据、XML访问方式,语言更加简洁这个版本包含了众多版本,分别面向不同的开发角色能创建满足关键性要求的多层次智能客户端、Web、或基于MicrosoftOffice等应用程序使用VisualStudio2008可以高效地开发Windows应用程序,可以实时反映变更,智能感知功能可以提高开发效率同时VisualStudio2008支持项目模板、部署程序和调试器
2.4仿真机器人的总体巡视方案
2.
4.1总体巡视方案室内巡视机器人的总体巡视方案结构框图如
2.4所示总体方案主要包括激光传感器、摄像头数据的接口,避障,路径规划,实时监控,手动控制图
2.4总体巡视方案结构框图
2.
4.2传感器数据接口激光传感器、摄像头数据的接口,它主要是将采集到激光传感器、摄像头的数据实时的传送到机器人机器人,巡视的主体,它将接收到的数据进行处理,然后根据程序做出相应的正确的动作,使其能够顺利的进行巡视
2.
4.3避障避障,就是机器人在接收到激光传感器传来的关于前方障碍物的距离信息后,根据已经编写好的程序来控制机器人偏转的方向和角度达到避开障碍物的目的本文所采用的避障方法获取激光数据后,我们可以根据获取的数据编写一个避障的控制程序,即当激光检测到的前方障碍物距离小于500,就转个方向
2.
4.4路径规划路径规划,路径规划是机器人在室内进行巡视的基本环节它所要达到的目的是使机器人在存在障碍物的环境中,按照一定的标准,寻找到一条从起点到终点的最优或近似最优的无障碍路径这里我们可以根据获得的传感器信息,即障碍物的尺寸、形状和位置等信息,然后对这些信息进行处理,并根据所要到达的效果来设计一条最合适的路径本文所采用的路径规划方法是沿墙走,即机器人沿着室内的墙壁进行巡视
2.
4.5实时监控实时监控,它主要将机器人在室内巡视时所到的地方的图像显示在窗口中,便于我们观察,有利于我们对室内的一切状况进行实时的监控一旦遇到什么情况,我们可以第一时间知道并及时的做出相应的正确的反应
2.
4.6手动控制手动控制,虽然自动巡视具有很多的优点,如方便,快捷,自主等,但是也有些不足,比如操作不灵活,功能单一等为此我们专门引入了手动控制器来增加操作的灵活性和多样化的功能我们设计出一个可视化的操作界面来介入机器人的仿真过程,譬如启动/暂停仿真,自动/手动的切换,手工设置机器人的速度和前进、后退、左转、右转等3仿真机器人巡视算法及实现
3.1仿真环境建立及编程调试
3.
1.1仿真环境建立首先启动MicrosoftVisualSimulationEnvironment2008仿真软件,选择软件自带的ApartmentEnvironment场景,然后在场景中添加一个差分驱动轮机器人,并且机器人上添加摄像头、激光传感器如下图图
3.1仿真环境
3.
1.2控制程序的编写首先打开VisualC#2008,新建一个项目,选择MicrosoftRobotics的DSSService模板,如下图,名称命名为zmh图
3.2新建DSS模板点击“确定”后,出现如下选项(如图
3.3所示)图
3.3选项卡点击“Partners”选项卡,选择希望添加的合作关系,然后点击“AddasPartner”按钮我们在仿真环境中使用了差分驱动轮,激光,Web摄像头因此,总共需要添加四个Partner SimulationEngineSimulatedGenericDifferentialDriverSimulatedLaserRangeFinderSimulatedWebcam然后点击“OK”后即可根据选项自动创建项目文件总的控制步骤可以概括如下机器人从激光传感器获得数据→进行运算→输出控制命令
3.2避障
3.
2.1获取激光数据对于一个控制程序,一般的步骤是从机器人的传感器获取传感数据-运算-输出控制命令为了获取激光数据,我们去要向激光传感器发送一个Get消息,等待其返回后即可得到激光传感器数据了因此定义一个更新激光数据的任务函数图
3.4获取激光数据程序为了使UpdateLaser任务不断地重复执行,我们定义一个计数器消息端口,延时一定时间后就执行UpdateLaser任务zmhService类中定义一个时间端口图
3.5定义时间端口程序在类方法Start中,启动计时器图
3.6启动计时器程序第一句告诉DSS,当_dateTimePort消息来时,执行UpdateLaser任务,第一个参数false表示只执行一次由于_dateTimePort的消息类型是DateTime,所以我们需要重新定义UpdateLaser任务为IEnumeratorITaskUpdateLaserDateTimedateTime第二句启动一个延时计数,当经过600毫秒后,就往_dateTimePort发送一个消息这样当600毫秒之后,就会执行UpdateLaser任务这样只能执行一次,为了使UpdateLaser任务不断重复执行,我们在UpdateLaser任务函数的结尾再加上上述两句,这样的话UpdateLaser就能不断地重复了
3.
2.2避障的实现避障就是机器人在接收到激光传感器传来的关于前方障碍物的距离信息后,根据已经编写好的程序来控制机器人偏转的方向和角度达到避开障碍物的目的本文所采用的避障方法获取激光数据后,我们可以根据获取的数据编写一个避障的控制程序,即当激光检测到的前方障碍物距离小于500mm,就转个方向又因为激光数据是180°范围的,我们取中间的60°作为障碍判断依据,如图
3.7所示为了更好的实现避障功能,使避障时机器人的转向与下面将要讲到的沿墙走路径规划有效的结合起来,以达到巡视时的最佳效果,现我们将这60°的范围分成左右各30°(即60°~90°和90°~120°)当激光检测到60°~90°范围内有障碍物且只小于500的安全距离时,机器人向左转,如图
3.8(a)所示;当激光检测到90°~120°范围内有障碍物且只小于500mm的安全距离时,机器人向右转,如图
3.8(b)所示这样就实现了机器人的避障功能图
3.7激光探测示意图避障示意图如下所示图
3.8(a)机器人避障示意图图
3.8(b)机器人避障示意图
3.
2.3避障程序根据机器人获取来的激光传感器数据,结合我们选择的避障方法,按照我们的要求编写的避障程序
(1)当激光检测到60°~90°范围内有障碍物且只小于500mm的安全距离时,机器人向左转的避障程序如下图所示图
3.9避障程序图
3.10这条语句是将存放在sensorState的DistanceMeasurements属性中的激光数据赋值给我们设的整型变量laserCount图
3.11这条语句是实现取激光数据60°~90°的范围的数据图
3.12这段程序是实现避障,当机器人与障碍物的距离小于500mm时,机器人的右轮子的速度就减小,而左轮子的速度不变,这样就实现了机器人向左转;当机器人与障碍物的距离大于500mm时,机器人左右轮的速度保持不变且一样,这样机器人就直线前进图
3.13这两条程序是用来刷新激光数据,这里我们设定的定时器定时时间是200ms,即
0.2s每隔
0.2s就刷新一次激光数据,这样就可以达到实时采集激光数据的目的了,使机器人更好的完成避障任务
(2)当激光检测到90°~120°范围内有障碍物且只小于500的安全距离时,机器人向右转的避障程序如下图所示图
3.14这种情况与
(1)的情况相似,程序解释请参照上面解释,在此不再进行累述在这里,我们用到了差分驱动轮的消息端口_simulatedDifferentialDriveServicePort,并根据激光数据向其发送驱动参数
3.3路径规划路径规划是机器人在室内进行巡视的基本环节它所要达到的目的是使机器人在存在障碍物的环境中,按照一定的标准,寻找到一条从起点到终点的最优或近似最优的无障碍路径这里我们可以根据获得的传感器信息,即障碍物的尺寸、形状和位置等信息,然后对这些信息进行处理,并根据所要到达的效果来设计一条最合适的路径
3.
3.1机器人沿墙巡视的设计本文所采用的路径规划方法是沿墙走,即机器人沿着室内的墙壁进行巡视因为本文研究的重点不是路径规划,而是室内巡视机器人的设计,所以考虑的到执行的难以程度,所到达的效果(由于机器人要进行巡视,本身带有摄像头,那么沿墙走就可以到达看得到室内的一切这个效果)等,选择沿墙走这种方法就可以到达要求的效果,因此选择沿墙走的路径规划方法示意图如图
3.15图
3.15沿墙走示意图
3.
3.2最小二乘原理设有一独立等精度的测量列(i=1,2,3,,n),其残差(或偏差)为=,残差的平方和为(3-1)式中,当其残差=满足=min时,显然对于任何而,(3-2)当X=时,取得最小值,以上就是最小二乘原理
3.
3.3直线拟合假定所求实验数据的最佳拟合直线方程为(3-3)式中,A为直线的截距;B为其斜率根据最小二乘原理求得(3-4)或(3-5)
3.
3.4机器人沿墙走巡视的设计机器人沿墙走的仿真图如图
3.16所示图
3.16沿墙走仿真示意图
(1)沿墙走的激光束分布本文中所用的仿真激光传感器是按照德国SICK公司生产的LMS200设计的,它的扫描范围最大可以到达8m,扫描角度为180°,而将这个180°的半圆分成0~360共361份,其角度分辨率为
0.5°一份,如图
3.17所示这360份用极坐标表示,见式(3-6)(3-6)式中,i表示激光束的第i束图
3.17沿墙走激光束分布示意图
(2)沿墙走的判断设激光打在墙上的个数为n,机器人与墙的距离为d
(1)当激光打在墙上的个数小于3时(n<3),与墙的距离小于8000mm(d<8000mm)时,机器人就继续向前进;如图
3.18所示
(2)当激光打在墙上的个数大于3时(n>3),与墙的距离小于8000mm(d<8000mm)时,此时就要进行拟合;图
3.
183.
3.5机器人沿墙走巡视的实现设定机器人的右侧始终靠近墙,当机器人靠近墙时,为了分析方便,现我们取激光打在墙上的A1~A10十个点,如图
3.19所示,而我们需要的是落在0°~45°范围内的点,再经过筛选,我们选择距离为50mm~1200mm之间的点进行拟合之所以选择这个范围,是因为如果我们将大于1200mm的点也包括进来会影响直线拟合的效果,因此我们经过反复的调试最终确定上述这样一个距离区间然后通过极坐标的转换将筛选出来的点转换成对应平面坐标,极坐标转换公式见式(3-7)最后对转换后的坐标运用最小二乘直线拟合,经过计算得出拟合后的直线Y=C+DX,其中CD由最小二乘直线拟合法求出,见公式(3-4),3-5再设,分别为机器人左、右轮速,根据机器人右侧与墙的距离d(如图所示)来计算实时的,(3-7)式中,是第i束激光到墙壁的距离,是是第i束激光的角度然后根据最小二乘原理和直线拟合的公式(3-4)计算出斜率B,截距A,而C=AD=B再根据斜率D按照公式(3-8)计算出角度(3-8)因为拟合出来的直线斜率有正负之分,所以计算出来的角度,如果按数学上定义,则有大于90°和小于90°的区别而我们这里计算出来的角度的范围是-90°~90°,即当D<0时,<0;当D>0时,>0由于程序中的坐标轴与数学定义上的坐标轴不一样,因此我们要对使用的角度进行转换,见公式(3-9)(3-9)仿真机器人左右轮子的速度计算见公式(3-10)(3-10)其中是当前机器人行进的速度,,为调试系数,且,经过反复的调试,最后我们确定比较理想系数=
0.1图
3.19沿墙走拟合示意图
3.
3.6机器人沿墙走巡视的特殊情况机器人在内室进行巡视时,经常会出现机器人走到直角地带,如图
3.20所示此时,机器人处于特殊情况下,因此沿墙走也要单独进行分析,解决当机器人靠近墙时,我们需要的是落在0°~45°范围内的点,再经过筛选,我们选择距离为50mm~1200mm之间的点进行拟合,见式(3-6)然后对转换后的点运用最小二乘直线拟合,经过计算得出拟合后的直线Y=C+DX,其中CD由最小二乘直线拟合法求出(假设红线为拟合后的路线),见公式(3-4),3-5再设,分别为机器人左、右轮速,根据机器人右侧与墙的距离d(如图所示)来计算实时的,图
3.20沿墙走特殊情况拟合示意图
3.4实时监控
3.
4.1获取摄像头数据摄像头数据的获取过程与激光数据的获取过程类似定义一个获取摄像头数据的任务函数UpdateImage程序代码如下图
3.21摄像头数据获取程序图
3.22这段程序是定义一个选择仲裁器,往WebCam服务端口发送一个QueryFrame请求当请求成功时,将数据保存到rgbData中,并将图像尺寸保存到size中;当请求失败时,给出出错信息
3.
4.2图像显示及刷新从摄像头获取到图像数据以后,我们希望能把图像在窗口中直观地显示出来,所以要添加一个窗体,在窗体中添加一个PictureBox控件来显示图像然后就是在start方法中定义一个函数来启动窗体图
3.23启动窗体程序启动窗体后,把摄像头拍摄到的图像显示在窗体里,接下来就是不断地刷新图像来实时更新图像,以便我们更方便更准确的观察,因此需要在窗体类中新添一个方法UpdateWebcam供调用刷新图像程序如下图
3.24刷新图像程序这段程序是将Bitmap图像保存到类属性bmpWebcam变量中,让pictureBox空间显示图像,根据图像大小重新设置pictureBox控件的尺寸这样就可以实现不断的刷新图像,从而到达实时显示的目的编译运行后可看到摄像头图像监控画面如图
3.25所示图
3.25摄像头图像监控画面机器人进行室内巡视时的实时监控图,如图
3.26所示,带有摄像头实时监控画面和机器人在室内的位置,这样就可以更好的观察和判断实时监控的画面是否如实的反映机器人所在处的情况图
3.26仿真环境下的实时监控画面
3.5手动控制器的设计上文讲到的都是机器人自动巡视,虽然自动巡视具有很多的优点,如方便,快捷,自主等,但是也有些不足,比如操作不灵活,功能单一等为此我们专门引入了手动控制器来增加操作的灵活性和多样化的功能我们设计出一个可视化的操作界面来介入机器人的仿真过程,譬如启动/暂停仿真,自动/手动的切换,手工设置机器人的速度和前进、后退、左转、右转等手动控制操作面板如图
3.27所示图
3.27手动控制操作面板示意图手动控制操作面板上有前进,后退,左转,右转,加速,减速,自动/手动切换和启动/暂停仿真引擎8个按键
3.
5.1手动操作面板控制原理手动操作面板控制原理当我们点击手动操作面板中按键,此时就会立即先主服务程序发送一个port消息,然后住服务程序根据接收到的port信息调用预先编写好的程序进行处理,处理完后控制机器人做出相应状态的改变如图
3.28所示图
3.28手动控制操作面板控制原理示意图
3.
5.2手动操作面板控制的功能手动控制操作面板上有前进,后退,左转,右转,加速,减速,自动/手动切换和启动/暂停仿真引擎8个按键各个按键的功能
(1)“自动/手动”切换键实现自动与手动操作之间的灵活切换
(2)“启动/暂停仿真引擎”键简易方便的开启和关闭仿真引擎,而不必每次都通过修改xml文件,将其中的Pause项由true改成false
(3)“前进”键通过控制机器人左右轮子的转向来实现机器人向前行进
(4)“后退”键通过控制机器人左右轮子的转向来实现机器人向后行进
(5)“左转”键通过控制机器人左右轮子的转速来实现机器人的转向,向左转时,右轮的速度应大于左轮的速度
(6)“右转”键通过控制机器人左右轮子的转速来实现机器人的转向,向右转时,左轮的速度应大于右轮的速度
(7)“加速”键将加速的速度值预先通过程序编写出来,然后当按下此键时实现速度的增加
(8)“减速”键将加速的速度值预先通过程序编写出来,然后当按下此键时实现速度的减少
3.
5.3手动控制器的实现现在我们以启动/暂停仿真引擎为例首先在窗体中增加一个按钮btnRunPausedEngine,当点击该按钮时希望能够暂停或者运行仿真引擎为了能够在窗体中向主服务程序发送消息,我们首先需要把主服务程序的消息端口告诉窗体类,在窗体类中新增一个全局变量保存主服务程序的消息端口图
3.29然后,在zmhTypes.cs中定义所需要的消息体类型图
3.30同时在服务端口中新增一个PauseEngine消息,将zmhOperations改为图
3.31在创建窗体时,把消息端口传递给窗体类中的全局变量_mainPort同时需要修改主服务程序中启动窗体的代码为图
3.32把主服务程的主端口传递给窗体接下来,我们要为PauseEngine消息编写消息处理任务函数图
3.334实验结果
4.1数据输出程序运行仿真程序后,我们希望把机器人的运动轨迹记录下来,主要是左右轮的速度,这些信息都能够作为以后的分析所以在完成差分驱动程序结尾处添上以下2行,把仿真机器人避障时左右轮子的速度vl、vr这2个量输出到文本文档中图
4.1下面是把仿真机器人沿墙走时左右轮子的速度vl、vr及角度这3个量输出到文本文档中图
4.2然后在程序开头加上如下程序,来保存输出的数据的存放地址图
4.
34.2数据分析
4.
2.1避障时数据分析我们从输出的上千组数据中选取了些具有代表性的数据,现在我们把这些数据导入MATLAB中将仿真机器人避障时左右轮子的速度vl、vr的变化趋势画成波形图,如图
4.4所示图
4.4机器人左右轮速度变化趋势示意图我们通过对仿真机器人避障时左右轮子速度的采集,整理,分析,并且将仿真机器人左右轮子的速度的变化趋势画成波形图,以便我们更加清晰,直观的观察和分析通过仔细的分析对比,我们发现当仿真机器人在室内进行巡视时,如果仿真机器人没有遇到障碍物时,其左右轮子的速度保持一致且相等,这样就可以保证仿真机器人能够做直线运动,一直向前运动;如果仿真机器人在巡视时遇到障碍物,此时仿真机器人左右轮子的速度同时减小一些,然后左轮子速度减小的幅度远小于右轮子速度减小的幅度,这样就使得仿真机器人的左轮子的速度大于右轮子的速度,从而使得仿真机器人向右转向,以使仿真机器人能够成功的避开障碍物,到达避障的目的最后,综合上述仿真机器人巡视时左右轮子速度的数据,跟我们预先编写好的程序和我们设定好的要求基本上能到达一致,因此仿真机器人的避障行为顺利实现
4.
2.2沿墙走时数据分析我们从输出的上千组数据中选取了些具有代表性的数据,现在我们把这些的数据导入MATLAB中画出仿真机器人沿墙走时左右轮子的速度vl、vr及角度的变化趋势画成波形图,如图
4.5所示图
4.5沿墙走时偏转角度和左右轮速度的波形示意图我们通过对仿真机器人沿墙走时左右轮子速度的采集,整理,分析,并且将仿真机器人左右轮子的速度的变化趋势画成波形图,以便我们更加清晰,直观的观察和分析通过仔细的分析对比,我们发现当仿真机器人在室内进行巡视时,因为我们预先设计仿真机器人始终是右侧靠近墙壁进行巡视,仿真机器人右边检测到激光束的数量小于3个,并且仿真机器人与墙壁的距离小于8000mm,此时仿真机器人左右轮子的速度保持一致并且相等,这样就保证了仿真机器人向前行进;当仿真机器人的右边检测到有激光束数量大于3条且仿真机器人与墙壁的距离小于8000mm时,仿真机器人还是向前进,知道仿真机器人检测到的激光束的距离接近安全距离时,仿真机器人的左右轮子速度开始减小,这样来让仿真机器人与墙壁的距离保持在安全距离以上然后将采集来的激光数据进行处理,按照最小二乘原理进行直线拟合,从而规划出仿真机器人的最佳行进轨迹最后,综合上述仿真机器人巡视时左右轮子速度的数据,跟我们预先编写好的程序和我们设定好的要求基本上能到达一致,因此仿真机器人的沿墙走行为顺利实现
4.3总结通过对仿真机器人在室内巡视时避障情况和沿墙走情况下的左右轮子速度数据的采集、整理、分析、总结,使我们更加清晰、直观的理解了仿真机器人避障和沿墙走的原理对二轮差分驱动机器人的运动原理掌握的更加全面和深刻对通过控制仿真机器人左右轮子的速度是其能够做出各种各样的动作有了更加全面和深刻的认知5总结与展望
5.1本文总结本文是在移动机器人仿真软件的基础上,主要研究了室内巡视机器人设计中的激光数据的获取,路径规划,避障,图像显示,手动控制等方面问题,从最初的程序编写调试到自己的算法设计到最后的仿真实现,比较完整地研究了激光数据的获取,路径规划,避障,图像显示,手动控制等问题完成的工作如下1掌握了RoboticStudio仿真系统和MicrosoftVisualStudio编程软件的基本操作,对这两款软件的功能和应用有了更深一步的了解能够建立一些简单的仿真环境以及控制机器人的基本方法2对激光数据获取和处理的方法有了深刻的认识,通过获取激光数据并进行处理,从而解决了相应的避障和路径规划问题,并在C#软件上设计合理机器人运动控制程序3对差分驱动轮式机器人的基本运动控制方式的认识有了很大的提高,掌握了差分驱动的原理知道了通过程序是怎么来实现差分驱动轮的4掌握了摄像头数据获取的方法,通过获取摄像头数据并进行处理来解决图像显示的问题,并在C#软件上进行编程实现5完成了手动控制器的设计,增强了机器人的功能多样性和可操作灵活性,是机器人能更好的进行巡视工作
5.2展望在计算机技术、传感技术、控制技术、网络技术迅猛发展的今天,移动机器人的应用范围越来越大,使用的复杂程度也是一天一天的增大因此也相应的对机器人的相关技术方面提出了很多新的想法,建议和要求
(1)增加探测范围和目标的识别能力;
(2)加强实时性;
(3)增加灵活性、功能性、可靠性;
(4)完善多传感器信息的融合和处理能力;
(5)实行功能的模块化,增强抗干扰能力;
(6)实现互联远程控制功能;参考文献
[1]郭小勤陈彬.未知环境下移动机器人遍历路径规划[J]计算机工程与设计2010311,172-175
[2]禹建丽徐亮,黄吉祥.室内自主清扫机器人的路径规划[J]中原工学院学报2010213,1-4
[3]刘奎,徐建,沈海.移动机器人完全遍历系统研究[J],机械电子工程,2006,25-40
[4]周学益,朱波.清洁机器人全区域覆盖路径算法与避障控制研究[J],控制理论与控制工程,2007,22-42
[5]陈卫平,齐辉.全区域覆盖自主移动机器人路径规划与避障的研究[J],机械电子工程,2004,15-44
[6]刘蕾,倪海波,方圆.室内环境下移动机器人路径规划[J],控制理论与控制工程,2005,9-47
[7]洪旭,李睿,高天.室内移动机器人导航技术的研究[J],控制理论与控制工程,2006,25-33
[8]蒋小龙刘旭,刘凤然.智能移动机器人路径规划及仿真[J],模式识别与智能系统,2004,13-32
[9]符国华,谭民,黄强.移动机器人的发展现状厦其趋势[J]机器人技术与应用.20013,7-14
[10]冯建农,王文辉,莫东宇.自主移动机器人智能导航研究进展[J],机器人199719
(16),41-59
[12]RolandSiegwartLllahR.Nourbakhsh著李人厚译.自主移动机器人导论[M].西安交通大学出版社.2006,48-62
[13]JosephL.Jones著原魁邹伟等译.机器人编程技术:基于行为的机器人实战指南[M].机械工业出版社.2006,29-36
[14]庄慧,杜忠,吴树新,祝铁军.机器人路径规划及相关算法研究.科技通报,2004203:210-
215.
[15]李磊里,叶红涛,谭为民,叶珂.移动机器人技术研究现状与未来[J],机器人,2002,4-6
[16]吴海,朱世彬、马翔强.自主吸尘机器人在非结构环境下的避障与路径规划研究[J],机器人,2000227:627-
630.
[17]KyleJohnsTrevorTaylor.ProfessionalMicrosoftRoboticsDeveloperStudio[M].Wrox.2008,182-196
[18]StuartRussellandPeterNorvig.ArtificialIntelligence:AModernApproach.PrenticeHallSeriesinArtificialIntelligence1995,251-260
[19]S.QuinlanandO.Khatib.Elasticbands:Connectingpathplanningandcontrol.InProceedingsofIEEEInt.ConferenceonRoboticsandAutomationAtlanta1993802–807
[20]C.ArmbrustJ.KochU.StockerandK.Bens.Mobilerobotnavigationsupportinlivingenvironments.In
20.FachgesprächAutonomeMobileSystemeAMSKaiserslauternGermany2007,341–346
[21]TomatisNNourbarkhshIsiegwartR.Hybridsimultaneouslocalizationandmapbuilding:anaturalintergrationoftopologicalandmetric[J].RoboticsandAutonomousSystems2003441:314-350致谢在此成文之际,谨向这4年来给过我帮助、关心和支持的老师、同学和亲人致以最真诚,最衷心的感谢!首先我要感谢的是这次我的论文指导老师蓝老师!从今年暑假的毕业论文选题开始到现在,几个月的时间里蓝老师给予了我耐心的指导和帮助每周的星期
一、星期三和星期五,我们总是带着很多问题请教蓝老师,蓝老师总是能帮我一个一个耐心地讲解他总能在帮我解决问题的时候通过讨论能让我抓住课题的关键点和一些难点问题,使我能顺利地完成课题从对本课题软件的一无所知到现在的深刻了解,蓝老师的帮助显而易见他渊博的知识,严谨的思考问题的作风以及认真负责的学术态度都给我留下了深刻印象最后,我要感谢我的父母,我的亲人,是他们对我一如既往的关爱和支持,给予我克服困难的勇气和信心!我希望在未来的工作和生活中尽我最大的努力来做到最好,以回报他们再次感谢所有帮助过我,关心过我,鼓励过我的人们!IEnumeratorITaskUpdateLaserDateTimedateTime{varsensorOrFault=_simulatedLRFServicePort.Get;yieldreturnsensorOrFault.Choice;if!HasErrorsensorOrFault{sicklrf.StatesensorState=sicklrf.StatesensorOrFault;//激光数据放在sensorState的DistanceMeasurements属性中}ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds60_dateTimePort;yieldbreak;}PortDateTime_dateTimePort=newPortDateTime;ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds600_dateTimePort;intlaserCount=sensorState.DistanceMeasurements.Length;forinti=laserCount/3;ilaserCount/2;i++{ifsensorState.DistanceMeasurements[i]500{_simulatedDifferentialDriveServicePort.SetDriveSpeed-
0.1f
0.1f;LogInfoObstacleAvoid!;ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds200_dateTimePort;yieldbreak;}}intlaserCount=sensorState.DistanceMeasurements.Length;inti=laserCount/3;ilaserCount/2;i++ifsensorState.DistanceMeasurements[i]500{_simulatedDifferentialDriveServicePort.SetDriveSpeed-
0.1f
0.1f;LogInfoObstacleAvoid!;ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds200_dateTimePort;yieldbreak;}ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds200_dateTimePort;forinti=laserCount/2;i2*laserCount/3;i++{ifsensorState.DistanceMeasurements[i]500{_simulatedDifferentialDriveServicePort.SetDriveSpeed
0.1f-
0.1f;LogInfoObstacleAvoid!;ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortUpdateLaser;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds200_dateTimePort;yieldbreak;}}IEnumeratorITaskUpdateImageDateTimedateTime{byte[]rgbData=null;Sizesize=newSize00;yieldreturnArbiter.Choice_simulatedWebcamServicePort.QueryFramesuccess={rgbData=success.Frame;size=success.Size;}failure={LogErrorfailure.ToException;};ifrgbData!=null{||destBitmap.Width!=srcDataWidth||destBitmap.Height!=srcDataHeight||destBitmap.PixelFormat==PixelFormat.Format32bppArgbbytesPerPixel==3||destBitmap.PixelFormat==PixelFormat.Format32bppRgbbytesPerPixel==3||destBitmap.PixelFormat==PixelFormat.Format24bppRgbbytesPerPixel==4{ifbytesPerPixel==3destBitmap=newBitmapsrcDataWidthsrcDataHeightPixelFormat.Format24bppRgb;elsedestBitmap=newBitmapsrcDataWidthsrcDataHeightPixelFormat.Format32bppRgb;}}ActivateArbiter.ReceiveWithIteratorfalse_dateTimePortImageUpdateImage;TaskQueue.EnqueueTimerTimeSpan.FromMilliseconds60_dateTimePortImage;}{byte[]rgbData=null;Sizesize=newSize00;yieldreturnArbiter.Choice_simulatedWebcamServicePort.QueryFramesuccess={rgbData=success.Frame;size=success.Size;}failure={LogErrorfailure.ToException;};WinFormsServicePort.PostnewRunForm={_laserDataForm=newLaserData;_laserDataForm.Show;return_laserDataForm;};internalvoidUpdateWebcamBitmapbmp{bmpWebcam=bmp;pictureBoxWebcam.Size=newSizebmp.Widthbmp.Height;pictureBoxWebcam.Image=bmpWebcam;this.Invalidatetrue;}zmhOperations_mainPort;publicclassPausedEngine:SubmitPausedEngineRequestPortSetDefaultSubmitResponseTypeFault{publicPausedEngine:basenewPausedEngineRequest{paused=true;}publicboolpaused;//paused属性为真时暂停;为假时运行引擎}[DataContract]publicclassPausedEngineRequest{}[ServicePort]publicclasszmhOperations:PortSetDsspDefaultLookupDsspDefaultDropGetSubscribePausedEngine{}WinFormsServicePort.PostnewRunForm={_laserDataForm=newLaserData_mainPort;_laserDataForm.Show;return_laserDataForm;};[ServiceHandlerServiceHandlerBehavior.Concurrent]publicvirtualIEnumeratorITaskPausedEngineHandlerPausedEnginestate{varstateOrFault=_simulationEnginePort.Get;yieldreturnstateOrFault.Choice;ifHasErrorstateOrFault//如果有错误,报错并返回{LogErrorFailedtogetstateofsimulationengine.;yieldbreak;}varstate=Microsoft.Robotics.Simulation.Proxy.SimulationStatestateOrFault;state.Pause=State.paused;//改变暂停状态varreplace=newengine.Replacestate;_simulationEnginePort.Postreplace;yieldreturnreplace.ResponsePort.Choice;varfault=replace.ResponsePort;ifHasErrorfault//更新状态失败{LogErrorFailedtosetstateofsimulationengine.;yieldbreak;}else//更新状态成功{ifpausedLogInfoSimulationisPaused!;elseLogInfoSimulationisStarted!;}}stringstrInfo=vl.ToString++vr.ToString+\r\n;sw.WritestrInfo;stringstrInfo=jd.ToString++vl.ToString++vr.ToString+\r\n;sw.WritestrInfo;System.IO.StreamWritersw=newSystem.IO.StreamWriterd:\\zmh.txttrue;。