




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于vxworks的自治-遥控水下机器人半双工通信软件开发
无人潜水器也被称为水下机器人,它分为罗v承认逮捕(rov)和独立水下机器人(auv)。ROV与水面母船用脐带缆相连,脐带缆既向下传输动力,又实时双向传输控制信号(由母船至ROV)和采集数据(由ROV至母船)。而AUV与母船之间则没有物理连接,完全依靠自身携带的动力以及机器的智能自主航行。自治-遥控水下机器人(ARV)的概念于2002年被提出,是一种新概念的水下机器人,它结合了AUV和ROV的特点。这种新型水下机器人具有两种工作模式,既可以作为传统的ROV使用又可作为AUV使用。目前,这种新型水下机器人的研究报道还很少,典型的有日本JEMSTEC公司研制的UROV水下机器人、美国WOODSHOLE海洋研究院研制的HROV水下机器人,国内第一台ARV是中科院沈阳自动化研究所研制的“SARV-A”水下机器人。2011年上海海事大学与中船702研究所合作,在已有“海筝一号”的基础上,开发出“海筝二号”ARV水下机器人。本文重点介绍“海筝二号”通信系统的设计与研制。在已有VxWorks串口通信的研究中,大多数仅针对串口通信的基本配置实现其基本功能。而本文则在串口通信的基本使用方法之上,引入了互斥锁机制,实现了半双工通信。1数据传输电路考虑到ARV硬件系统的可靠性、实时性,采用VxWorks作为开发环境,数据传输采用RS-485串口通信方式。VxWorks是美国WindRiverSystem公司所推出的一个实时操作系统,它支持几乎所有现代市场上的嵌入式CPU,主要由以下部件组成。1内核采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度。2i/o系统VxWorks提供了一个快速灵活的兼容ANSI的I/O系统,包括UNIX标准的BasicI/O,BufferI/O以及POSIX标准的异步I/O。3这个系统是一个系统支持4种文件系统:dosFs,rt11Fs,rawFs和tapeFs;支持在一个单独VxWorks系统上同时并存几个不同的文件系统。4网络支持提供了对其他VxWorks系统和TCP/IP网络系统的“透明”访问。2rs-42接口电路设计ARV分为水面部分和水下部分,通过光纤进行通信,见图1。ARV通过光端机来实现水面与水下的通信,主要配备了罗经(附带陀螺仪)、深度计等传感器,以及水平推进器和垂直推进器控制系统。该ARV硬件系统采用基于PC/104平台的嵌入式结构设计,见图2。嵌入式版提供了RS-232、RS-422、RS-485三种接口。RS-232虽然传输线少,配线简单,但其最大传输距离短,与ARV的设计需要不符。RS-422能传1200m,但只能采用四线制的全双工通信。RS-485的传输距离也可达1200m,其可以采用四线制的全双工通信,也能采用二线制的半双工通信。考虑到ARV的实际设计需要,故采用RS-485二线制半双工通信方式。为了实现可靠的长距离传输,采用光纤为传播介质,在收发两端各加一个光电转换器,采用了传播距离可达50km的单模光纤传输方式。整体硬件通信框图见图3。图3中,水面控制台与光端机A属于水面部分,其与光端机A采用RS-485转光纤连接。光端机A与光端机B通过单模光纤通信。光端机B及剩下的模块属于水下部分。光端机B与嵌入式板通过RS-485通信。嵌入式板则通过A/D、D/A、RS-232、模拟I/O、数字I/O分别与深度计、推进器、罗经、监测部件(如监测电流、电压的宇波模块)、电源开关(包括ARV的供电总开关和推进器、LED灯等的开关)等相连接。3些模块的设计VxWorks支持多种启动方式(软盘启动、U盘启动、硬盘启动、ROM启动、网络启动)。考虑到程序需要不断调试,故在开发过程中,采取FTP网络启动:以上位机作为服务器,嵌入式版作为客户端,通过网线连接。具体细节,见文献。鉴于ARV的实时性、准确性要求,该嵌入式版中的核心控制软件采用多线程、带有缓冲存储的架构,见图4。图4中,水面指水面控制台,各部件指各设备(如罗经、深度计、推进器等)。中间的ARV指嵌入式版,如图2所示,ARV中的BufToArv和BufToSub分别指水面至ARV各部件的缓冲数据存储区和ARV各部件至水面的缓冲数据存储区。各箭头指向是数据的流动方向。read、write分别指设备读写数据。recT和senT分别指接收和发送线程。pack和unpack分别指对数据按照协议进行打包和解包。操作系统主要有4种结构:模块组合结构、层次结构、虚拟机结构、客户/服务器体系结构。考虑到层次结构的优点,把整体局部化,各模块之间的组织结构和依赖关系清晰明了。鉴于开发ARV的系统复杂度,采取层次结构即可。图4可理解为图5所示的层次结构。图5中,收发层对应于图4中的recT和SenT;读写层对应于图4中ARV与各部件之间的read和write。采用的收发格式协议见表1。其中,每个序号对应1个字节,每个bit对应1位,bit0为最低位。水面计算机发送控制指令,以左尾推控制电压,即第5、6个字节为例说明;ARV向水面计算机发送状态信息,以航向角,即第9、10个字节为例说明。1控制器结构分析推进器数据包括左主推、右主推、艏垂推、艉垂推控制电压,输入范围为:-5V~+5V,程序将该数值除以5归一化后,按以下协议解析。推进器数据帧格式通过两位十六进制高低字节表示,bit15、bit7恒为零,bit14表示数据正负,0表示“+”,1表示“-”,其结构见表2。表2中的高低字节数据是已经归一化以后的数据,表中的数据转换成十进制数是以-1~1来代表电机的驱动数据,到下位机上时将其映射成0~4095,最后再将其转换成-5~5V的点击驱动电压来控制推进器。推进器电压可通过式(1)求得。|VPropeller|=∑i=813(value(i)*2i−13)+∑i=06(value(i)*2i−12)(1)|VΡropeller|=∑i=813(value(i)*2i-13)+∑i=06(value(i)*2i-12)(1)式中:value(i)=0或1,当value(14)=1时,VPropeller<0,当value(14)=0时,VPropeller>0。2其他位数据格式所谓罗经数据即角度数据,主要包括接收协议上的航向角、横摇角、纵倾角等数据。范围为0°~360°,精确到小数点后一位。以两位高低字节十六进制数表示,程序将从下位机接收到的十六进制数据格式转换成0~360°的角度数据的格式,bit15、bit7、bit4恒为零,其他位数据格式见表3。表3中的数据是罗经采集数据所编的协议,高字节是代表角度0~360°整数部分拆成的二进制表示,低字节所表示的是小数点后面一位的数据,由于此数据只需要小数点后面一位就行了,所以只需用4位数字来组合即可。此外,与推进器数据类似,罗经数据通过2进制求10进制数据可由式(2)求出。Datacompass=∑i=814(value(i)*2i−8)+∑i=78(value(i)*2i+2)+110*∑i=03(value(i)*2i)(2)Datacompass=∑i=814(value(i)*2i-8)+∑i=78(value(i)*2i+2)+110*∑i=03(value(i)*2i)(2)式中:value(i)=0或1。4rs-843常用的并发症机制由于二线制的RS-485只能实现半双工通信,故必须采用一种方式来实现对RS-485硬件的共享。常见的并发机制有锁、信号量、消息队列、管道等。考虑到RS-485在同一时间只能读或者写,即读和写不能同时发生,故采用互斥锁来实现半双工通信。4.1rs-843信号量控制函数在编程中,引入对象互斥锁的概念,是为了保证共享数据操作的完整性(原子性)。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证任一时刻,只能有一个线程占用该对象。VxWorks对于任务间的同步与通信提供了很好的支持。比如,VxWorks中有内置的数据结构SEM_ID,并提供了诸如semBCreate()、semMCreate()、semCCreate()、semDelete()、semTake()、semGive()、semFlush()信号量控制函数,函数具体说明,请参阅文献。为了实现RS-485的半双工通信,在程序进行初始化的时候,创建一个SEM_IDsemMutex对象作为互斥信号量,并且调用semBCreate(SEM_Q_PRIORITY,SEM_FULL)对其进行初始化。之后,当读写(收发)线程需要独占RS-485硬件资源时,调用semTake(semMutex,WAIT_FOREVER)获取该信号量;当读写(收发)线程完成工作后,调用semGive(semMutex)释放该信号量。读写(收发)线程的流程图,见图6。(注意:这里所说的读写线程指的是图5中水面与ARV之间的线程,而不是图5中ARV与各部件之间的线程)。图7中,左边为发送(写)线程,左边为接收(读)线程。打开读文件,即以读的方式打开文件(RS485串口);打开写文件,即以写的方式打开文件(RS485)。其中,需要特别说明的是,右边读进程中的读文件采用的是阻塞方法,因为是半双工通信,写进程在读进程完成前,不会占用其资源。4.2半双工通信现状及问题本程序采用的协议头为“A”、“R”、“V”,发送线程每帧的长度相同。测试时,连接嵌入式版的显示屏,见图6,上位机启动串口调试器。本程序的测试结果见表4。由表4可知,当发送周期为100ms,发送第20帧数据包的时候,程序就会接收到错误信息;当发送周期为180ms时,不会接收到错误信息,但是1501个数据包,会丢失1个。通信调试过程中遇到如下问题。1)读串口开始及结束,当打开读文件后,采用循环等待的接收方式,直到连续接收到协议头“A”、“R”、“V”时,则认为串口接收开始并启动计数器。当计数器值达到接收帧的长度时,关闭读文件。2)通信数据的校验,通过每帧的最后一个字节累加和进行校验,校验错误,则丢弃数据帧。3)任何设备,其中断数量都是有限的,当多个设备使用同一个中断向量时,就会产生中断冲突。本文通过半双工通信,使用二线制的RS-485通信仅占用一个中断向量即可以完成接收和发送工作。在研发此ARV的过程中,因为硬件默认设置中,8个串口本身都采用了中断5,所以产生了冲突。解决方法为,屏蔽掉未使用的串口中断7;把罗经使用的RS-232串口改为中断7,问题得到解决。通信测试结果说明,采用半双工通信时,当周期=180ms时,收发数据较准确;当周期=200ms时,收发数据更准确;当周期≤150ms时,收发数据出错比较频繁。故在ARV的实际开发中,采用周期为200ms
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论