自動深度控制演算法 – 水下機器人 航海家號II

水下機器人航海家號II 採用的自動深度控制演算法係採用PID (proportional integral derivative) 控制器。PID 控制器是一種工業界常用的控制模型,多應用在溫度、流量、壓力等控制。PID控制器,由比例單元、積分單元和微分單元組成。可以透過調整這三個單元的增益Kp,Ki和Kd來調定其特性。PID控制器主要適用於基本上線性,且動態特性不隨時間變化的系統。 PID控制器是一個在工業控制應用中常見的反饋迴路部件。

航海家號II採用的PID控制器程式碼來自網路開源碼 PID C++ implementation byBradley Snyder 。ROV MAKER 團隊針對水下深度控制的需求,修改其模型並新增相關參數。

基於程式碼開源精神,ROV MAKER 團隊分享修改後的PID控制器程式碼並分享在此連結

航海家號II的操控介面提供PID參數設定視窗,供使用者依據需求修改深度控制PID控制器的相關參數。PID參數設定視窗如下圖所示,針對海水與淡水浮力不同,提供淡水(Lake)與海水(Ocean)兩組PID設定值供使用者切換。

Depth-Control Algorithm in Voyager II 2航海家號II 也提供 PID 即時訊息視窗,提供PID控制器運算的即時結果。這方便使用者修改PID參數後,即時得知計算結果,透過觀察結果找出適合的參數,如此可大大縮短實驗時間。 重複按鍵盤 D 鍵可以顯示/關閉PID 即時訊息視窗。這個視窗跟其他在航海家號II介面上的其他視窗一樣是可以用滑鼠拖拉至喜歡的位置。 PID 即時訊息視窗如下圖所示。

Depth-Control Algorithm in Voyager II 3

下列表格顯示航海家號II的深度控制PID所使用的參數與相關說明 :

Depth-Control Algorithm in Voyager II 4

在進一步分享調整航海家號II 深度控制PID的參數前,先介紹兩個名詞與其概念,ESC Dead Zone 跟 Depth Ctl Dead Zone。

ESC Dead Zone 就是電子變速器的死區。電子變數器是透過PWM信號控制,死區(Dead Zone)就是PWM信號讓馬達不作動的區間。

Depth Ctl Dead zone 是一個水下深度區間距離概念,指得是水下機器人在PID深度自動控制下,因為PID 輸入與感測器回饋的誤差值未達作動的水深區間範圍。換句話說就是指 深度自動控制PID的不做動區間(死區),其單位是公分。

在不同的自動控制領域,調教出一組合適的PID控制器都不是一件簡單的事情 。PID的參數往往都不是唯一解,端賴工程師對於其系統的理解與效能需求找出一組合適的參數。

對於航海家號II的深動自動控制,ROV MAKER團隊建議先調校比例單元的參數 Kp。

根據 PID 模型

pwm 值 = error * kp* factor

Kp 值會先決定Depth Ctl Dead zone大略範圍值。

假設 kp is 6,factor =1 ,電子變速器死區的範圍是 22,根據公式,則當輸入跟反饋的誤差大於 3.7cm 或 小於 -3.7cm,PID的輸出 PWM 信號將超過變速器死區驅使推進器作動。因此當kp is 6 ,Depth Ctl Dead Zone 範圍為 ±3.7cm。

Depth-Control Algorithm in Voyager II 5

微分單元參數Kd 第二個要調校的。

Kd 是關於水下機器人在定深控制時,對於瞬間外力影響時抵銷能力。kd 值越大,對於瞬間外力影響的抵抗性越佳。但是Kd值越大,也考驗電子變速器與控制板的設計。因為Kd值越大代表推進器馬達正反轉的力道跟次數將變多,馬達的回電效應將可能造成電子變速器衝擊造成重啟。此外,加入Kd值的運算後,Depth Ctl Dead Zone範圍值也將縮小。

積分單元 Ki 值是最後一個調校的。

Ki值越大,在PID控制進入一個局部穩態後,將大幅縮短Depth Ctl Dead Zone範圍值。但是積分俱有記憶效應,越大Ki值將讓更久以前的水下機器人行為影響現在PID的運算。這是使用者須特別注意的。