《水下机器人设计毕业论文.doc》由会员分享,可在线阅读,更多相关《水下机器人设计毕业论文.doc(111页珍藏版)》请在三一办公上搜索。
1、 目录 第一章绪论1第二章ROV简介2(一)ROV的概念和结构组成2(二)ROV的特点4(三)ROV的功能和应用4(四)ROV的应用分类6(五)ROV的关键技术8第三章总体设计10(一)系统的总体架构10(二)ROV控制系统结构及发展10(三)数据库设计11(四)运行设计12第四章详细设计14(一)整体软件设计14(二)上位机软件设计14(三)下位机软件设计52第五章软件测试61(一)测试目的61(二)测试方法和效果61第一章 绪论21世纪是人类向海洋进军的世纪。深海作为人类尚未开发的宝地和高技术领域之一,已经成为各国的重要战略目标,也是近几年国际上竞争的焦点之一。水下机器人作为一种高技术手段
2、在海洋开发和利用领域的重要性日渐重要。当今,在一些国家的水下机器人技术已经日趋成熟,并在许多场合的应用中体现出了良好的效果。随着产业的发展,迫切需要大量适用于作业的各式各样的水下机器人。世界上许多国正在大力加强水下机器人的研究,我国力争在不久的将来,推出大量实用的机器人,以使自己的机器人技术和产品在国际上占有一席之地。 随着科学技术的不断发展,水下机器人从无智能走向智能化发展。具有智能的机器人应用于深海作业中,极大地提高了人类对海洋的探测。重要的是水下机器人在海洋开发各个领域都有着广泛的应用,代替人在那些人类无法工作的深海环境条件下完成任务作业。这将极大地扩展人类科学研究活动的范围,提高人类创
3、造性科学的探究和发展。第二章 ROV简介(一)ROV的概念和结构组成1、ROV的概念ROV,即水下机器人(Remote Operated Vehicle ),是一种可在水下移动、具有视觉和感知系统、通过遥控或自主操作方式、使用机械手或其他工具代替或辅助人去完成水下作业任务的机电装置。2、ROV的结构组成(1)ROV系统组成包括:动力推进器、遥控电子通讯装置、黑白或彩色摄像头、摄像俯仰云台、用户外围传感器接口、实时在线显示单元、导航定位装置、自动舵手导航单元、辅助照明灯和凯夫拉零浮力拖缆等单元部件。如下图是一个中型的ROV:(2)机器人框架规格说明表序号名称技术要求1水下机器人外形结构与尺寸结构
4、:框架式尺寸:约400mm高 450mm宽700mm长根据具体订做规格要求尺寸会在此基础上有所变动2照明系统3组50w的高光通量卤素灯,固定在框架中,灯光可覆盖俯仰140度范围。与摄像系统配合使用,能清晰观看约5米以外的物体,可调节亮度。3摄像系统530线变焦彩色CCD摄像机,1.2Lux,F1.2光圈,PAL制式,可电动变焦,与照明系统配合使用,能清晰观看约5米以外的物体4云台系统俯仰140度,配合摄像系统使用,运动灵活5推进器系统4个有刷电机推进器。水平方向:两个推进器,呈V字形排列,V字角度可调。垂直方向:两个推进器,呈V字形排列,V字角度可调。航行速度约3节(在0节水流状态下)。能升降
5、、前进、后退、横移以及转弯等运动,运动自如;能稳定在某一深度(定深)。6基本传感器用于航行自动控制的三轴磁罗经传感器1个,精确度0.3度,三轴倾斜传感器1个,精确度0.1度,深度传感器1个,精确度0.1m。7配重配重采用挂载机构设计,机体中装有挂载平台,上面带有各种安装孔,同时预备有各种重量的配重块,通过安装孔将各种配重块安装到挂载平台中。框架中带有配重悬架,根据携带的传感器重量不同,可方便安装和拆卸配重块。8浮体深水浮体,耐压强度可达40MPa。满足主机重量22kg内、有效载重至少2kg的机器在水下姿态平衡的要求,颜色为黄色。9电缆密度约0.95kg/dm3,浮力为相对偏向正浮力,直径12m
6、m左右,牵引力达到100KG,电缆内部带有纺轮编织抗拉层。此外动力线一组,超五类双绞线两组。10地面控制系统配备专用操作控制台和增强型的软件控制系统,专用控制台和计算机软件多模式操作;控制台配备摇杆手柄和按钮。软件采用全图形界面设计。内容包括:图像捕捉,云台控制,照片存储管理,整个系统自检,照明灯控制(开、关、调节亮度),显示潜水导航参数,各种信息指示等。显示配备10寸液晶屏。带sony游戏手柄,控制机器运动,笔记本电脑由用户自配。11供电系统输入交流电100-270VAC,50/60Hz, 整个水下机器人的功率约为800W。12最大下潜深度根据客户要求定制13水下机器人在空气中重量以及有效载
7、重水下机器人在空气中重量约为22KG,有效载重2kg14保修期两年(二)ROV的特点水下机器人小巧灵活、操作简便(通过控制台上的多个旋钮即可控制机器人前进、后退、转弯、上升、下沉;灯光强弱和摄像头焦距;云台俯仰等);机器人可携带定位声纳、图像扫描声纳、多参数水质检测传感器(YSI)、辐射传感器、机械手、金属测厚计等;可实时进行水下视频检测和观测。概括为以下四点:1、可移动性移动是指水下机器人在海底爬行、附着在结构物上行进或在海水中浮游。2、能够感知机器人的外部和内部环境特性3、拥有完成使命所需的执行机构 4、能自主地或在人的参与下完成水下作业(三)ROV的功能和应用无人有缆水下机器人ROV的优
8、点在于动力充足,可以支撑复杂的探测设备和较大的机械作业用电,信息和数据的传递和交换快捷方便、数据量大,其总体决策水平较高,因此应用广泛。目前,小型遥控水下机器人已广泛用于:1、管道容器检查市政饮用水系统中水罐、水管、水库检查; 排污/排涝管道、下水道检查; 洋输油管道检查; 跨江、跨河管道检查;2、船舶河道海洋石油船体检修;水下锚、推进器、船底探查; 码头及码头桩基、桥梁、大坝水下部分检查; 航道排障、港口作业; 钻井平台水下结构检修、海洋石油工程;3、科学研究教学水环境、水下生物的观测、研究和教学; 海洋考察; 冰下观察;4、水下娱乐水下电视拍摄、水下摄影; 潜水、划船、游艇; 看护潜水员,
9、潜水前合适地点的选择;5、能源核电站反应器检查、管道检查、异物探测和取出; 水电站船闸检修; 水电大坝、水库堤坝检修(排沙洞口、拦污栅、泄水道检修);6、安全检查大坝、桥墩上是否安装爆炸物以及结构好坏情况; 遥控侦察、危险品靠近检查; 水下基阵协助安装/拆卸; 船侧、船底走私物品检测(公安、海关); 水下目标观察,废墟、坍塌矿井搜救等; 搜寻水下证据(公安、海关); 海上救助打捞、近海搜索;7、考古水下考古、水下沉船考察;8、渔业深水网箱渔业养殖,人工渔礁调查(四)ROV的应用分类水下机器人应用分为军用和民用两类。1、军用有缆水下机器人美国海军的ROV-CURV最引人注目。它是专门用于美国海军
10、实验中心打捞沉没于水中的武器,其作业深度610m,1958年建成。在最初服役的6年中,平均每年回收约100个鱼雷及其他装置。茬CURV的基础上,美国海军后来又改迸建造了一艘CURV2和一艘CURV3,它们的作业深度分别增至为762m和2300m。这类水下机器人的另一个重要作用是协助潜水员执行打捞作业。I973年8月CURV3和载人水下机器人PISCES V共同打捞起另一艘沉没的载人潜水器PISCES III。 2、军用无缆水下机器人 AUV可用来辅助军用潜艇,作为它的体外传感器,为它护航和警戒,以及为它引开敌方攻击充当假目标。在反潜方面,AUV可担任海上反潜警戒,也可当作反潜舰艇进行训练的靶艇
11、。另外,在水雷战和反水雷方面以及其他许多特种作业中,AUV都可以大显身手。 3、民用水下机器人由于近年来人们对海洋考察和开发的增多,水下机器人得到广泛的应用,其申ROV大量地被使用在各种水下作业中,AUV大范围、大深度的作业设备近期在深海资源勘探和科学考察上得到了快速地发展。由于造价和人员风险的原因,载人潜水器相对发展放缓。目前水下机器人主要应用领域包括水下工程、海洋石油、打捞救生和海洋科学考察等各方面。 (1)水下工程水下检查:查明管道、水下工程、电缆铺设的情况及其位置,检查百油钻井平台和井口的锈蚀及损坏的程度,检查水库大坝及闸门的裂缝、损坏情况等。水下监视:监视和辅助潜水员进行水下作业、救
12、助打捞和石油钻井平台的水下作业等。搜索与识别:对海洋、湖泊、江河中的沉船、遗失的仪器、工程设备等搜索寻找、记录和识别。 安装与回收:协助石油钻井平台安装、搬迁,扭转阀门、更换和安放设备,协助水下工程建设、打捞作业等。水下清理:水电站拦污栅清理,海上石油钻井平台基础清理,船体、管道及水下构件除锈、除漆等。(2)海洋救助与打捞救生 在海难救助,打捞沉船的作业中独立完成或协助潜水员完成水下作业任务。全球定位、搜索,救援遇难舰船、解救受困潜水艇、中继通讯等。(3)海洋科学考察 海洋科学考察主要包括水文地质考察 (记录海底地形、绘制海底地图、选择土样和岩石样本等)、海洋生物考察 (测定海底生物形态,采集
13、生物样本等)、海洋物理考察 (测定地球磁场,考察石油、天然气、矿物资源,考察海底火山活动情况等)、海洋光学考察等等。(4)水下考古 确定水下文物位置和性质,采集文物样本,清理考古现场,打捞文物等。(五)ROV的关键技术 1、能源技术 有缆遥控水下机器人随着深度的增加,高电压的动力输送和动力设备是必须的。目前3000V电压动力较为普遍地应用在ROV设备上。为了减少脐带电缆的尺寸和重量,将来ROV会采用更高的电压等级。目前无缆水下机器人的能源较多是使用铅酸电池和银锌电池。 2、精确定位技术 目前水下机器人在水上采用GPS,水下定位采用声学定位设备。水下GPS技术目前正在迅速地发展,自治导航的精度预
14、计将在5年内提高10倍。 3、零可见度导航技术 混水作业一直是水下机器人应用的最大障碍,利用声学、激光技术以及计算机图形增强技术,将使这个难题得到解决。 4、材料技术 在水中每增加10m的水深,外界压力将增加1个大气压 (0.1MPa)。高强度、轻质、耐腐蚀的结构材料和浮力材料是水下机器人重点发展的技术问题。 5、作业技术 水下机器人的发展目标是代替人完成各种水下作业。柔性水下机械手、专用水下作业工具以及临场感、虚拟现实技术的发展,将便水下机器人在海洋开发中发挥更大的作用。 6、声学技术 被称为声学技术革命的最新的 矢量换能技术,可使自主水下机器人的跟踪距离达到100km以上。低频水声通讯技术
15、可使在水下的通讯距离达到1000km以上,图像的水下传输距离可达20km以上。水声技术的发展将使水下机器人真正具有千里耳。 7、智能技术 机器具有与人相同的智能或超过人的智能是科幻电影的事情,从目前机器智能的发展程度看还需有较长的路要走。由人参与或半自主的水下机器人是解决目前复杂的水下作业的现实办法。 8、回收技术 水下机器人的吊放回收作业一般是在海面附近进行,所以常受海况条件的限制而成为影响水下机器人水下作业的主要因素。 第三章 总体设计(一)系统的总体架构 1.ROV工作原理 2.接口设计如图所示,下位机通过姿态信息采集等仪器获取外界信息,再把这些信息通过接口传给上位机,上位机将接受到的数
16、据进行处理后又通过接口把命令发给下位机,让它执行相应的操作。接口是连接上位机、下位机协调工作的桥梁。主要包括硬件接口、软件接口、通信接口等。 3.封装函数 上位机和下位机都有大量的数据需要获取、储存、处理等,想让软件系统能高效率的工作,就要将这些具有相同属性的函数封装,然后各自调用。这样不仅能够保护或防止代码(或数据)被我们无意破坏,而且减除了程序的冗余。有效地提高了软件的运行效率。(二)ROV控制系统结构及发展水上控制设备的功能是监视和操作水下载体,并向水下载体提供所需的动力 水上控制设备水下控制设备的功能则是执行水面的命令,产生需要的运动以完成给定的作业使命水下控制设备(三)数据库设计1.
17、数据库整体架构2.SensorDataRecord表设计(四)运行设计1.运行效果图 该软件不论是运行效果界面设计还是功能实现都是完全按照ROV的基本功能需求设计制作的。上位机界面的设计将ROV的抽象功能清晰地展示在人们面前。主要功能显示包括视频功能、检测姿态信息功能、GPS定位功能、水下设备状态显示、网络数据处理功能、操控系统功能等。2.运行模块设计多个具体的软件运行模块相互交换信息、处理数据够成了完善的软件运行效果。运行模块主要包括主控模块、分控模块、电源模块、电压转换模块、显示模块、输入模块、存储模块、通信模块、信号传输模块、信号采集模块、视频采集模块、管道定位模块、姿态测量模块、电位采
18、集模块、位置定位模块、照明控制模块和运行控制模块。第四章详细设计(一)整体软件设计ROV控制系统由上位机软件和下位机软件两部分组成,两部分的紧密结合、完美协调才能使整个ROV控制系统高效率运作。(二)上位机软件设计1.上位机软件组成框架2.代码实现(1)数据库类设计及其调用using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;using System.Data;using System.Windows.Forms;using Nature.XML;namespace
19、 DataRecord class DataRecord private string connectionString = Data Source= + SelectXMLData.GetConfiguration(SQLString, value) + ;Initial Catalog=SensorDataRecord;Integrated Security=True; private SqlConnection conn = null; public void Open() / 打开数据库连接 if (conn = null) conn = new SqlConnection(conne
20、ctionString); if (conn.State = ConnectionState.Closed) try conn.Open(); catch public void Close() /关闭数据库连接 if (conn != null & conn.State != ConnectionState.Closed) conn.Close(); public void Dispose() /释放数据库连接资源 if (conn != null) / 确认连接是否已经关闭 conn.Dispose(); conn = null; public int ExecuteSql(string
21、sqlstring) /执行SqlCommand命令 int n=0; try this.Open(); SqlCommand com = new SqlCommand(sqlstring, conn); n = com.ExecuteNonQuery(); this.Close(); this.Dispose(); catch return n; public DataSet GetDataSet(string sqlstring, string tableName)/创建DataSet对象 DataSet ds = null; try this.Open(); SqlDataAdapter
22、 da = new SqlDataAdapter(sqlstring, conn); ds = new DataSet(); da.Fill(ds, tableName); this.Close(); this.Dispose(); catch ; return ds; public SqlDataReader GetDataReader(string sqlstring)/创建SqlDataReader对象 SqlDataReader dr = null; try this.Open(); SqlCommand com = new SqlCommand(sqlstring, conn); d
23、r = com.ExecuteReader(CommandBehavior.CloseConnection); catch ; return dr; private void btnAll_Click(object sender, EventArgs e) /查询全部记录 paraInt = 1; DataRecord record = new DataRecord(); DataSet dst = record.GetDataSet(select 时间,方位角,俯仰角,翻滚角,加速度,管道深度,水深,电位,电位梯度,手自动,经度,纬度,高程 from SensorDataRecord, Se
24、nsorDataRecord); dataGridViewHistory.DataSource=dst.TablesSensorDataRecord; dataGridViewHistory.FirstDisplayedScrollingRowIndex = dataGridViewHistory.RowCount - 1; dataGridViewHistory.Columns0.DefaultCellStyle.Format = yyyy-MM-dd HH:mm:ss;把有关查询数据的操作封装在DataRecord类里,查询时调用DataRecord类。数据库的查询分全部查询和部分查询,也
25、分手动查询和自动查询。点击“查看全部”按钮和“刷新”复选框,数据表就会每5秒自动更新一次,将数据库最新的数据显示在这个可视化表里,而且表的滚动条已被设定在最低端,能看到时时更新的最新数据。从而操作人员能很好的掌握ROV的最新状况,如下图:点击“方位角、俯仰角、翻滚角、加速度、管道深度、水深、电位、电位梯度、经度、纬度、高程”等复选框和“查询”按钮,表中就显示部分查询记录,如下图:(2)串口数据的发送using System;using System.Collections.Generic;using System.Text;using System.IO.Ports;using System.
26、Collections;using System.Threading;namespace Explorer.Serial public class SerialSendData private enum DataReceiveStatus Head = 0, DataLen = 1, Command = 2, Data = 3, CheckSum = 4 public enum DataType Motor = 0, ADC0 = 1, ADC5 = 2, ADC6 = 3, ADC7 = 4, Accelerometer = 5, Temperature = 6, Camera = 7 pr
27、ivate SerialPort serialPort1; private byte headbytes = new byte2; private byte OSDLine = new byte110 0xA3, 0xC4, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3 ,0xAE, 0xA3, 0xB0, 0xA1, 0xA1, 0xA3, 0xCD, 0xA1, 0xA1, 0xA3, 0xC8, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xAE, 0xA3, 0
28、xB0, 0xA1, 0xE3, 0x13, 0x13, 0xA3, 0xD0, 0xA3, 0xE9, 0xA3, 0xF4, 0xA3, 0xE3, 0xA3, 0xE8, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xAE, 0xA3, 0xB0, 0xA1,0xE3, 0xA1,0xA1, 0xA3, 0xD2, 0xA3, 0xEF, 0xA3, 0xEC, 0xA3, 0xEC, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xB0, 0xA3, 0xAE, 0xA3, 0xB
29、0, 0xA1, 0xE3, 0x13, 0x13, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1; /TEMP:private int mintusertextlength = 2; private byte receivecommandbyte = new byte(); private int receivecommandlen = 0; private byte check
30、sum = new byte(); private bool mblnLineBusy = false; private ArrayList databyteslist = new ArrayList(); private int receiveheadbyteindex = 0; private DataReceiveStatus datareceivestatus = DataReceiveStatus.Head; private ArrayList malCmdQueue = new ArrayList(); private Thread threadSending; private T
31、hread threadReceiving; public delegate void UserRequest(object sender, ReceivedEventArgs e); public delegate void UserCommandRequest(object sender, ReceivedCommandEventArgs e); public event UserRequest OnDataReceived; public event UserCommandRequest OnCommandDataReceived; public SerialSendData() ser
32、ialPort1 = new System.IO.Ports.SerialPort(); if (serialPort1.IsOpen = false) serialPort1.ReadTimeout = 50; serialPort1.ReadBufferSize = 1024; serialPort1.DiscardNull = false; serialPort1.WriteBufferSize = 512; serialPort1.BaudRate = 9600; serialPort1.ReceivedBytesThreshold = 1024; serialPort1.DataRe
33、ceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); public void StartSending() /检测发送队列并发送 while (true) try if(malCmdQueue.Count 0) byte tempbytes; tempbytes = (byte)malCmdQueue0; malCmdQueue.RemoveAt(0); serialPort1.Write(tempbytes, 0, tempbytes.Length); catch Thread.Sleep(50); p
34、ublic void StartReceiving() /接收队列 while (true) try Thread.Sleep(50); int tempbytestoread = serialPort1.BytesToRead; if (tempbytestoread = 128) byte tempbyte = new bytetempbytestoread; serialPort1.Read(tempbyte, 0, tempbytestoread); OnDataReceived(this, new ReceivedEventArgs(tempbyte); catch public v
35、oid OpenPort(string port, int baud) /打开串口 serialPort1.PortName = port; serialPort1.BaudRate = baud; serialPort1.Open(); if (serialPort1.IsOpen = true) threadSending = new Thread(new ThreadStart(StartSending); threadSending.Start(); threadReceiving = new Thread(new ThreadStart(StartReceiving); thread
36、Receiving.Start(); public void ClosePort() /关闭串口 if (threadSending != null & threadSending.IsAlive) threadSending.Abort(); if (threadReceiving != null & threadReceiving.IsAlive) threadReceiving.Abort(); serialPort1.DiscardInBuffer(); serialPort1.DiscardOutBuffer(); serialPort1.Close(); public void S
37、endMessage(byte cmd) /str 前引导符; str1 数值 try serialPort1.DiscardOutBuffer(); serialPort1.Write(cmd, 0, cmd.Length); catch (TimeoutException) public void SendMessage(DataType _dt, String _para, String _para1) byte checksum = new byte(); byte bytes = new byte7; bytes0 = 0xCC;/0x95 bytes1 = 0xDD; bytes2 = 0x04; switch (_dt) case DataType.Motor: bytes3 = 0x20; break; case DataType.ADC0: bytes3 = 0x21; break; case DataType.ADC5: bytes3 = 0x22; break; case DataType.ADC6: bytes3 = 0x23; break; case DataType.ADC7: bytes3 = 0x24; break;
链接地址:https://www.31ppt.com/p-3986022.html