智能水中巡检机器人_第1页
智能水中巡检机器人_第2页
智能水中巡检机器人_第3页
智能水中巡检机器人_第4页
智能水中巡检机器人_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20/20题目:智能水中巡检机器人智能水中巡检机器人摘要:水中巡检机器人是基于Kenfish水中机器人开发平台进行自主开发设计的一款可用于水下管道模拟泄漏点跟踪检测的机器人,学校为我们采购的是Kenfish-A(水下机器人创新套件)是乐智联合北京大学智能控制实验室共同研制的STEAM课程开发平台,为了实现比赛所需的功能,在指导老师的帮助下为机器人加装了OpenMV嵌入式图像处理器和Pixy2CMUcam5图像识别传感器以及比较简单的红外对射障碍物传感器,配合Arduino开发板从而实现“巡”和“检”,首先水中的阻力与地面上差异非常大,因此必须保证机器人循迹即“循管道”的稳定性,然后在实现对管道上多个模拟漏油点的检测与报警。动力方面,根据比赛要求只允许使用单尾鳍提供推力和换向,即使用单舵机驱动,水中的实际情况瞬息万变,因此需要通过不断地调试使机器的运行效果逐渐趋于稳定。关键词:Ken-fish水下机器人创新平台、OpenMV嵌入式图像处理器、Pixy2CMUcam5图像识别传感器、红外对射管、Arduino开发板的程序编写与运行目次一、引言二、水下机器人的发展和应用前景二、一代水下巡检机器人的硬件构建三、Arduino开发板的运用及程序编写四、二代水下巡检机器人对于循迹检测的优化结论致谢引言地球的表面积约为5.1亿km2,而海洋的面积有3.6亿km2。占地球表面积71%的海洋是人类赖以生存和发展的空间,而且是最具发展潜力的空间。海洋中储存着大量的油气资源,作为蓝色国土中国拥有相当广阔的海域尚待开发,陆地资源逐渐紧张,这是全人类面临的问题。海洋将成为人类可持续发展的重要基地,也是人类未来的希望。而要开发海洋单靠人力是远远不够的,这就需要水下机器人的配合,于是研究水下机器人的领域也就应运而生了。为了参加第九届江苏省大学生机器人大赛,是大学生进一步了解水下机器人,学校方面采购了比赛要求使用的Kenfish-A单关节水下机器人创新平台,机器人最初使用的是TCP\IP通讯,即使用手机或电脑等移动设备连接它自带的wifi,即可完成对其运动的基本人为控制和水中图像实时回传,经过测试发现,机器人自带的功能虽然可以正常使用,但是与比赛需要实现的目标大相径庭。首先比赛要求自动控制,即接通电源后机器人即可自主完成巡检任务,显然联机运行是不可行的。通过与厂家技术员的沟通发现,因最初采购时版本选择错误,我们所购买的版本不带其他拓展套件,而原本程序已经固化以我们团队的能力无法修改,所以想寻求解决办法只能另辟蹊径,经过对机器人控制运行原理的拆解分析,发现原开发板没有太大的利用价值必须更新组件,利用原有的舵机,电池及动力系统,而在控制方面采用Arduino开发板配合其他传感器设备完成对舵机的控制以及指定点位的检测。一、水下机器人的发展与应用前景自1953年至1974年的20多年时间里,各国主要进行潜水器的研制和初期的开发工作。在美国的CURV水下机器人在西班牙海成功地回收一枚未爆炸的氢弹之后,水下机器人的发展便更加引起了世界各国的重视。自第一艘无人遥控潜水器诞生之后,在往后的20年里,全世界共研制了20艘无人遥控潜水器。而1974年是一个转折点,水下机器人也得到飞速发展,其原因则印证了一句话生产是推动科技进步的最大的动力,海洋油气开采勘探的需要,极大地推动了水下机器人的发展而水下机器人有主要分为两大类,无人有缆潜水器和无人遥控潜水器,无人有缆潜水器的研制因为它有电缆连接控制端和被控端,所以不需要考虑无线传输的问题也无需担心动力耗尽的问题,正因为这两个原因有电缆连接的水下机器人发展比较成熟。80年代开始,中国也投入到了水下机器人的研究和开发上来,“海人”1号的研发成功标志着我国在水下机器人的研究领域实现了从零到一的突破。1988年,无人遥控潜水器迅速发展。这个时期增加的潜水器多数都是有缆遥控潜水器,其中一半余艘是直接为海上油气开采服务的。无缆潜水器的发展相对慢一些,只研制出了26艘,大部分还仅限于用在军事和科学的研究上。2012年底,中国研制出模块化智能水下机器人。哈尔滨工程大学的5人团队,在指导教师张铁栋带领下,依托水下机器人技术国防科技重点实验室,设计出智能水下机器人,将模块化应用于水下机器人领域。该款机器人可根据需要选择不同模块随时更换模块,可以进行各种复杂水下作业。这款机器人获得“全国海洋航行器设计与制作大赛”实物制作类特等奖。2015年由中国自主建造的首艘深水多功能工程船——海洋石油286建造完成并圆满地进行了测试,用机器人将国旗插入3000米水深海底,这样的一次举措看似平白无奇实际上是标志着我国在水下机器人的研究领域已经进入了一个全新的阶段水下机器人的应用领域非常广泛基本上只要和水下作业有关联的工作都有它的用武之地,第一是海洋石油天然气的勘探开采第二是海洋搜救比如有船只飞机等运输工具在某片海域失联,那这时候水下机器人就可以帮助搜救工作人员在海底进行搜寻提高了工作效率和救援成功的概率。第三就是用于科研,海底的世界是人类最不了解的科研工作者可以借助水下机器人这个平台在水下采样勘探,对于研究海底地质海底生物都有极大的帮助。一代水下巡检机器人的硬件构建对于初代机器人的制作我们团队采纳了赛事合作方南京工程学院的参赛队的建议,使用了比较简单可行的红外对射管循迹及检测方法。这里提一下红外对射管的运行原理,它主要由两部分组成一是红外发射管二是红外接收管,这两部分分其实是两个比较特殊的二极管,红外发射管通电向外发射带有较大能量的红外线,肉眼可以看到少量的红色光线但是实际起作用的是肉眼不可见的远红外光波,简称“光生电”。红外接收管则是利用大面积的PN结接受发射管发出的光线在遇到障碍物时反射回来的红外线,一旦接收到红外线即红外光子进入了PN结,共价键上的束缚电子得到了光子的能量,一部分电子从共价键上挣脱,变成了光载流子,在接收管反向电压的作用下发生漂移运动,增加了接收管反向电流使接在此二极管两端的负载获得电能,简称“电生光”。上述是红外对管的大致工作原理,我们在机器人上采用的是工业级的模块化光电三极管,与光电二极管区别在于,它的接收管在接收到光信号并转化为电信号的同时还利用了三极管的放大特性对产生的微弱电信号进行了放大。因为使用了模块化的PNP型光电三极管,其内部其他芯片的工作原理这里也就不再深究,它所能达到的效果就是给兰线和棕线即正负两极(部分型号略有差异)接入5伏电压,那么黑线就会在对管前方检测到障碍物时发出一个高电平信号,离开障碍物就立即重新变为低电平。利用对管上的电位器调节检测距离,再利用检测时不同位置电平的变化,结合单片机进行控制。控制方面后面会进行详细的解释,这一节主要讲光电对管的使用,巡检机器人一共使用了4个循迹对管用于运动控制,三个检测对管用于模拟漏油点检测,安装方式为循迹对管机身左面两个右面两个,一半没入水中,检测对管机身正下方一个,左下方和右下方分别一个,这样的安装方法是我们通过对比赛规程的仔细分析和在自己学校的场地里进行多次实验得出的比较完备的安装方法。机器人编程及改装说明

(1)

结构的改装要求

允许对机器人本身进行结构加装的赛项。改装要求需满足:长宽不超过机器人体长,放入

26cm

深水池中垂直方向最低点与水池底部的距离>=2cm,并且改装后的结构件尖锐处做好保护,以防损害比赛专用水池。结构完全相同的机器,不允许同时参加比赛。

(2)

编程要求

需要进行底层软件编程的赛项,程序代码由参赛队伍的成员自行编写。

比赛过程

比赛开始前机器鱼至于起点分隔线框内,不得超过分隔线。裁判吹哨示意比赛开始,比赛计时开始,由裁判远程连接并启动机器鱼,启动后不允许再进行任何操作。机器鱼沿着输油管线按照箭头指示方向游动,不得偏离管线,从正上方观察若机器鱼与管线没有重叠则比赛停止,计时结束。游动的同时检测管线上标记的漏油处,检测到漏油处时通过一定方式现场告知裁判及观众,可以是声音、光、回传

PC

机数据等,机器鱼全身进入终点区比赛结束,计时停止。

1基础组比赛场地为标准3m*2m*0.4m长方形水池,水面高度为26cm,池底和池壁为湖蓝色。有效比赛场地尺寸为2700mm×2000mm×300mm(长×宽×高)

2、管道

比赛用管道为白色

的PVC

直径

75mm

管道,拐角处使用标准

90

PVC

管连接拐角。

3、区域分界线

使用黑色的胶带作为比赛场地分界线,用于标定起点区和终点区。

比赛所用水下机器人需为仿生鱼型机器人,由尾鳍提供动力。机器人放入水中,以机器人游动前进方向的长度定义为机器人的长度,以水平面内垂直于长度的方向的长度定义为机器人的宽度,垂直于水平面方向的机器人长度定义为高度。机器人长度不得超过

500mm。机器人宽度不得超过

300mm。机器人高度不得超过

260mm

并且机器人放在水中机器人结构的最低点与水池底部的距离>=20mm。机器人的需保证不会有任何尖锐结构会触碰到水池。

2、用直径

75mm

白色的

PVC

管铺设模拟的输油管线,

管铺入水池底部,PVC

管线如场地图所示。用直径

3cm

圆形的实心黑色标记表示漏油处,共设置

8

个漏油处,随机分布在输油管的各处(输油管顶部和斜侧面均可能出现漏油点)。场地图标识起点和终点所处虚线方框的内部分别为起点区和终点区,起点区和终点区用黑色的胶带标记规划范围。

用直径

75mm

白色的

PVC

管铺设模拟的输油管线,

管铺入水池底部,PVC

管线如场地图所示。用直径

3cm

圆形的实心黑色标记表示漏油处,共设置

8

个漏油处,随机分布在输油管的各处(输油管顶部和斜侧面均可能出现漏油点)。场地图标识起点和终点所处虚线方框的内部分别为起点区和终点区,起点区和终点区用黑色的胶带标记规划范围。

对于比赛规程进行详细了解之后,将循迹对管安装在机器人两侧最为妥当,在运动过程中,仿生鱼的身体会随着尾鳍的摆动而左右晃动,因为水流的影响水中的阻力会对运动方向造成很大的影响,理想情况是在执行直行指令时,能顺利地向前运动但是在实际测试中发现,在执行同样的指令时鱼身会出偏移,且每次都不同,因此需要左右两侧的对管在检测到偏移时发出信号,通过开发板的处理再给尾鳍发送转向指令。3Arduino开发板的运用及程序编写Arduino开发板是基于C语言的开源开发板,经过查询资料发现其功能已经完全可以满足机器人的运行。电路的连接部分是这样的,11.1V3S的锂离子电池作为电源,开发板、红外对射管、舵机都使用5V电源,显然11.1V的电压太高因此采用了LM2596DC-DC可调降压稳压电源模块,通过对电位器的调节使输出电压达到了预设值,接下来因为上面提到机器人各个负载原件都使用5V电压,所以直接把对管、舵机和开发板的电源输入端并联后接到LM2596的输出端上,此时所有模块的指示灯均已亮起。接下来就可以分配信号端口,ArduinoUNOR3开发板一共设了13个信号端口,这些端口既可以作为输出端使用同时也可以输入信号,值得注意的是其中的3、5、6、9、10、11端口上都标了~这样一个波浪线,这代表着这几个端口除了可以进行数字量的输入输出,同时可以用来输出pwm波,即舵机控制信号。了解了端口的作用之后信号线的分配就非常简单了,因为红外对管输出的是数字信号,因此可以随意选择,我们选择的端口循迹对管从左往右依次为7、8、11、12检测对管使用2、3、10舵机使用9号端口,另外还在11号端口接了一个LED指示灯用于检测报警,确定端口后插上信号线,开发板的电路装配就完成了。接下来就是程序的编写,只需要有一定的C语言基础,就能完全胜任Arduino的程序编写,因为它拥有很多程序的库文件,只需要给出指令程序进行简单的调用就可以了,程序主要分为这几个部分:其一是定义变量#include<Servo.h>Servomyservo;//定义一个舵机对象控制鱼尾intpos;//定义一个变量去控制鱼尾偏转的角度#defineSTOP0#defineFORWARD1#defineTURNLEFT2#defineTURNRIGHT3#defineTURNRIGHT14//中间对管intledPin=11;//巡迹对管,从鱼头方向的最左边开始排序inttrac1=7;inttrac2=8;inttrac3=11;inttrac4=12;intcheck=10;intcheck=2intcheck=3voidsetup()pinMode(trac1,INPUT);pinMode(trac2,INPUT);pinMode(trac3,INPUT);pinMode(trac4,INPUT);pinMode(check1,INPUT);pinMode(check2,INPUT);pinMode(check3,INPUT);pinMode(ledPin,OUTPUT);这一部分就是把刚才分配的端口写入到程序中,定义所使用到的针脚,和该针脚是作为输出还是输入,这里舵机是是输出,对管都是输入,LED是输出。其二就是运动程序的编写,主要分为直行左转右转,这一部分就是根据对管的回传数据进行实时的运动轨迹调整。当左边的两个对管其中任意一个检测到管道,说明机身偏向了右侧,需要向左纠正,同样的右边任意一个对管检测到管道,说明机身偏左需要及时向右调整,而两边都没有做出信号反馈则说明鱼身正处于管道上方,这个时候只需要正常执行直行程序就可以了,这其实和普通的小车巡线运行类似。voidloop(){//putyourmaincodehere,torunrepeatedly:tracing();voidmotorRun(intcmd)switch(cmd){caseFORWARD://如果是直行的字符指令,下面就是鱼尾的动作(其他的指令和直行的同理就不写注释了)for(pos=97;pos<130;pos++){//舵机从97°转到130°,每次增加1°(经过实测97度,鱼尾在正中间)myservo.write(pos);//给舵机写入角度delay(4);//延时4ms让舵机转到指定位置}for(pos=130;pos>64;pos--){myservo.write(pos);//给舵机写入角度delay(4);}for(pos=64;pos<97;pos++){myservo.write(pos);//给舵机写入角度delay(4);break;caseTURNLEFT:for(pos=97;pos>54;pos--)myservo.write(pos);//给舵机写入角度delay(5);for(pos=54;pos<97;pos++)myservo.write(pos);//给舵机写入角度delay(5);break;caseTURNRIGHT:for(pos=97;pos>54;pos--)myservo.write(pos);//给舵机写入角度delay(5);for(pos=54;pos<97;pos++)myservo.write(pos);//给舵机写入角度delay(5);break;defaultfor(pos=97;pos<140;pos++){//myservo.write(pos);//给舵机写入角度delay(4);//延时4ms让舵机转到指定位置for(pos=140;pos>54;pos--)myservo.write(pos);//给舵机写入角度delay(4);for(pos=54;pos<97;pos++)myservo.write(pos);//给舵机写入角度delay(4);voidtracing(intdata[5];data[0]=digitalRead(7);data[1]=digitalRead(8);data[2]=digitalRead(11);data[3]=digitalRead(12);data[4]=digitalRead(10);data[5]=digitalRead(2);data[6]=digitalRead(3);if(data[0]&&data[1]&&data[2]&&data[3])//左右都没有检测到白管motorRun(FORWARD);if(!data[2]||!data[3])//右边都检测到管道motorRun(TURNRIGHT1);motorRun(FORWARD);motorRun(TURNRIGHT1);motorRun(FORWARD);if(!data[0]||!data[1])//右边检测到管道motorRun(TURNRIGHT);motorRun(TURNRIGHT);motorRun(TURNRIGHT);motorRun(TURNRIGHT);motorRun(TURNRIGHT);motorRun(TURNRIGHT);以上就是循迹程序,通过不断地测试,发现让舵机从140°转到54°,中位是97°左右转分别是97到140和97到54,延时4毫秒让舵机转到指定位置是最理想的状态。其三就是检测程序if(data[4])//判断中间的红外对管如果为1扫到黑点led闪烁digitalWrite(ledPin,HIGH);delay(1000);digitalWrite(ledPin,LOW);delay(1000);这一部分相对比较简单只要检测对管测到黑点由高电平转换为低电平就向LED供电点亮指示灯并闪烁,说明已检测到模拟漏油点。值得一提的是在检测程序中我们使用了一个中断,简单来说中央处理器原本执行程序时是按照程序指令一条一条向下顺序执行的,上面需要不断执行的就是运动程序,而检测程序对于运动程序而言就是一个中断它需要中央处理器立刻去处理,暂时中断当前的程序,转去处理检测及报警程序,然后在立即回来继续执行运动程序,如果不加中断,一旦在前进过程中检测到了黑点,机器人转去执行检测程序之后就不会再回来执行运动程序,从而陷入死循环,因此需要把检测报警程序放进中断里。到此为止一代仿生水下巡检机器人已经完工。四、二代水下巡检机器人对于循迹检测的优化前面介绍了一代水下巡检机器人是利用红外对管进行循迹和检测,结构简单编程难度低,但是缺陷也非常的明显,受外界干扰大,很容易出现偏离管道后无法及时回转,导致彻底偏离。另外就是检测不够准确,因为在前进过程中,机身处于一个来回晃动的状态,而对管是固定在机身上的点也是固定的,因此相对于机身和模拟漏油点一直处于一个来回移动的状态,在运行过此中很容易出现恰好经过黑点时机身往左或者往右偏了,从而导致该点无法被正常检测。为了克服这个问题,我们向其他参赛队进行了学习,了解到他们使用的是OpenMV嵌入式图像处理器,使用摄像头之后,巡线和检测的效果都大大提升。因此我们团队也决定使用摄像头替代红外对管。OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它可以很轻松的完成机器视觉(machinevision)应用。可以通过高级语言MicroPython脚本,而不是C/C++。Python的高级的数据结构使我们可以很容易的在机器视觉算法中处理复杂的输出。但是,仍然可以完全控制OpenMV,包括IO引脚。可以很容易的使用外部的终端触发拍摄或者或者执行算法,也可以用算法的结果控制IO引脚。OpenMV摄像头的特点:STM32F765VI

ARMCortexM7处理器,216

MHz,512KBRAM,2

MBflash.I/O引脚输出3.3V并且有5V耐受。这个处理器有以下IO接口。高速USB(12Mbs)接口,连接到电脑。插入OpenMV摄像头后,电脑会出现一个虚拟COM端口和一个“U盘”。一个SPI总线拥有高达54Mbs速度,可以简单的把图像流数据传给LCD扩展板,WiFi扩展板,或者其他控制器。一个I2C总线,CAN总线,以及一个异步串口总线(TX/RX),用来链接其他的控制器或者传感器。3个I/O引脚用于控制舵机.所有IO口都可以用于,中断和PWM。一个RGBLED(三色),两个高亮的850nmIRLED(红外).OV7725

感光元件在80

FPS下可以处理640×4808-bit的灰度图或者320×24016-bitRGB565的彩色图像;当分辨率低于320×240时可以达到120FPS。大多数简单的算法运行在30FPS以下。OpenMV摄像头有一个2.8mm焦距镜头在一个标准M12镜头底座。以上是OpenMV的基本信息,所需要使用的是它的两项功能:单轨巡线、圆形检测。单轨巡线的原理大致是这样的,将整个画面分割为若干个检测区域,并给每个区域设定一个权值。很容易理解,距离越远,重要性越高/越小,根据实际需求来设定不同的权值,然后各自调用find_blobs函数,找出各自的最大色块。将每个色块中心点的x坐标进行加权平均,最后根据中心公示,利用arctan函数,求得所需偏转角。编程过程首先设置阈值,如果是黑线,GRAYSCALE_THRESHOLD=[(0,64)];如果是白线,GRAYSCALE_THRESHOLD=[(128,255)],比赛场地是蓝色,这里默认为黑色,roi代表三个取样区域,(x,y,w,h,weight),代表左上顶点(x,y)宽高分别为w和h的矩形,weight为当前矩形的权值。采用的QQVGA图像大小为160x120,roi即把图像横分成三个矩形。三个矩形的阈值要根据实际情况进行调整,离机器人视野最近的矩形权值要最大,计算权值和。上面的三个矩形,r[4]即每个矩形的权值,利用颜色识别分别寻找三个矩形区域内的线段找到视野中的线,merge=true,将找到的图像区域合并成一个,在目标区域找到直线,目标区域找到的颜色块(线段块)可能不止一个,找到最大的一个,作为本区域内的目标直线,将此区域的像素数最大的颜色块画矩形和十字形标记出来计算centroid_sum,centroid_sum等于每个区域的最大颜色块的中心点的x坐标值乘本区域的权值,控制舵机转动至相应角度巡线实现之后,下一步就是黑点的检测,对于摄像头而言就是圆形检测,圆形检测一共分为五步。第一步图像求导,图像求导就是说像素颜色取值在某一个方向的变化速度。理所当然的是在边缘处的变化最大。对于离散结构的矩阵需要在X和Y方向分别求导。第二步是获取图像边缘,对求导后的图像进行平滑处理,过滤掉噪声。设定一个阈值去寻找有效边缘区域,对有效区域的图像进行细化,获取局部的边缘像素,添加对边缘像素进行连接。第三步是霍夫变换。普通二维平面,圆公式可以表示为(x-a)^2+(y-b)^2=r^2(a,b)为圆心坐标,r为半径,在霍夫空间,三个轴坐标为a,b,r分表代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论