王 昊 林遠山 李 然 于 紅 王 芳
(1.大連海洋大學信息工程學院 大連 116023)(2.遼寧省海洋信息技術重點實驗室 大連 116023)(3.設施漁業教育部重點實驗室(大連海洋大學) 大連 116023)
我國是海洋大國,海洋漁業是我國糧食安全保障體系的重要組成部分。多年來,我國以海水養殖為重點的海洋漁業迅猛發展,網箱養殖是我國海洋漁業生產重要組成部分[1]。隨著水產養殖行業向集約化、自動化、信息化、智能化的方向發展,水下機器人作為重要的漁業設施裝備,因其靈活性在其中也發揮越來越重要的作用[2~7]。
網箱定期巡檢是網箱養殖過程中的必要環節。隨著網箱養殖規模的擴大、網箱離岸距離的增加,傳統人工網箱巡檢的難度亦隨之增加,對網箱巡檢提出了新的要求,其中利用機器人實現網箱的自主巡檢是未來的重要發展趨勢之一,其研究具有重要的現實意義和價值。
水下機器人巡檢方法種類繁多[8~13],其中基于強化學習的巡檢方法近年來受到廣泛關注[14~19]。強化學習方法與環境交互,并利用交互得到的數據進行模型學習。相較于其它巡檢方法,強化學習方法在水下機器人應用中的優勢在于:無需預先準備標注數據,無需事先了解水下機器人動力學知識,可對全部或部分非線性動力模型進行學習。因此,對諸如水下環境這樣未知、復雜環境中的自主巡檢問題,強化學習方法尤其適用[20~22]。
相較于地面和空中機器人,水下機器人的仿真平臺數量較少,更無針對養殖場景的專門仿真。目前,針對水產養殖機器人的研究多是采用真實機器人在真實水下環境進行[23~25]。然而在真實水下環境中開展強化學習算法訓練、測試和評估存在以下問題:
一是在強化學習訓練中,需要通過大量隨機探索來采樣數據,在真實水下環境下進行實驗成本高、效率低、危險性大。真實機器人本體成本相對較高;真實環境搭建成本巨大;離岸真實場景實驗需要母船支持,成本高;實驗過程機器人易受碰撞損壞和丟失;同時實驗的開展還受到地點、氣溫、季節等因素的制約;數據采樣效率低、質量低下。
二是缺乏一個通用的水下標準環境公平橫向地對比不同的強化學習算法。在真實水下環境中,機器人本體、環境、任務不同,狀態定義、回報函數定義、動作定義皆有區別,難以公平地橫向對比多個算法之間的性能。
三是缺乏一個統一的簡化環境規則。水下環境復雜,涉及因素眾多,受風、浪、水壓等復雜因素的嚴重干擾。刻畫過細則模型訓練難度大大提升,不利于模型的大規模應用。如何對實際水下環境、AUV 及其之間的交互關系進行抽象和簡化,需對具體業務和強化學習算法有較為深刻的理解和研究。
為此,本文基于UUV Simulator[26]、ROS[27]、和OpenAI Gym[28],搭建了一個面向養殖網箱巡檢任務的強化學習訓練系統。首先在UUV Simulator 中實現了養殖網箱巡檢場景的仿真。該場景中包含網箱、巡檢機器人、各類傳感器、水體環境,以及部分水體動力,如浮力、海流等。然后基于ROS 和OpenAI Gym 對仿真環境進行封裝,標準化了強化學習算法與網箱巡檢仿真環境的交互。依據傳感器類別、網箱數量等的不同,預設了五種網箱養殖Gym環境,適用于不同強化學習算法的開發。用戶也可在該系統中自定義、擴展環境。該系統可用于強化學習訓練與性能評估,也可用于控制算法測試。最后,利用近端策略優化強化學習算法算法(Proximal Policy Optimization,PPO)[29]對系統進行測試。測試結果驗證了系統的有效性、可用性和方便性。
仿真系統由UUV Simulator、ROS、OpenAI Gym三部分構成,系統結構如圖1 所示。UUV Simulator是一個水下環境仿真平臺,該平臺通過一套插件來模擬水下力學效應、致動器、傳感器和外部干擾,且能夠靈活地模塊化配置新的水下場景和機器人。同時該仿真器提供了和ROS 的集成接口。OpenAI Gym是一個用于強化學習算法訓練、測試和比較的工具包,它不依賴強化學習算法結構。其一方面內置了一批已定義好的經典環境集合,可供強化學習算法直接使用;另一方面它還提供了一套標準化環境定義接口,使用戶可自定義、封裝環境。OpenAI Gym使強化學習算法與環境的交互得以標準化,使用戶專注算法本身,提升了算法的開發效率。ROS是運行在Linux 上的次級操作系統,是用來開發機器人的中間件。它制定了機器人開發的統一接口標準,提供了操作系統應用的各種服務,如:硬件抽象、底層設備控制、常用函數實現、進程間消息傳遞、軟件包管理等。目前在機器人領域,ROS 是最廣泛接受的機器人開發平臺。

圖1 系統架構
整個系統架構包含四大部分:網箱養殖巡檢場景仿真、通信機制、智能體與環境交互和可視化界面。各部分描述如下:
1)網箱養殖巡檢場景仿真。該部分包含兩部分,一是對機器人工作環境,即網箱養殖場景的仿真,一是對執行巡檢任務的機器人的仿真。該部分在UUV Simulator中實現。
(1)網箱養殖場景仿真:該部分實現對網箱養殖場景的仿真,即模擬巡檢機器人的工作環境。網箱養殖場景實現了對海洋環境的仿真、網箱本體的仿真和水體動力學的仿真。巡檢機器人通過搭載的傳感器感知該場景中的環境數據,進而根據數據執行相應的動作。
(2)巡檢機器人仿真:該部分實現對機器人本體,即機器人機械結構、外觀的仿真;對傳感器,例如攝像頭、慣性測量單元、聲吶等的仿真;對推進器的仿真,可實現前進、后退、上浮、下沉、懸停、任意角度轉向等動作的模擬。
2)ROS Topics通信:系統中各個部分與仿真環境之間的通信,本文利用ROS的話題通信機制實現。
3)智能體與環境交互:該部分包含強化學習算法,及其訓練環境。其中,訓練環境即對網箱養殖場景仿真封裝得到。封裝基于OpenAI Gym 提供的標準接口和框架實現,包括對感知狀態、機器人動作、獎勵函數等的定義。
4)可視化界面:該部分包含數據信息可視化和系統設置兩個部分。數據信息可視化部分實現了對機器人搭載的傳感器獲取的信息的可視化,以及機器人本身狀態信息的可視化,包括線速度、角速度、姿態和運動軌跡等。系統設置部分實現ROS話題的訂閱、日志路徑設置等,方便開發人員對感知信息、對訓練過程進行觀察和評估。
網箱養殖場景在UUV Simulator 中構建。該場景包含三部分:海洋環境的仿真、養殖網箱的仿真和水體物理特性仿真。
海洋環境的仿真,采用名為海洋盒(ocean_box)的世界模型實現,它包含海床、水體和海面三個實體模型。每個實體模型以模型目錄形式存在。該目錄中SDF(Simulator Description File,SDF)文件定義實體的視覺屬性、慣性屬性等。
3.1.1 海床仿真
海床仿真的具體做法是:首先通過3D 建模軟件構建具有高低起伏的海床網格模型,然后在海床SDF 文件中對visual 標簽下的material 參數進行配置,實現對海床網格模型的貼圖,例如對其貼沙石圖片,以獲得海床的逼真視覺效果。
3.1.2 海面仿真
與海床仿真相同,海面仿真首先通過3D 建模軟件構建海面表面網格模型,然后在海面SDF文件中對visual標簽下的material參數進行配置,實現對海面網格模型的貼圖,例如海浪紋理圖形貼圖,以獲得逼真的海浪視覺效果。
3.1.3 水體仿真
水體具有一定的體積,浮力,水流流速和方向,此外由于海水中光衰現象,水體還具有霧化效果。水體體積范圍由海面、海底和四條垂直線所構成的六面體所界定,通過在水體SDF 文件中對visual 標簽下的pose 參數進行配置實現。霧化效果通過對world 文件中對scene 標簽下fog 參數進行配置實現。水的密度、水流速度和方向通過對world 文件中相應參數進行配置實現仿真。
養殖所使用的網箱形狀各異,較為常用的是圓柱形重力式網箱[30]?;诖耍疚姆抡鎸崿F了圓形重力式網箱。與海床、水體和海面實體模型相同,網箱實體作為一個獨立實體模塊存在。由3D建模軟件構建圓柱形重力式網箱網格模型,通過對SDF文件進行參數配置實現網箱大小、位置、數量的設置。
海流生成以及作用到海底實體的過程為:由3.1.3 節中水體仿真可知,首先在world 文件中設置密度、水流速度和方向等數據;然后海流插件讀取設置的數據,并通過相應的ROS話題發布數據。受海流作用的水下實體,例如機器人等在它的SDF文件中添加一個名為水下物體的插件,并訂閱相應的ROS話題接受海流相關數據,接受海流的作用。如圖2所示。

圖2 海流插件實現
巡檢機器人仿真可分為本體、感知器和執行器三個部分的仿真。
本體仿真實現對機器人外觀、結構、靜力學和動力學的仿真。機器人感知模塊本質是一個傳感器系統,其仿真包括各類傳感器參數、布局等,以及實現傳感器感知能力,即獲取機器人自身狀態信息和環境信息的仿真。執行模塊的仿真,包括執行機構的參數、布局等仿真,以及實現接收控制指令,并通過驅動器等動力元件使機器人執行動作的仿真。
三個部分的仿真皆通過編寫機器人描述文件(Unified Robot Description Format,URDF)來實現。
UUV Simulator 中提供了以SF 30k 為原型的RexROV2,ECA A9 AUV 和LAUV 等幾種水下機器人模型。本文選擇實驗室已有的開源水下機器人BlueROV2 為原型進行仿真。BlueROV2 性價比較高,是目前最受歡迎的開源水下機器人之一。
BlueROV2 長45.7cm,寬33.8cm,高25.4cm,最大額定深度為100m,擁有6 個推進器,其中包括四個水平推進器和兩個垂直推進器,可實現5 自由度(DoF)的控制。
機器人本體的仿真主要包含視覺模型、碰撞模型、結構、靜力學和動力學。模擬器渲染引擎使用的視覺幾何模型為COLLADA 格式,碰撞模型為STL 格式,通常碰撞模型相較于視覺模型更加精簡,以此提高碰撞計算的速度。在base.xacro 文件中配置了機器人的靜力學參數,如質量、重心、慣量,以及視覺幾何模型和碰撞幾何模型。gazebo.xacro 中配置了機器人水動力學模型,如機器人的尺寸、浮心和福森運動方程。在虛擬環境中仿真的BlueROV2如圖3所示。

圖3 BlueROV2仿真
巡檢機器人實現自主控制需搭載傳感設備以獲取其工作環境信息和其自身狀態信息。工作環境信息,如環境的視覺信息、距離信息等;機器人自身狀態信息,如機器人位姿信息、加速度信息、位移信息等;UUV Simulator 提供了多種虛擬傳感器供選擇和配置,包括攝像頭(含廣角攝像頭)、慣性測量單元、側掃聲納、多普勒計程儀、壓力計、虛擬里程計等。這些虛擬傳感器皆可通過插件實現。具體實現是在機器人描述文件sensors.xacro中加載配置各種傳感器插件和位置參數,實現對傳感器的仿真。
每個傳感器的功能被封裝為一個ROS節點,被稱之為ROS 傳感器節點。ROS 傳感器節點將原始感知數據發布到指定ROS 話題上,強化學習算法、可視化界面等通過訂閱指定ROS 話題獲取傳感器數據。
某些情況下,需要對原始感知數據進行一定預處理,這時可新建ROS 節點以擴展功能,我們稱之為擴展節點。該節點訂閱原始感知數據信息,完成預處理后再封裝、發布處理后的數據。例如,在基于視覺的巡檢任務中,可創建一個新的節點,用于對攝像頭所獲取的圖像信息進行二值化、邊緣檢測等操作,然后將處理后提取的信息采用自定義消息類型重新封裝并發布到自定義的話題上,供強化學習算法、可視化界面等訂閱獲取。擴展節點、傳感器與強化學習算法、可視化界面的交互如圖4 所示。

圖4 感知模塊流程圖
運動控制是機器人巡檢的關鍵。機器人接收控制指令,根據控制指令部署推進器執行相應的動作。在此系統中執行模塊包含控制器、推進器管理器和六個推進器單元。具體實現方式是,在snip?pets.xacro 和actuators.xacro 中配置幾何模型文件、推進器參數和位置。為生成推進器驅動機器人的控制力,需要計算推進器分配矩陣以將控制器輸出的總控制力轉化為對每個推進器的指令,這是由推進器管理器完成的。在.yaml 文件中配置推進器模型和話題,推進器管理器生成機器人機身框架和推進器框架之間的轉換矩陣,即TAM(thruster alloca?tion matrix)文件,另外推進器管理器還根據TAM和配置參數生成指定數量的推進器模型和對應話題??刂破鲃t是由相應的控制算法實現的控制器節點。
共存在三種可利用的運動控制方式:基于速度的運動控制、基于推力的運動控制和基于轉速的運動控制。在基于速度的運動控制方式中,速度控制器被封裝成ROS節點,稱之為速度控制器節點。強化學習算法通過指定話題發布目標速度信息,速度控制器節點訂閱該話題獲取目標速度信息。在速度控制器節點內,目標速度首先被轉換為總目標推力,然后根據分配矩陣將總目標推力分配給每個推進器,即每個推進器獲取推力,最后每個推進器推力轉換為轉速,從而實現對機器人的運動控制,如圖5所示。

圖5 基于速度控制方式中信息傳遞示意圖
在基于推力的運動控制方式中,推動器管理器被封裝成ROS節點,稱之為推進器管理器節點。強化學習算法通過指定話題發布總目標推力信息,推進器管理器節點訂閱該話題獲取總目標推力信息。在推進器管理器節點內,根據分配矩陣將總目標推力分配給每個推進器,即每個推進器的推力,最后每個推進器推力轉換為轉速,從而實現對機器人的運動控制,如圖6所示。

圖6 基于推力控制方式中的信息傳遞示意圖
在基于轉速的運動控制方式中,推進器被封裝成ROS節點,稱之為推進器節點。控制指令為對每個推進器單元的單獨推力,強化學習算法通過指定的話題發布所有推進器的推力信息,推進器模型訂閱該話題獲取對應推進器的推力信息,從而實現對機器人的運動控制。如圖7所示。

圖7 基于轉速控制方式中的信息傳遞示意圖
系統基于OpenAI Gym 提供的標準化環境接口,將網箱養殖仿真場景封裝成一套自定義的環境集合,用于面向網箱巡檢任務的強化學習算法的開發。
環境接口的實現基于網箱養殖仿真系統中機器人的感知模塊和執行模塊,利用ROS的話題通信機制實現機器人感知狀態信息的獲取,以及機器人動作的執行。封裝的環境作為中間件充當代理的角色在算法和仿真機器人之間傳遞動作和觀測,如圖8所示。

圖8 強化學習與巡檢機器人的交互
為降低Gym版本變化對本文仿真環境的影響,本文將Gym作為工具庫,充分利用其所提供的功能和接口,但不依賴Gym 所提供的特定文件結構格式。具體地,通過以下三個核心方法來擴展本文環境接口。強化學習算法在訓練過程中調用這些核心方法以實現與環境的交互,核心方法如下:
init():構造方法,用于初始化環境。包含對當前環境的參數設置,如狀態空間表示、動作空間表示、訂閱節點、訂閱服務、啟動仿真環境以及相關的ROS節點。
step():執行一個動作,動作執行后返回狀態觀測、即時獎勵、是否重置環境的標志和用于調試的診斷信息。該方法中的action 參數為強化學習算法通過采樣得到的動作。
reset():該方法用于將水下機器人重置到初始位置。
由于不同環境共享大量代碼,本文在環境包內提供了一批工具API,以提高代碼復用率,實現低耦合、模塊化。這些工具API 可劃分為以下四大類:
1)環境創建API:該類API 主要用于創建env,包含一系列與env創建有關的方法。
2)仿真器連接API:該類API 用于env 與仿真器的連接,實現訓練過程中所必需的開始、暫停和重置模擬的功能。
3)env 父類API:該API 作為所有env 的通用父類。父類中包含了所有env 公有方法,如init()、step()、reset()等方法。
4)獎勵函數API:該類API用于解析獎勵函數,用戶根據具體情況設計獎勵函數并寫入指定配置文件,獎勵函數API讀取解析獎勵配置并生成獎勵函數。
根據傳感器、網箱數量等的不同,本文共自定義創建了以下五種網箱巡檢環境,供強化學習算法訓練、測試和對比。
1)UUVCircleCAM-v0
該環境中網箱底部帶有一個環形軌道,機器人搭載兩個攝像頭,分別位于機器人側面和底部,可獲取軌道圖像和網箱圖像,如圖9所示。

圖9 UUVCircleCAM-v0環境
狀態:攝像頭所獲取的實時軌道圖像。
動作:動作類型或為速度,或為推力,或為轉速,分別對應速度、推力、轉速三種控制方式。動作類型通過參數設置。
2)UUVSonar-v0
該環境包含一個網箱,機器人搭載一個側掃聲吶,如圖10所示。

圖10 UUVSonar-v0環境
狀態:狀態為測掃聲納數據。
動作:動作類型或為速度,或為推力,或為轉速,分別對應速度、推力、轉速三種控制方式。動作類型通過參數設置。
3)UUVSonarIMU-v0
該環境中包含一個網箱,機器人搭載了一個測掃聲吶和一個IMU。
狀態:狀態為測掃聲納數據和IMU測量數據。
動作:動作類型或為速度,或為推力,或為轉速,分別對應速度、推力、轉速三種控制方式。動作類型通過參數設置。
4)UUVDVLIMU-v0
該環境中包含一個網箱,機器人搭載了一個多普勒測速儀(Doppler Velocity Log,DVL)和一個IMU的機器人,如圖11所示。

圖11 UUVDVLIMU-v0環境
狀態:狀態為DVL和IMU測量數據。
動作:動作類型或為速度,或為推力,或為轉速,分別對應速度、推力、轉速三種控制方式。動作類型通過參數設置。
5)UUVSonarDVLIMUMulti-v0
該環境中包含一個多網箱組成的陣列,機器人搭載一個測掃聲吶、一個IMU 和一個DVL,如圖12所示。

圖12 UUVSonarDVLIMUMulti-v0環境
狀態:狀態為聲吶、DVL和IMU測量數據。
動作:動作類型或為速度,或為推力,或為轉速,分別對應速度、推力、轉速三種控制方式。動作類型通過參數設置。
為驗證本文所搭建系統的有效性,以自定義環境UUVCircleCAM-v0 為例,采用OpenAI 的默認強化學習算法PPO(Proximal Policy Optimization,PPO)進行測試。這里使用Stable Baselines3強化學習庫實現。
訓練可通過命令行部署,運行以下命令:
roslaunch uuv_train start_train.launch tb_dir:=
可視化界面中標簽欄三個選項依次分別是3D可視化模塊、訓練狀態和觀測信息可視化模塊、評估數據可視化模塊和系統設置模塊。左欄中兩個儀表盤是對于機器人線速度和角速度的可視化,中間欄為機器人攝像頭的觀測圖像,右上欄是當前存在的ROS 話題列表。菜單欄上部顯示了機器人的連接狀態即與ROS Mater 的連接狀態,下部為對訓練的部署和監測?!皵祿?指標”如圖13 所示。訓練過程中截圖如圖14所示。

圖13 訓練數據可視化

圖14 訓練過程可視化
對于已訓練完成的強化學習控制策略或其他控制策略可利用本系統進行測試、性能評估。圖15為對訓練好后的PPO算法的評估可視化視圖。

圖15 控制策略評估可視化
本文基于UUV Simulator、ROS、OpenAI Gym 搭建了一個面向養殖網箱巡檢任務的強化學習訓練系統。該系統具有一定的可擴展性,用戶可在該系統中自定義、擴展環境。該系統可用于強化學習訓練與性能評估,也可用于控制算法測試。試驗案例表明了本文系統的有效性、可用性和操作簡便性。該系統對難以在真實水下環境進行試驗的情況下,具有一定的現實意義,有助于提升網箱巡檢控制算法的研發效率和安全性,進一步推動網箱養殖的智能化發展。未來工作將進一步考慮更多的海洋環境因素,如各種干擾,迭代完善該系統。