吳艷娟, 王 凱, 程閆斌, 王留濤, 王 健, 全宗祺
(天津理工大學a. 電氣電子工程學院;b. 天津市復雜系統控制理論及應用重點實驗室,天津300384)
攝像機舵機控制系統廣泛應用于攝像機云臺和智能云臺,軍用和航空舵機云臺控制穩定性和控制精度都達到了很高的水平,被廣泛地運用到坦克、導彈、火箭、無人機及各種飛行器等設備中[1-4],在工業和民用方面應用也越來越廣泛[5]。目前,無人駕駛智能車、無人值守智能變電站,無人值守智能倉庫、無人值守停車場和智能機器人等技術的發展受到極大關注[6-11],攝像頭作為視覺系統,在一定程度上決定了機器人環境適應性和可視性的能力,也體現機器人執行任務的效率或操控難度。目前在高精度智能機器上都會安裝有攝像頭,如果攝像頭是固定的,不能轉動,機器視覺的視野范圍就會受限,會存在很大的視覺死角,使用就會存在局限性。為進一步提高智能化,需要對攝像頭的視覺范圍進行調整,將采集的圖像信息進行遠程通信,數據交互,實現遠程控制[12-14]。特別是對于在無人值守的工作環境或工作人員無法進入的惡劣工作環境中的一些智能設備,更需要這種遠程控制技術[15]。鑒于此,本文提出基于互聯網的攝像機自由轉動舵機遠程控制技術,研制出試驗演示控制系統,該控制系統實現了在客戶端對攝像頭二自由度轉動的舵機進行遠程控制,可通過客戶端靈活控制智能機器的視覺范圍,解決了攝像頭固定不動視野范圍受限,以及因工作環境限制無法進行現場操作等技術問題。
本系統主要組成部分包括執行遠程控制的客戶端、進行數據交互的互聯網、主控制器(包括全球廣域網(World Wide Web,Web)服務器、上位機和下位機)、執行部件(包括攝像頭和舵機云臺)和電源等。
系統通過主控制器局域網與客戶端進行數據交互。移動客戶端通過局域網與主控制器連接,可以接收主控制器發送的視頻圖像信息和云臺舵機當前的位置信息,同時移動客戶端可以向主控制器發送控制命令改變云臺的姿態。主控制器的上位機解析接收到的數據,控制信號通過下位機驅動云臺舵機改變云臺姿態,實現攝像頭視角的改變。主控制器也驅動顯示屏顯示系統運行時的重要信息。系統總體的結構框圖如圖1 所示。

圖1 系統總體結構框圖
本設計分成硬件和軟件設計兩個部分,硬件設計又分成機械結構設計和電路設計兩部分,整個設計過程采用模塊化設計方法。
整體的硬件設計包括主控制器、攝像頭、舵機云臺、顯示設備等,如圖2 所示。攝像頭模塊實現系統圖像信息采集功能,舵機云臺為攝像頭模塊轉動提供動力,圖像信息的傳輸和處理、客戶端控制命令數據的傳輸和解析及控制攝像頭轉動信息等均需要主控制器來控制。系統運行過程中的重要信息通過顯示屏顯示。

圖2 系統硬件框圖
采用Raspberry Pi 3B +微型計算機為主控板,具有較強的硬件擴展能力。Raspberry Pi 微型計算機搭載了無線網卡、Ethernet 網口、攝像頭串行接口(Camera Serial Interface,CSI)、40 管腳通用輸入與輸出(General-purpose input/ output,GPIO)等擴展硬件,具有較強的硬件擴展能力。在Raspbian 操作系統的配置界面中進行使能攝像頭和內置集成電路(Inter-Integrated Circuit,I2C)總線初始化硬件接口。
由于主控制器件的GPIO 帶負載能力有限,外圍器件的驅動需要單獨的電源,以保證運行穩定和安全。并且外圍器件需要接口方便插拔調試、固定舵機和有機發光二極管(Organic Light-Emitting Diode,OLED)顯示屏等,因此為外圍器件附加了帶插拔接口的驅動板。驅動板原理圖如圖3 所示。5 V直流電源為舵機提供動力。舵機和OLED通過線纜連接到驅動板上的插頭母座。

圖3 驅動板原理圖
采用Raspberry Pi配套CSI 接口高速率攝像頭模塊(Camera Module V2)采集圖像信息。為讓系統中攝像頭視覺范圍提升明顯,需要增加攝像頭在空間的自由度和每個自由度上的轉動范圍。搭建攝像頭云臺可以明顯提升攝像頭的視覺范圍。云臺的轉動動力來自型號為sg90g的舵機對外輸出的力矩。云臺的兩個自由度轉動軸相互垂直,舵機輸出軸為轉動軸。云臺機械結構示意圖如圖4 所示,圖中2 個舵機分別控制云臺2 個軸的轉動。
系統運行時有一些重要信息,但主要是文本信息,信息量較小。顯示該類信息的需求對顯示屏大小和色彩要求較低,采用OLED 顯示屏會更加輕薄,功耗更低,反應速率更快。
系統整體硬件包括攝像頭云臺、微型計算機、外圍器件驅動板、OLED 顯示屏模塊。在機械結構的分布上,將攝像頭云臺設計為一個整體(見圖4),微型計算機和外圍器件驅動板組合成一個整體,OLED 顯示屏連接在外圍器件驅動板上。其中微型計算機和外圍器件驅動板組合后的機械結構如圖5 所示。共分為3層,最上層是支架板,其功能是風扇支架和舵機云臺支架;中間一層為Raspberry Pi 3B +主控板;最下層為外圍器件驅動板,為系統舵機、OLED 顯示屏器件提供接口。

圖4 云臺機械結構示意圖

圖5 安裝組合圖
攝像機模塊通過樹莓派板載CSI 連接器連接到Raspberry Pi上,CSI接口如圖6 主控電路板中紅線標注所示。腳本主要采取循環緩存采集圖像文件的方法,實現了“流視頻技術”實現實時顯示效果,服務器會持續不斷地向客戶端推送圖像信息。
為了防止出現視頻畫面卡頓的現象,需要保證攝像機圖像信息的數據大小與網絡傳輸速率相匹配,因此,采用改變采集圖像信息時每一幀的大小和位置方法。在該腳本中對采集的圖像做了一個初始化,包括圖像的分辨率、圖像的水平和垂直翻轉,通過調整圖像數據的大小以適應網絡傳輸速度。

圖6 Raspberry Pi CSI總線接口
舵機是一種伺服電機,其輸出軸的位置可以不斷變化并可以保持。其結構包括小型直流電動機、控制器、減速齒輪組、功率放大器、必要的固定器件以及外引線組成,采用閉環控制,其控制結構框圖如圖7所示。

圖7 舵機控制系統結構框圖
本文舵機控制系統執行位置控制,輸入的控制信號是給定舵機舵面位置的脈沖信號,通過與反饋環節電位器檢測的當前舵機舵面位置脈沖信號進行比較獲得偏差,控制器對偏差進行調整后由功率放大器放大驅動直流電動機轉動,帶動與直流電動機機械連接的減速齒輪組轉動,并且帶動與減速齒輪組輸出端相連接的同軸輸出軸轉動相應角度,達到按照偏差調整舵機舵面位置的目的。其中,作為反饋環節的電位器與輸出軸相連,將檢測到的位置脈沖信號反饋給輸入端,與輸入信號作比較,以此實現閉環控制。當輸入信號(給定的位置脈沖信號)與電位器反饋的位置脈沖信號相同時,舵機就保持當前位置。當輸入信號與電位器反饋的位置信號不同時,舵機將會繼續轉動直到到達指定位置停止并保持該位置。
舵機的控制信號需要周期為20 ms 的脈寬調制(Pulse-Width Modulation,PWM)脈沖信號,該脈沖高電平范圍為0. 5 ~2. 5 ms[16],即占空比范圍為2. 5% ~12. 5%,不同占空比的PWM 脈沖對應著舵機不同的位置0 ~180°。通過Raspberry Pi產生指定的PWM脈沖作為舵機的控制信號。舵機控制效果是線性的,但在實際使用過程中,由于生產舵機個體之間零部件的差異、減速齒輪的磨損、負載的變化等影響因素的存在,舵機的機械特性并非是嚴格線性的。為在實際控制過程中精確的控制舵機的位置角度,本文對實際的舵機機械特性做了線性矯正。矯正方法是采用實際測量數據擬合的方法,根據測試數據獲得控制攝像頭左右轉動的1 號舵機和控制攝像頭上下轉動的2 號舵機擬合公式:

式中:y為占空比;x為轉動位置。波形如圖8 所示,R2為擬合系數。攝像機二自由度轉動控制軟件設計流程圖如圖9 所示。

圖8 舵機擬合機械特性

圖9 舵機控制腳本程序流程圖
本設計采用在主控微型計算機Raspberry Pi 上搭建Flask Web 服務器的方法,編寫Web 應用程序(Application ,APP),建立與客戶端的通信,實現圖像信息的發送和控制信號的接收和處理。所編寫的Web程序以Flask 路由功能為核心,建立與硬件腳本的聯系,接收到客戶端的命令后,通過相應的路由調用函數控制硬件來實現服務器與客戶端的交互。核心程序控制框圖如圖10 所示。

圖10 Web程序流程圖
程序運行啟動后,會一直詢問8080 端口是否有局域網內的客戶端訪問。當Web 服務器與客戶端建立連接后,服務器會發送數據包給瀏覽器客戶端,瀏覽器把接收到的數據解析成圖形界面給用戶。同時服務器會啟動攝像頭模塊的腳本,并不間斷向客戶端發送圖像信息,客戶端用戶可以看到實時的流視頻。客戶端上服務器傳回的頁面中除了采集的圖像信息,還有舵機的控制按鈕和舵機位置顯示的信息。用戶通過操作舵機的控制按鈕,向服務器發送請求,服務器在接收到舵機的控制請求時,啟動控制舵機的腳本。腳本運行后控制舵機改變安裝有攝像頭的二自由度云臺位置,通過無線網絡控制攝像頭云臺。舵機控制腳本停止后,服務器將腳本返回的舵機位置參數打包成Java 腳本對象簡譜(JavaScript Object Notation,JSON)數據格式推送給客戶端。
前端網頁的開發集成超文本鏈接標示語言(Hypertext Markup Language,HTML)、層疊樣式表(Cascading Style Sheets ,CSS)、Java 腳本以及Ajax 等語言,共同實現客戶端與服務器交互過程中網頁站點的搭建,利用Ajax異步刷新技術實現良好的網頁動態刷新、實時圖像信息和舵機當前時刻位置信息的顯示。
本系統在開發時接入了鍵盤、鼠標、顯示器,可以直觀地查看系統的信息,通過自發光24. 384 mm 的OLED顯示屏顯示系統的信息。利用Luma. oled 庫編寫驅動OLED的腳本,通過OLED 顯示屏顯示本系統服務器地址、隨機存取存儲器(Random Access Memory,RAM)使用情況和中央處理器(Central Processing Unit,CPU)溫度信息。運行結果如圖11所示。
根據整體功能需求,系統上電后,需要自啟動的腳本程序是Flask服務器APP和OLED驅動腳本。本文采用配置桌面自啟動腳本的方法實現腳本程序的自啟動。

圖11 OLED運行結果
在完成系統的設計后,對系統進行測試,測試的結果運行正常,所有功能均能正常實現。系統上電后,開機指示燈閃爍,正常運行后系統的OLED屏幕點亮,信息顯示完整。并通過OLED顯示屏上顯示的網絡之間互連的協議(Internet Protocol,IP)地址,使用同局域網內的客戶端訪問系統搭建的服務器:①流視頻傳輸正常;②通過網頁控制舵機轉動,舵機響應正常,如圖12 所示;③網頁及時反饋舵機位置并正常顯示,客戶端的前端頁面顯示如圖13 所示。通過對系統的測試,檢驗系統功能能夠正常實現。

圖12 攝像機試驗演示機

圖13 系統測試時前端頁面顯示
點擊圖13 所示頁面中的按鈕時,客戶端向服務器發出POST 請求,請求的內容為對舵機控制的數據。當POST請求成功時,獲取服務器返回舵機位置數據,對POST請求返回的數據解析,并將結果進行計算,得出二自由度舵機的位置,通過Java 腳本刷新顯示舵機位置的狀態條,在網頁中直觀的展示舵機的位置。
本設計實現了自由轉動攝像頭舵機控制系統,以微型計算機Raspberry Pi 為核心搭建Web 服務器,移動智能設備客戶端通過訪問該服務器,可以查看攝像機采集的實時畫面,并實時控制攝像機的舵機云臺二自由度轉動攝像頭,擴大攝像頭的視野范圍。
本設計通過局域網內的移動智能設備客戶端連接本系統,用戶在移動設備客戶端收到系統傳送的實時視頻,并通過網頁控制舵機,舵機能正確地響應客戶端的控制,網頁中舵機位置狀態欄也能正確反映舵機的實際位置。本系統主控板板載的通信串口較多,硬件接口豐富,具有較強的擴展能力,可以實現與其他設備的組合或者本系統的拓展,具有較強的兼容性和較大的開發意義。