蘭 武,戴曉強,朱延栓,鄭宇航,楊淦華
(江蘇科技大學 電子信息學院,江蘇 鎮江 212003)
隨著海上貿易和資源開發項目的增多,海洋事故的發生次數也越來越多,如韓國世越號事件[1]、俄羅斯遠東號事件[2],這些事故造成了巨大的生命代價與經濟損失。由于海底壓力大、環境異常惡劣、可視度低,打撈與救援工作的難度較大,一般設備很難完成指定任務[3]。水下遙控機器人(Remotely Operated Vehicles,ROV)具備操作性好、動力充足[4]、適應水下惡劣環境[5]等優點,在潛水員不能到達的深度和不安全的水域,可利用ROV 完成水下搜尋和救援[6]、水質環境調查[7]、打撈[8]等任務,保障工作人員人身安全[9]。
很多學者對水下機器人進行了研究,例如常潤發等[10]設計了基于STM32 微控制器的嵌入式控制系統,并對其進行了姿態和深度控制的水下試驗;肖朋振等[11]從運動控制算法和系統架構的角度出發,設計了一種ROV 控制系統;張瑋康等[12]提出一種以一體化工業加固計算機為水面監控單元,PC104 嵌入式工業控制計算機為水下主控單元,各驅動板為驅動單元的控制系統架構;余明剛[13]對便攜式水下機器人的研究進展進行了綜述。
在進行水下作業時,監控系統的作用十分重要,其是水下機器人能夠準確完成工作的核心保障[14]。監控系統能實時顯示水下機器人的狀態信息、監測故障、預警周圍環境,操控人員也可以通過監控系統對水下機器人進行自由操控。目前常見的監控系統軟件包括C#[15]、QT[16]、Lab-VIEW[17]等,但都有其自身局限性。
Java 語言的語法與C 和C++類似[18],但不使用C 與C++中難以理解的指針,因此更加容易學習。此外,Java 還可提供內存回收機制,使程序方便易懂,安全性更高[19]。Java API 提供了大量圖形用戶界面,降低了監控系統界面的編寫難度。Java 還具有移植性好的特點[20],因此可用于Web應用程序、桌面應用程序和嵌入式系統程序等的開發。基于此,本文采用Java 平臺進行監控系統軟件開發,利用Java多線程和靈活實用的優點,在程序設計和網絡編程的基礎上完成系統上層監控界面的搭建。該監控系統可實現與底層機器人的通信,實時獲取機器人本體攜帶的慣導、深度計、溫濕度傳感器等數據并在監控界面顯示,還可利用攝像頭顯示水下機器人周圍的作業環境,實現其運動控制。該系統通過內嵌SQL 語言查詢和操控數據庫,實現了對接收數據的分析、存儲和管理功能。相較于其他監控系統,本文系統具有以下特點:①舍棄了控制板設計而選用藍牙手柄,優化了整體結構,使監控系統的操作更加簡便,亦減少了開發時間;②使用網絡通信,使通信速度和質量更佳;③采用Java 語言進行開發,使得可移植性和安全性更高;④通過建立數據庫實現了數據存儲。
本文所述水下機器人系江蘇科技大學自主設計并研發的一款應用于船體檢測與作業的開架式ROV。水下機器人監控系統硬件結構如圖1 所示,包含水面控制系統和水下機器人本體。水面控制系統由藍牙手柄、監控電腦、臍帶纜和供電箱組成。機器人操控員通過臍帶纜連接監控電腦和水下機器人,觀測監控電腦反饋信息,利用藍牙手柄給電腦發送控制指令,由電腦發送給機器人進行運動控制,供電箱負責給機器人供電。水下控制系統由主控制器、從控制器、DCDC 電源模塊、推進器模塊、視頻采集和傳輸模塊、報警模塊、溫濕度采集模塊、深度采集模塊和導航模塊組成。使用STM32F407VET6 微型工控機作為水下機器人的主控制器,通過四芯網線使用TCP/IP 協議接收水面控制系統發送的控制指令,對艙內各設備進行任務分配。DCDC 電源模塊將供電箱提供的電源分級處理后根據需求提供給艙內的各個部件。推進器模塊由4 個電機驅動組成,分別對應4 個電機,這4 個電機兩兩分布在機器人本體尾部及上方。從控制器通過CAN 通訊接收主控器獲取的控制指令,根據指令輸出不同的PWM 波驅動電機轉動(高電平正轉,低電平反轉),通過控制電機轉速實現水下機器人的上浮、下潛、前進、后退、左轉、右轉、定航、定深。報警模塊通過檢測高低電平判斷艙內是否漏水(高電平為漏水)。溫濕度采集模塊負責檢測艙內溫度和濕度,并將采集到的數據發送給主控制器。深度采集模塊負責采集水下機器人的深度信息,與主控制器之間采用485 通訊。導航模塊由微型航姿參考系統(AHRS)組成,負責采集水下機器人在X 軸、Y 軸、Z 軸方向的角度和加速度信息,通過232 串口通信發送給主控制器。視頻采集和傳輸模塊由攝像頭和傳輸設備組成,視頻信號通過臍帶纜傳送至岸上,監控電腦通過四芯網線使用TCP/IP 協議將其顯示在監控界面上。

Fig.1 Hardware structure block diagram of underwater vehicle monitoring system圖1 水下機器人監控系統硬件結構
3.1.1 Java 監控系統功能結構
根據圖1 設計,Java 監控系統程序應滿足以下要求:①實時顯示水下攝像頭采集的視頻信號,能夠完成拍照、錄像等功能,根據需求對云臺進行上下左右的控制和對焦;②能夠完整接收水下機器人各個傳感器收集處理好的數據,包括姿態、深度、溫濕度、電壓等,并根據這些數據建立水下機器人的姿態模型,確定其當前姿態;③可根據操作人員命令控制水下機器人的推進器實現前進后退、左轉右轉、上浮下潛、定深定航等功能,并對水下燈進行開關控制;④當水下機器人艙內溫度過高、發生漏水、電壓或電流溫度異常時,監控系統能進行報警顯示。圖2 為基于Java的水下機器人監控系統功能結構。
3.1.2 Java 網絡通信軟件設計
監控界面程序運行在Windows 環境下,使用Java 作為監控系統的計算機語言。由于上下位機之間通信需要獲取水下機器人的姿態、溫濕度、深度、視頻、故障等大量信息,為確保數據的完整性和準確性,采用C/S 架構,基于TCP/IP 協議的Socket 方式進行通信,使用全雙工模式,以機器人本體搭載的主控制器作為服務器端,上位機作為客戶端。表1 和表2 分別為上行數據和下行指令的格式。

Fig.2 Function structure of AUV monitoring system based on Java圖2 基于Java的水下機器人監控系統功能結構

Table 1 Uplink data format表1 上行數據格式

Table 2 Downward instruction format表2 下行指令格式
使用Java 編寫的監控程序軟件采用多線程方法,線程1 負責接收藍牙手柄發送的信息,將按鍵轉化為水下機器人的操作指令,每200ms 接收一次;線程2 負責與水下機器人主控板進行網絡通訊,將線程1 轉化的操作指令發送給水下機器人主控板,在接收信號后對數據進行解析,通過濾波處理去除冗余和錯誤數據,將遍歷信號加入線程3 運行路徑規劃算法;線程4 對線程2 獲取的水下機器人所感知的環境信息和艙內指標進行處理后將其顯示在監控界面上。監控系統流程如圖3 所示。
水下控制系統主控板以STM32F407VET6 為主控制器件進行編程,使用RTX 系統實現多線程處理、軟件定時、內存和任務管理等功能。該系統擁有輕量化操作系統內核,適合本文機器人使用,相較于其他嵌入式操作系統,其具有成本低、可移植的優勢。主控制板軟件流程如圖4所示。

Fig.3 Flow of monitoring system圖3 監控系統流程

Fig.4 Software flow of main control board圖4 主控制板軟件流程
首先在陸地上對各個模塊的性能進行測試,包括推進器、水下燈、云臺攝像機、藍牙手柄、慣性導航,然后通過整體聯調進行進一步測試與優化。本文設計制作的水下機器人本體、電源箱和水面操作裝置分別如圖5、圖6 和圖7所示。

Fig.5 Remote control underwater robot圖5 遙控水下機器人實物

Fig.6 ROV power box圖6 ROV 電源箱

Fig.7 Water surface control device圖7 水面操控裝置
為驗證該系統是否能有效實現水下機器人的運動控制和狀態監測功能,本文多次在1 個長10m、寬5m、深2m的實驗水池和小湖中進行運動控制實驗。實驗時,操控員使用藍牙手柄對機器人進行遙控,實現了前進倒退、左轉右轉、上浮下潛、定深定航等動作。同時測試了監控軟件的使用效果,觀測機器人的水下運動控制是否實時有效、監控圖像是否清晰等。圖8 為實驗室水池運動測試圖,圖9為船廠測試人員遙控操作圖,圖10 為Java 監控系統界面。測試結果表明,操控人員可控制水下機器人自由運作,視頻信號無延時且云臺可自由控制,截圖和錄像畫質清晰,上下位機之間通訊正常且持續運行半小時以上無丟包現象發生。

Fig.8 Motion test of underwater robot pool圖8 水下機器人水池運動測試

Fig.9 Remote control operation圖9 遙控操作

Fig.10 Java monitoring system screen圖10 Java 監控系統畫面
本文針對水下機器人監控系統研發成本高、時間長、通用性和擴展性較差的問題,設計了一種基于Java的監控系統。驗證實驗表明,該監控系統具有較好的人機交互性能,操作人員能直觀地觀測到水下機器人的周邊環境并準確有效地進行水下作業。相較于以往的水面控制臺,該監控系統取消了控制信息采集板,選擇使用藍牙手柄進行控制,系統整體更加輕便;通過Java 監控程序生成調用手柄,簡化了水下機器人的軟硬件開發流程;采用網絡通信代替串口通信,提高了數據傳輸速度,可以發送大量數據。采用Java 實現的水下監控軟件具有較強的穩定性,大大減少了系統開發時間。此外,基于Java 在網絡開發上的便利性,該系統具備較強的擴展性,便于后期建立云操控。