白 樺,史 進(jìn),朱大奇
(上海海事大學(xué) 水下機(jī)器人與智能系統(tǒng)實(shí)驗(yàn)室,上海201306)
無(wú)人潛水器又稱水下機(jī)器人,它又分為有纜遙控潛水器(remotely operated vehicle,ROV)和自治水下機(jī)器人(autonomous underwater vehicle,AUV)。ROV與水面母船用臍帶纜相連,臍帶纜既向下傳輸動(dòng)力,又實(shí)時(shí)雙向傳輸控制信號(hào)(由母船至ROV)和采集數(shù)據(jù)(由ROV至母船)。而AUV與母船之間則沒(méi)有物理連接,完全依靠自身攜帶的動(dòng)力以及機(jī)器的智能自主航行[1-2]。
自治-遙控水下機(jī)器人(ARV)的概念于2002年被提出,是一種新概念的水下機(jī)器人,它結(jié)合了AUV和ROV的特點(diǎn)。這種新型水下機(jī)器人具有兩種工作模式,既可以作為傳統(tǒng)的ROV使用又可作為AUV使用。目前,這種新型水下機(jī)器人的研究報(bào)道還很少,典型的有日本JEMSTEC公司研制的UROV[3-4]水下機(jī)器人、美國(guó)WOODSHOLE海洋研究院研制的HROV[5]水下機(jī)器人,國(guó)內(nèi)第一臺(tái)ARV是中科院沈陽(yáng)自動(dòng)化研究所研制的“SARV-A”水下機(jī)器人[6-7]。2011年上海海事大學(xué)與中船702研究所合作,在已有“海箏一號(hào)”的基礎(chǔ)上,開(kāi)發(fā)出“海箏二號(hào)”ARV水下機(jī)器人。本文重點(diǎn)介紹“海箏二號(hào)”通信系統(tǒng)的設(shè)計(jì)與研制。在已有VxWorks串口通信的研究中[8-9],大多數(shù)僅針對(duì)串口通信的基本配置實(shí)現(xiàn)其基本功能。而本文則在串口通信的基本使用方法之上,引入了互斥鎖機(jī)制,實(shí)現(xiàn)了半雙工通信。
考慮到ARV硬件系統(tǒng)的可靠性、實(shí)時(shí)性,采用VxWorks作為開(kāi)發(fā)環(huán)境,數(shù)據(jù)傳輸采用RS-485串口通信方式。
VxWorks是美國(guó)Wind River System公司所推出的一個(gè)實(shí)時(shí)操作系統(tǒng),它支持幾乎所有現(xiàn)代市場(chǎng)上的嵌入式CPU,主要由以下部件組成。
1)內(nèi)核。采用基于優(yōu)先級(jí)搶占方式,同時(shí)支持同優(yōu)先級(jí)任務(wù)間的分時(shí)間片調(diào)度。
2)I/O系統(tǒng)。VxWorks提供了一個(gè)快速靈活的兼容ANSI的I/O系統(tǒng),包括UNIX標(biāo)準(zhǔn)的Basic I/O,Buffer I/O以及POSIX標(biāo)準(zhǔn)的異步I/O。
3)文件系統(tǒng)。支持4種文件系統(tǒng):dosFs,rt11Fs,rawFs和tapeFs;支持在一個(gè)單獨(dú)VxWorks系統(tǒng)上同時(shí)并存幾個(gè)不同的文件系統(tǒng)。
4)網(wǎng)絡(luò)支持。提供了對(duì)其他VxWorks系統(tǒng)和TCP/IP網(wǎng)絡(luò)系統(tǒng)的“透明”訪問(wèn)。
ARV分為水面部分和水下部分,通過(guò)光纖進(jìn)行通信,見(jiàn)圖1。
圖1 ARV硬件架構(gòu)
ARV通過(guò)光端機(jī)來(lái)實(shí)現(xiàn)水面與水下的通信,主要配備了羅經(jīng)(附帶陀螺儀)、深度計(jì)等傳感器,以及水平推進(jìn)器和垂直推進(jìn)器控制系統(tǒng)。該ARV硬件系統(tǒng)采用基于PC/104平臺(tái)的嵌入式結(jié)構(gòu)設(shè)計(jì),見(jiàn)圖2。
圖2 ARV嵌入式版
嵌入式版提供了RS-232、RS-422、RS-485三種接口。RS-232雖然傳輸線少,配線簡(jiǎn)單,但其最大傳輸距離短,與ARV的設(shè)計(jì)需要不符。RS-422能傳1 200 m,但只能采用四線制的全雙工通信。RS-485的傳輸距離也可達(dá)1 200 m,其可以采用四線制的全雙工通信,也能采用二線制的半雙工通信??紤]到ARV的實(shí)際設(shè)計(jì)需要,故采用RS-485二線制半雙工通信方式。為了實(shí)現(xiàn)可靠的長(zhǎng)距離傳輸,采用光纖為傳播介質(zhì),在收發(fā)兩端各加一個(gè)光電轉(zhuǎn)換器,采用了傳播距離可達(dá)50 km的單模光纖傳輸方式。整體硬件通信框圖見(jiàn)圖3。
圖3 ARV硬件通信框圖
圖3 中,水面控制臺(tái)與光端機(jī)A屬于水面部分,其與光端機(jī)A采用RS-485轉(zhuǎn)光纖連接。光端機(jī)A與光端機(jī)B通過(guò)單模光纖通信。光端機(jī)B及剩下的模塊屬于水下部分。光端機(jī)B與嵌入式板通過(guò)RS-485通信。嵌入式板則通過(guò)A/D、D/A、RS-232、模擬I/O、數(shù)字I/O分別與深度計(jì)、推進(jìn)器、羅經(jīng)、監(jiān)測(cè)部件(如監(jiān)測(cè)電流、電壓的宇波模塊)、電源開(kāi)關(guān)(包括ARV的供電總開(kāi)關(guān)和推進(jìn)器、LED燈等的開(kāi)關(guān))等相連接。
VxWorks支持多種啟動(dòng)方式(軟盤啟動(dòng)、U盤啟動(dòng)、硬盤啟動(dòng)、ROM啟動(dòng)、網(wǎng)絡(luò)啟動(dòng))。考慮到程序需要不斷調(diào)試,故在開(kāi)發(fā)過(guò)程中,采取FTP網(wǎng)絡(luò)啟動(dòng):以上位機(jī)作為服務(wù)器,嵌入式版作為客戶端,通過(guò)網(wǎng)線連接。具體細(xì)節(jié),見(jiàn)文獻(xiàn)[10]。
鑒于ARV的實(shí)時(shí)性、準(zhǔn)確性要求,該嵌入式版中的核心控制軟件采用多線程、帶有緩沖存儲(chǔ)的架構(gòu),見(jiàn)圖4。
圖4 ARV軟件架構(gòu)圖
圖4 中,水面指水面控制臺(tái),各部件指各設(shè)備(如羅經(jīng)、深度計(jì)、推進(jìn)器等)。中間的ARV指嵌入式版,如圖2所示,ARV中的BufToArv和BufToSub分別指水面至ARV各部件的緩沖數(shù)據(jù)存儲(chǔ)區(qū)和ARV各部件至水面的緩沖數(shù)據(jù)存儲(chǔ)區(qū)。各箭頭指向是數(shù)據(jù)的流動(dòng)方向。read、write分別指設(shè)備讀寫數(shù)據(jù)。recT和senT分別指接收和發(fā)送線程。pack和unpack分別指對(duì)數(shù)據(jù)按照協(xié)議進(jìn)行打包和解包。
操作系統(tǒng)主要有4種結(jié)構(gòu):模塊組合結(jié)構(gòu)、層次結(jié)構(gòu)、虛擬機(jī)結(jié)構(gòu)、客戶/服務(wù)器體系結(jié)構(gòu)[11]??紤]到層次結(jié)構(gòu)的優(yōu)點(diǎn),把整體局部化,各模塊之間的組織結(jié)構(gòu)和依賴關(guān)系清晰明了。鑒于開(kāi)發(fā)ARV的系統(tǒng)復(fù)雜度,采取層次結(jié)構(gòu)即可。圖4可理解為圖5所示的層次結(jié)構(gòu)。
圖5 ARV軟件層次結(jié)構(gòu)
圖5中,收發(fā)層對(duì)應(yīng)于圖4中的recT和SenT;讀寫層對(duì)應(yīng)于圖4中ARV與各部件之間的read和write。采用的收發(fā)格式協(xié)議見(jiàn)表1。
表1 ARV收發(fā)協(xié)議格式
其中,每個(gè)序號(hào)對(duì)應(yīng)1個(gè)字節(jié),每個(gè)bit對(duì)應(yīng)1位,bit 0為最低位。水面計(jì)算機(jī)發(fā)送控制指令,以左尾推控制電壓,即第5、6個(gè)字節(jié)為例說(shuō)明;ARV向水面計(jì)算機(jī)發(fā)送狀態(tài)信息,以航向角,即第9、10個(gè)字節(jié)為例說(shuō)明。
1)推進(jìn)器數(shù)據(jù)格式。推進(jìn)器數(shù)據(jù)包括左主推、右主推、艏垂推、艉垂推控制電壓,輸入范圍為:-5 V~+5 V,程序?qū)⒃摂?shù)值除以5歸一化后,按以下協(xié)議解析。
推進(jìn)器數(shù)據(jù)幀格式通過(guò)兩位十六進(jìn)制高低字節(jié)表示,bit15、bit7恒為零,bit14表示數(shù)據(jù)正負(fù),0表示“+”,1表示“-”,其結(jié)構(gòu)見(jiàn)表2。
表2中的高低字節(jié)數(shù)據(jù)是已經(jīng)歸一化以后的數(shù)據(jù),表中的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)是以-1~1來(lái)代表電機(jī)的驅(qū)動(dòng)數(shù)據(jù),到下位機(jī)上時(shí)將其映射成0~4 095,最后再將其轉(zhuǎn)換成-5~5 V的點(diǎn)擊驅(qū)動(dòng)電壓來(lái)控制推進(jìn)器。
推進(jìn)器電壓可通過(guò)式(1)求得。
式中:value(i)=0或1,當(dāng)value(14)=1時(shí),
2)羅經(jīng)數(shù)據(jù)格式。所謂羅經(jīng)數(shù)據(jù)即角度數(shù)據(jù),主要包括接收協(xié)議上的航向角、橫搖角、縱傾角等數(shù)據(jù)。范圍為0°~360°,精確到小數(shù)點(diǎn)后一位。以兩位高低字節(jié)十六進(jìn)制數(shù)表示,程序?qū)南挛粰C(jī)接收到的十六進(jìn)制數(shù)據(jù)格式轉(zhuǎn)換成0~360°的角度數(shù)據(jù)的格式,bit15、bit7、bit4恒為零,其他位數(shù)據(jù)格式見(jiàn)表3。
表3中的數(shù)據(jù)是羅經(jīng)采集數(shù)據(jù)所編的協(xié)議,高字節(jié)是代表角度0~360°整數(shù)部分拆成的二進(jìn)制表示,低字節(jié)所表示的是小數(shù)點(diǎn)后面一位的數(shù)據(jù),由于此數(shù)據(jù)只需要小數(shù)點(diǎn)后面一位就行了,所以只需用4位數(shù)字來(lái)組合即可。
此外,與推進(jìn)器數(shù)據(jù)類似,羅經(jīng)數(shù)據(jù)通過(guò)2進(jìn)制求10進(jìn)制數(shù)據(jù)可由式(2)求出。
式中:value(i)=0或1。
表2 推進(jìn)器數(shù)據(jù)格式
表3 羅經(jīng)數(shù)據(jù)格式
由于二線制的RS-485只能實(shí)現(xiàn)半雙工通信,故必須采用一種方式來(lái)實(shí)現(xiàn)對(duì)RS-485硬件的共享。常見(jiàn)的并發(fā)機(jī)制有鎖、信號(hào)量、消息隊(duì)列、管道等??紤]到RS-485在同一時(shí)間只能讀或者寫,即讀和寫不能同時(shí)發(fā)生,故采用互斥鎖來(lái)實(shí)現(xiàn)半雙工通信。
在編程中,引入對(duì)象互斥鎖的概念,是為了保證共享數(shù)據(jù)操作的完整性(原子性)。每個(gè)對(duì)象都對(duì)應(yīng)于一個(gè)可稱為“互斥鎖”的標(biāo)記,這個(gè)標(biāo)記用來(lái)保證任一時(shí)刻,只能有一個(gè)線程占用該對(duì)象。
VxWorks對(duì)于任務(wù)間的同步與通信提供了很好的支持。比如,VxWorks中有內(nèi)置的數(shù)據(jù)結(jié)構(gòu)SEM_ID,并提供了諸如semBCreate()、semMCreate()、semCCreate()、semDelete()、semTake()、semGive()、semFlush()信號(hào)量控制函數(shù),函數(shù)具體說(shuō)明,請(qǐng)參閱文獻(xiàn)[10]。
為了實(shí)現(xiàn)RS-485的半雙工通信,在程序進(jìn)行初始化的時(shí)候,創(chuàng)建一個(gè)SEM_ID semMutex對(duì)象作為互斥信號(hào)量,并且調(diào)用semBCreate(SEM_Q_PRIORITY,SEM_FULL)對(duì)其進(jìn)行初始化。之后,當(dāng)讀寫(收發(fā))線程需要獨(dú)占RS-485硬件資源時(shí),調(diào)用semTake(semMutex,WAIT_FOREVER)獲取該信號(hào)量;當(dāng)讀寫(收發(fā))線程完成工作后,調(diào)用semGive(semMutex)釋放該信號(hào)量。讀寫(收發(fā))線程的流程圖,見(jiàn)圖6。(注意:這里所說(shuō)的讀寫線程指的是圖5中水面與ARV之間的線程,而不是圖5中ARV與各部件之間的線程)。
圖6 ARV嵌入式版連接屏幕顯示
圖7 中,左邊為發(fā)送(寫)線程,左邊為接收(讀)線程。打開(kāi)讀文件,即以讀的方式打開(kāi)文件(RS485串口);打開(kāi)寫文件,即以寫的方式打開(kāi)文件(RS485)。其中,需要特別說(shuō)明的是,右邊讀進(jìn)程中的讀文件采用的是阻塞方法,因?yàn)槭前腚p工通信,寫進(jìn)程在讀進(jìn)程完成前,不會(huì)占用其資源。
圖7 互斥鎖機(jī)制
本程序采用的協(xié)議頭為“A”、“R”、“V”,發(fā)送線程每幀的長(zhǎng)度相同。測(cè)試時(shí),連接嵌入式版的顯示屏,見(jiàn)圖6,上位機(jī)啟動(dòng)串口調(diào)試器。
本程序的測(cè)試結(jié)果見(jiàn)表4。
表4 ARV半雙工通信測(cè)試結(jié)果
由表4可知,當(dāng)發(fā)送周期為100 ms,發(fā)送第20幀數(shù)據(jù)包的時(shí)候,程序就會(huì)接收到錯(cuò)誤信息;當(dāng)發(fā)送周期為180 ms時(shí),不會(huì)接收到錯(cuò)誤信息,但是1 501個(gè)數(shù)據(jù)包,會(huì)丟失1個(gè)。通信調(diào)試過(guò)程中遇到如下問(wèn)題。
1)讀串口開(kāi)始及結(jié)束,當(dāng)打開(kāi)讀文件后,采用循環(huán)等待的接收方式,直到連續(xù)接收到協(xié)議頭“A”、“R”、“V”時(shí),則認(rèn)為串口接收開(kāi)始并啟動(dòng)計(jì)數(shù)器。當(dāng)計(jì)數(shù)器值達(dá)到接收幀的長(zhǎng)度時(shí),關(guān)閉讀文件。
2)通信數(shù)據(jù)的校驗(yàn),通過(guò)每幀的最后一個(gè)字節(jié)累加和進(jìn)行校驗(yàn),校驗(yàn)錯(cuò)誤,則丟棄數(shù)據(jù)幀。
3)任何設(shè)備,其中斷數(shù)量都是有限的,當(dāng)多個(gè)設(shè)備使用同一個(gè)中斷向量時(shí),就會(huì)產(chǎn)生中斷沖突。本文通過(guò)半雙工通信,使用二線制的RS-485通信僅占用一個(gè)中斷向量即可以完成接收和發(fā)送工作。在研發(fā)此ARV的過(guò)程中,因?yàn)橛布J(rèn)設(shè)置中,8個(gè)串口本身都采用了中斷5,所以產(chǎn)生了沖突。解決方法為,屏蔽掉未使用的串口中斷7;把羅經(jīng)使用的RS-232串口改為中斷7,問(wèn)題得到解決。
通信測(cè)試結(jié)果說(shuō)明,采用半雙工通信時(shí),當(dāng)周期=180 ms時(shí),收發(fā)數(shù)據(jù)較準(zhǔn)確;當(dāng)周期=200 ms時(shí),收發(fā)數(shù)據(jù)更準(zhǔn)確;當(dāng)周期≤150 ms時(shí),收發(fā)數(shù)據(jù)出錯(cuò)比較頻繁。故在ARV的實(shí)際開(kāi)發(fā)中,采用周期為200 ms。
本文介紹了上海海事大學(xué)與中船702研究所合作開(kāi)發(fā)的ARV的系統(tǒng)組成及通信技術(shù)。分別從ARV的硬件架構(gòu)、控制軟件的軟件架構(gòu),半雙工通信的實(shí)現(xiàn)以及軟件測(cè)試結(jié)果進(jìn)行了詳述。從測(cè)試結(jié)果不難看出,當(dāng)控制程序周期在200 ms左右時(shí),嵌入式版能較好地收發(fā)數(shù)據(jù),符合ARV操控的實(shí)時(shí)性要求。其中基于互斥鎖機(jī)制實(shí)現(xiàn)的半雙工通信算法,對(duì)其他水下機(jī)器人開(kāi)發(fā)均有參考價(jià)值。目前的ARV系統(tǒng)主要是一基本功能平臺(tái),下一步將進(jìn)行水下?tīng)顟B(tài)控制開(kāi)發(fā)、水下安全避障與軌跡跟蹤控制研究等。
[1]馮正平.國(guó)外自治水下機(jī)器人發(fā)展現(xiàn)狀綜述[J].魚(yú)雷技術(shù),2005,13(1):5-9.
[2]劉芙蓉,陳 輝.自主式水下潛器研究開(kāi)發(fā)綜述[J].艦船科學(xué)技術(shù),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實(shí)時(shí)操作系統(tǒng)的串口通信程序設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006,22(5):98-100.
[9]王立新,馬勝賢.實(shí)時(shí)操作系統(tǒng)VxWorks下多串口通訊設(shè)計(jì)[J].信息技術(shù),2010,34(8):73-79.
[10]張 楊,于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開(kāi)發(fā)詳解[M].2版.北京:人民郵電出版社,2011.
[11]尤晉元,史美林.Windows操作系統(tǒng)原理[M].北京:機(jī)械工業(yè)出版社,2001.