APP下载

基于VxWorks的自治-遥控水下机器人半双工通信设计和实现

2013-06-12朱大奇

船海工程 2013年3期
关键词:推进器线程串口

白 桦,史 进,朱大奇

(上海海事大学 水下机器人与智能系统实验室,上海201306)

无人潜水器又称水下机器人,它又分为有缆遥控潜水器(remotely operated vehicle,ROV)和自治水下机器人(autonomous underwater vehicle,AUV)。ROV与水面母船用脐带缆相连,脐带缆既向下传输动力,又实时双向传输控制信号(由母船至ROV)和采集数据(由ROV至母船)。而AUV与母船之间则没有物理连接,完全依靠自身携带的动力以及机器的智能自主航行[1-2]。

自治-遥控水下机器人(ARV)的概念于2002年被提出,是一种新概念的水下机器人,它结合了AUV和ROV的特点。这种新型水下机器人具有两种工作模式,既可以作为传统的ROV使用又可作为AUV使用。目前,这种新型水下机器人的研究报道还很少,典型的有日本JEMSTEC公司研制的UROV[3-4]水下机器人、美国WOODSHOLE海洋研究院研制的HROV[5]水下机器人,国内第一台ARV是中科院沈阳自动化研究所研制的“SARV-A”水下机器人[6-7]。2011年上海海事大学与中船702研究所合作,在已有“海筝一号”的基础上,开发出“海筝二号”ARV水下机器人。本文重点介绍“海筝二号”通信系统的设计与研制。在已有VxWorks串口通信的研究中[8-9],大多数仅针对串口通信的基本配置实现其基本功能。而本文则在串口通信的基本使用方法之上,引入了互斥锁机制,实现了半双工通信。

1 Works系统介绍

考虑到ARV硬件系统的可靠性、实时性,采用VxWorks作为开发环境,数据传输采用RS-485串口通信方式。

VxWorks是美国Wind River System公司所推出的一个实时操作系统,它支持几乎所有现代市场上的嵌入式CPU,主要由以下部件组成。

1)内核。采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度。

2)I/O系统。VxWorks提供了一个快速灵活的兼容ANSI的I/O系统,包括UNIX标准的Basic I/O,Buffer I/O以及POSIX标准的异步I/O。

3)文件系统。支持4种文件系统:dosFs,rt11Fs,rawFs和tapeFs;支持在一个单独VxWorks系统上同时并存几个不同的文件系统。

4)网络支持。提供了对其他VxWorks系统和TCP/IP网络系统的“透明”访问。

2 硬件架构

ARV分为水面部分和水下部分,通过光纤进行通信,见图1。

图1 ARV硬件架构

ARV通过光端机来实现水面与水下的通信,主要配备了罗经(附带陀螺仪)、深度计等传感器,以及水平推进器和垂直推进器控制系统。该ARV硬件系统采用基于PC/104平台的嵌入式结构设计,见图2。

图2 ARV嵌入式版

嵌入式版提供了RS-232、RS-422、RS-485三种接口。RS-232虽然传输线少,配线简单,但其最大传输距离短,与ARV的设计需要不符。RS-422能传1 200 m,但只能采用四线制的全双工通信。RS-485的传输距离也可达1 200 m,其可以采用四线制的全双工通信,也能采用二线制的半双工通信。考虑到ARV的实际设计需要,故采用RS-485二线制半双工通信方式。为了实现可靠的长距离传输,采用光纤为传播介质,在收发两端各加一个光电转换器,采用了传播距离可达50 km的单模光纤传输方式。整体硬件通信框图见图3。

图3 ARV硬件通信框图

图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网络启动:以上位机作为服务器,嵌入式版作为客户端,通过网线连接。具体细节,见文献[10]。

鉴于ARV的实时性、准确性要求,该嵌入式版中的核心控制软件采用多线程、带有缓冲存储的架构,见图4。

图4 ARV软件架构图

图4 中,水面指水面控制台,各部件指各设备(如罗经、深度计、推进器等)。中间的ARV指嵌入式版,如图2所示,ARV中的BufToArv和BufToSub分别指水面至ARV各部件的缓冲数据存储区和ARV各部件至水面的缓冲数据存储区。各箭头指向是数据的流动方向。read、write分别指设备读写数据。recT和senT分别指接收和发送线程。pack和unpack分别指对数据按照协议进行打包和解包。

操作系统主要有4种结构:模块组合结构、层次结构、虚拟机结构、客户/服务器体系结构[11]。考虑到层次结构的优点,把整体局部化,各模块之间的组织结构和依赖关系清晰明了。鉴于开发ARV的系统复杂度,采取层次结构即可。图4可理解为图5所示的层次结构。

图5 ARV软件层次结构

图5中,收发层对应于图4中的recT和SenT;读写层对应于图4中ARV与各部件之间的read和write。采用的收发格式协议见表1。

表1 ARV收发协议格式

其中,每个序号对应1个字节,每个bit对应1位,bit 0为最低位。水面计算机发送控制指令,以左尾推控制电压,即第5、6个字节为例说明;ARV向水面计算机发送状态信息,以航向角,即第9、10个字节为例说明。

1)推进器数据格式。推进器数据包括左主推、右主推、艏垂推、艉垂推控制电压,输入范围为:-5 V~+5 V,程序将该数值除以5归一化后,按以下协议解析。

推进器数据帧格式通过两位十六进制高低字节表示,bit15、bit7恒为零,bit14表示数据正负,0表示“+”,1表示“-”,其结构见表2。

表2中的高低字节数据是已经归一化以后的数据,表中的数据转换成十进制数是以-1~1来代表电机的驱动数据,到下位机上时将其映射成0~4 095,最后再将其转换成-5~5 V的点击驱动电压来控制推进器。

推进器电压可通过式(1)求得。

式中:value(i)=0或1,当value(14)=1时,

2)罗经数据格式。所谓罗经数据即角度数据,主要包括接收协议上的航向角、横摇角、纵倾角等数据。范围为0°~360°,精确到小数点后一位。以两位高低字节十六进制数表示,程序将从下位机接收到的十六进制数据格式转换成0~360°的角度数据的格式,bit15、bit7、bit4恒为零,其他位数据格式见表3。

表3中的数据是罗经采集数据所编的协议,高字节是代表角度0~360°整数部分拆成的二进制表示,低字节所表示的是小数点后面一位的数据,由于此数据只需要小数点后面一位就行了,所以只需用4位数字来组合即可。

此外,与推进器数据类似,罗经数据通过2进制求10进制数据可由式(2)求出。

式中:value(i)=0或1。

表2 推进器数据格式

表3 罗经数据格式

4 半双工通信实现

由于二线制的RS-485只能实现半双工通信,故必须采用一种方式来实现对RS-485硬件的共享。常见的并发机制有锁、信号量、消息队列、管道等。考虑到RS-485在同一时间只能读或者写,即读和写不能同时发生,故采用互斥锁来实现半双工通信。

4.1 串口通信

在编程中,引入对象互斥锁的概念,是为了保证共享数据操作的完整性(原子性)。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证任一时刻,只能有一个线程占用该对象。

VxWorks对于任务间的同步与通信提供了很好的支持。比如,VxWorks中有内置的数据结构SEM_ID,并提供了诸如semBCreate()、semMCreate()、semCCreate()、semDelete()、semTake()、semGive()、semFlush()信号量控制函数,函数具体说明,请参阅文献[10]。

为了实现RS-485的半双工通信,在程序进行初始化的时候,创建一个SEM_ID semMutex对象作为互斥信号量,并且调用semBCreate(SEM_Q_PRIORITY,SEM_FULL)对其进行初始化。之后,当读写(收发)线程需要独占RS-485硬件资源时,调用semTake(semMutex,WAIT_FOREVER)获取该信号量;当读写(收发)线程完成工作后,调用semGive(semMutex)释放该信号量。读写(收发)线程的流程图,见图6。(注意:这里所说的读写线程指的是图5中水面与ARV之间的线程,而不是图5中ARV与各部件之间的线程)。

图6 ARV嵌入式版连接屏幕显示

图7 中,左边为发送(写)线程,左边为接收(读)线程。打开读文件,即以读的方式打开文件(RS485串口);打开写文件,即以写的方式打开文件(RS485)。其中,需要特别说明的是,右边读进程中的读文件采用的是阻塞方法,因为是半双工通信,写进程在读进程完成前,不会占用其资源。

图7 互斥锁机制

4.2 通信测试

本程序采用的协议头为“A”、“R”、“V”,发送线程每帧的长度相同。测试时,连接嵌入式版的显示屏,见图6,上位机启动串口调试器。

本程序的测试结果见表4。

表4 ARV半双工通信测试结果

由表4可知,当发送周期为100 ms,发送第20帧数据包的时候,程序就会接收到错误信息;当发送周期为180 ms时,不会接收到错误信息,但是1 501个数据包,会丢失1个。通信调试过程中遇到如下问题。

1)读串口开始及结束,当打开读文件后,采用循环等待的接收方式,直到连续接收到协议头“A”、“R”、“V”时,则认为串口接收开始并启动计数器。当计数器值达到接收帧的长度时,关闭读文件。

2)通信数据的校验,通过每帧的最后一个字节累加和进行校验,校验错误,则丢弃数据帧。

3)任何设备,其中断数量都是有限的,当多个设备使用同一个中断向量时,就会产生中断冲突。本文通过半双工通信,使用二线制的RS-485通信仅占用一个中断向量即可以完成接收和发送工作。在研发此ARV的过程中,因为硬件默认设置中,8个串口本身都采用了中断5,所以产生了冲突。解决方法为,屏蔽掉未使用的串口中断7;把罗经使用的RS-232串口改为中断7,问题得到解决。

通信测试结果说明,采用半双工通信时,当周期=180 ms时,收发数据较准确;当周期=200 ms时,收发数据更准确;当周期≤150 ms时,收发数据出错比较频繁。故在ARV的实际开发中,采用周期为200 ms。

5 结束语

本文介绍了上海海事大学与中船702研究所合作开发的ARV的系统组成及通信技术。分别从ARV的硬件架构、控制软件的软件架构,半双工通信的实现以及软件测试结果进行了详述。从测试结果不难看出,当控制程序周期在200 ms左右时,嵌入式版能较好地收发数据,符合ARV操控的实时性要求。其中基于互斥锁机制实现的半双工通信算法,对其他水下机器人开发均有参考价值。目前的ARV系统主要是一基本功能平台,下一步将进行水下状态控制开发、水下安全避障与轨迹跟踪控制研究等。

[1]冯正平.国外自治水下机器人发展现状综述[J].鱼雷技术,2005,13(1):5-9.

[2]刘芙蓉,陈 辉.自主式水下潜器研究开发综述[J].舰船科学技术,2008,30(5):21-23.

[3]MURASHIMA T,AOKI T,TSUKIOKA S,et al.Thin cable system for ROV and AUV in JAMSTEC[C]∥Proceedings of IEEE/MTS OCEANS2003,September 13-19,San Diego,CA,1999:2695-2700.

[4]AOKI T,TSUKIOKA S,HATTORI M,et al.Development of expendable optical fiber cable ROV”UROV”[C]∥OCEANS92,1992:813-818.

[5]BOWEN A D,YOERGER D R,WHITCOMB L L,et al.Exploring the deepest depths:preliminary design of a novel light-tethered hybrid ROV for global science in extreme environments[J].Marine Technology Society Journal,2004,38(2):92-101.

[6]LI Yiping,LI Shuo,ZHANG Aiqun.Recent research and development of ARV in SIA[C]∥Sixth International Symposium on Underwater Technology UT2009,Wuxi,China,April 2009:87-90.

[7]WUBaoju,LI Shuo,ZENGJunbao,et al.ARV navigation and control system at arctic research[C]∥OCEANS 2009,MTS/IEEE Biloxi-Marine Technology for Our Future:Global and Local Challenges,Shenyang,Chinese,2009:1-6.

[8]张 军.基于Vxworks实时操作系统的串口通信程序设计与实现[J].微计算机信息,2006,22(5):98-100.

[9]王立新,马胜贤.实时操作系统VxWorks下多串口通讯设计[J].信息技术,2010,34(8):73-79.

[10]张 杨,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].2版.北京:人民邮电出版社,2011.

[11]尤晋元,史美林.Windows操作系统原理[M].北京:机械工业出版社,2001.

猜你喜欢

推进器线程串口
ROV平导管推进器水动力性能模拟研究
实时操作系统mbedOS 互斥量调度机制剖析
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
基于CFD扇翼推进器敞水性能预报分析
基于EM9000工控板高性能双串口通信模型设计与实现
基于国产化环境的线程池模型研究与实现
发挥考核“指挥棒”“推进器”作用
船舶电子设备串口数据的软件共享方法
计算机中的多线程问题
瓦锡兰推出全新一代推进器产品系列