胡斯陽,周 俊
(上海工程技術大學 機械與汽車工程學院,上海 201620)
海洋蘊含著豐富的資源,是人類生存的第二空間,合理利用、開發和監測海洋資源對于人類社會的可持續發展將起到巨大的作用。水下機器人為人類進行海洋資源的開發提供了強有力的工具[1]。水下機器人它是接近人類所不能到達的水下空間的唯一手段,其應用范圍很廣[1]。但是我國水下機器人起步相對較晚,還處于行業發展初期,對操作簡單、功能齊全的水下機器人進行快速設計的方式還有待深入研究。
基于Simulink 建模與仿真,使用MATLAB/Simulink 軟件的MBD 技術對水下機器人的各模塊進行研究和設計。首先在計算機上通過Simulink 搭建模型;然后用Simulink 進行模型的仿真;再根據目標需求對仿真結果進行評價及驗證;當滿足設計要求后,利用TSP 工具生成嵌入式代碼。通過Simulink Coder/Embedded Coder 等模塊將代碼進行優化和測試來實現控制算法的開發和驗證,最后將代碼傳輸至目標硬件開發板中對硬件進行調用,實現水下機器人的各模塊的快速設計,提高設計的效率[2]。
水下機器人本體硬件主要由電控模塊、傳感器模塊、電源模塊、機械臂模塊和動力模塊組成,其結構分析圖如圖1 所示。

圖1 水下機器人的設計模塊
電控模塊的硬件主要包括Arduino 開發板、擴展模塊和電子調速器,負責接收傳感器的信號并通過電子調速器來調節電機的電壓大小來調節電機的轉速。
傳感器模塊的硬件主要包括流速傳感器、陀螺儀、溫度傳感器、姿態傳感器等,不同的傳感器能及時將不同的信號傳輸給主控制板,從而讓主控制板通過程序對其他的系統起到宏觀的調控。
機械臂模塊的硬件主要包括亞克力板和防水舵機,機械臂由無線通信模塊進行控制,可對一定樣品進行抓取、回收或者放置。而電源模塊主要由鋰電池和繼電器模組組成,能夠實現變壓和供電,為各個系統穩定的持續供電。
動力模塊主要由兩種型號不同的推進器組成,一種叫游離推進器負責在水平面上給予無人機動力,另一種叫垂直推進器負責維持無人機在垂直方向上的動力,游離推進器的動力主要受到流速傳感器的控制,垂直推進器的動力受姿態傳感器和陀螺儀的控制。
推進系統由游行推進器和垂直推進器組成。在經過多方面的考察評估后,本系統采用無刷電機作為推進系統的電機。無刷電機電動機的定子繞組多為三相對稱星形接法,與同三相異步電動機十分相似,但無刷直流電動機是以自控式運行的,所以不需要另加啟動繞組,也不會在負載發生突變時產生振蕩或失步。
本設計中的主控制板采用Arduino Mega ADK 開發板,其引腳資源豐富,從低端的LED 控制到要求比較高的用戶圖形界面設計都能滿足[3]。而且Arduino開源電子平臺使用方便,同時,MATLAB/Simulink 對Arduino 提供了豐富的硬件支持包,用戶可根據實際需求進行選擇。
使用MBD 技術對無刷電機模塊進行設計,先模擬無刷電機在正常供電下的運轉,采用穩定的電流電壓給電機供能,而Simulink 中Pulse Generator 模塊可以用于產生脈沖信號,因此考慮使用Pulse Generator模擬電機輸出的脈沖信號進行信號源輸入,并預設0 ~2 s 內電機輸出頻率為50 Hz,幅值為1,占空比為0.5 的脈沖信號(100 個脈沖),其仿真模型圖如圖2 所示。

圖2 無刷電機仿真模型圖
根據Simulink 庫中的范例可以對無刷電機工作進行仿真與測試,以下模型測試了無刷直流電機在一定條件下的速度。其速度與時間關系圖和扭矩與時間關系圖(圖3),可以得出負載扭矩是一個恒定值,始終與軸的旋轉方向相反的結論。

圖3 速度與時間關系圖和扭矩與時間關系圖
在根據模型的仿真結果規定了電機的速度與扭矩后,運用TSP 工具箱進行代碼的生成和運行。完成代碼的生成后,再對Arduino 中的電子調速器以及PWM 信號的取值進行優化,并且根據輸入與速度的變化規定電機在不同工作條件下合適的信號輸入。
機械臂與傳感器的設計充分利用MBD 技術的優勢,通過Arduino 的硬件支持包提供的元件與引腳模塊,快速完成模型的建立與調試,為設計過程提供便利[4]。
機械臂的運動主要通過伺服電機的轉動帶動機械結構的運動來實現(圖4)。先通過Simulink 中的Arduino 硬件支持包(TSP)直接在Simulink 中建立伺服電機的模型,如圖5 所示。單個伺服電機模型將Arduino 模擬引腳A0 的值映射為舵機轉動角度,對舵機的角度實施控制。因為模擬引腳A0 的輸出范圍為0 ~1023,為了維持舵機轉動在0 ~180°內,從Simulink Math Operations 庫將Gain 模塊拖到模型中,并將其放在連接Analog Input 和Standard Servo Write模塊的線上,將增益模塊的K值設置為0.1760。
水下機器人通過無線模塊建立通信系統,使用WiFi 模塊來進行模型建立與仿真,如圖5 所示。串口WIFI 模塊一般會包含射頻電路、MAC 地址、無線安全協議、WIFI 驅動和協議、等多個部分。其功能是將串口或TTL 電平轉換為符合WIFI 無線網絡通信標準的數據傳輸模塊,從而實現無線數據傳輸、采集或控制。

圖5 WIFI 模塊仿真模型圖
在Simulink 中使用工具欄上的Deploy to Hardware 按鈕,等待WIFI Shield Link LED 亮起,若亮起則表示已成功連接到WIFI 網絡。再打開TCP/IP 的主機發送模型,使用TCP/IP 發送塊,確保IP 地址和端口號與之前指定的WIFI Shield 設置相匹配。主機模型使用Instrument Control Toolbox 中的模塊向目標硬件發送和接收TCP/IP 或UDP 消息。
對于水下機器人傳感器的使用這里采用一種測量水溫的溫度傳感器來制作傳感器的模型,Simulink中Arduino 硬件的支持包能使用I2C 接口與基于I2C的設備通信。所以選擇用數字溫度傳感器來通信,該傳感器通過I2C 總線與Arduino 板連接。默認情況下,它將發送分辨率為0.0625 ℃的12 位溫度值。還可以將此傳感器配置為提供13 位溫度測量的擴展模式,具體操作如下。
對溫度傳感器模塊的系統進行建模(圖6),在此模型中數據類型轉換模塊將讀取的數據轉換至int16來處理溫度。Gain 模塊用于將int16 數據右移4 位(除以16)并將12 位數據與0.0625 的傳感器分辨率相乘,以獲得相應的溫度(攝氏度為單位)。值為1 和0 的兩個Constant 模塊與Switch 模塊一起使用,將溫度讀數與27 ℃的閾值進行比較。當溫度傳感器讀數超過指定的溫度閾值時,這會在引腳13 處點亮Arduino 的板載LED。

圖6 溫度傳感器仿真模型圖
在完成水下機器人的主要部件的建模與仿真后,需要完成模型向代碼轉化,由模型生成代碼的過程如圖8 所示。首先通過rtw build 命令將Simulink 模型轉化為rtw 文件,然后用Simulink Coder/Embedded Coder 中的目標語言編譯器(Target Language Compiler)將rtw 文件轉換各類源文件(主要為C 文件,h 文件),在模型的源代碼生成之后,使用Simulink 提供的模版自動生成makefile 來編譯各鏈接得到目標文件,最終將目標文件的程序代碼通過Arduino IDE 下載到開發板中進行仿真或實機運行[5]。如圖7 所示。

圖7 代碼生成流程圖
在完成模型向代碼的轉化后,需要將代碼燒錄進Arduino 開發板、或仿真平臺,驗證代碼的可靠性,本設計采用兼容Arduino 的一個模擬仿真平臺對生成的代碼進行適用性的驗證,其仿真的模型如圖8 所示。在進行模擬仿真后確認了生成的代碼能夠按照規定和需求對硬件實監控與調整,達到了設計的目的和需求。

圖8 Arduino 各模塊模擬仿真
基于模型的設計方法,本設計通過調試數學函數模型建立目標模型,并進行仿真與調試,在仿真結果符合需求的前提下運用TSP 工具進行代碼的自動生成與優化,系統由MATLAB 發起連接請求并與Arduino 建立連接后,開始數據的采集、分析與顯示。Arduino 端的數據預處理模塊功能如由MATLAB 來完成,則可省略,只需將所有原始數據由串口輸出即可。結果是優化了開發產品的過程,避免了在Arduino中的繁瑣的編程工作。但是MATLAB 的數據分析與處理模塊中涉及算法也需根據系統需求設計,不能完全依賴于所設計的模型。使用這種設計研發方式節約了編寫代碼和優化代碼的時間,是一種可推廣的研發方式。
基于Simulink 的模型建造和仿真與Arduino 合作設計產品結合起來有助于快速建立系統研究所需的仿真環境。從設計階段就可以通過模型仿真對設計思想進行早期驗證,從而降低傳統開發流程中到了測試階段發現問題再回頭修改設計并重新進行測試流程的風險,而且自動代碼生成消除了手寫代碼引入的bug,提高了產品開發和研究效率[6]。