李子昌,李 智,管四海
(西安電子科技大學 機電工程學院,陜西 西安 710071)
自動裝載與視頻監控遠程控制系統*
李子昌,李 智,管四海
(西安電子科技大學 機電工程學院,陜西 西安 710071)
設計了一種嵌入式自動裝載與視頻監控系統,并通過網絡實現遠程控制。該系統采用S3C2410處理器,移植Linux操作系統,成功運行在S3C2410上。視頻監控模塊使用的攝像頭是USB接口形式,移植對應的Linux驅動程序,攝像頭才能正常采集數據。移植Libjpeg開源庫,對經硬件壓縮的圖像進行解壓,通過顯示終端顯示,進而實時對現場進行監控。自動裝載模塊的實現,首先設定期望的貨物擺放路徑,其次利用Framebuffer幀緩沖寫屏技術在顯示終端上顯示自動裝載過程。通過Socket網絡接口,上位機可對該系統進行遠程控制。
S3C2410;Linux;視頻監控;自動裝載;Libjpeg;Framebuffer;Socket
至今為止,多數傳統工業領域的貨物裝卸和擺放還是靠人力完成[1],如搬運水泥。惡劣的工作環境和繁重的體力勞動給工作人員帶來巨大的勞動負擔,且對工人的身體健康有很大的危害。隨著物聯網技術的大力發展,如何利用嵌入式技術,設計一套具有實時視頻監控且能自動裝載的系統成為當下的關鍵問題。
S3C2410處理器體積小巧,可節省板卡空間;功耗比大多數芯片要低很多,適合工作在對電源有特殊要求的環境中;主頻能夠達到203 MHz,具有很好的實時性能;具有內存管理單元,因此可以移植并運行操作系統,處理更復雜的任務[2]。基于以上特點,選擇S3C2410作為本系統主控制器。Linux操作系統支持創建多個用戶、處理多個任務[3],所以基于S3C2410+Linux的嵌入式系統成為第一選擇。Linux系統內核中圖像采集設備的接口是Video4Linux,在此接口的基礎上,結合自己的設計,開發出具有相應功能的程序。基于Video4Linux開發視頻采集程序具有接口簡單、容易實現、開發周期短等特點[4],故受到廣泛關注。Libjpeg是一個開源庫,用來壓縮或解壓JPEG格式的圖像[5],可以在設計的程序中調用該庫提供的函數,完成解壓過程,減少開發人員的工作量。Framebuffer[6]是Linux內核中可由用戶調用的函數接口,通過這個接口,可以把圖形設備當成緩沖區來使用, 圖形設備的操作與真實緩沖區的操作完全相同,可使用戶避免接觸底層繁瑣的操作,使開發變得簡單。利用Socket接口,通過網絡實現遠程控制。
綜上所述,本文提出一種基于S3C2410+Linux的嵌入式自動裝載系統,同時具有對現場進行視頻監控的功能。監控和裝載系統的軟件是在Linux系統中開發的,內核的版本是2.6.8.1,移植了相應的開源庫。另外,根文件系統的類型有很多種,該系統采用的是cramfs[7],該類型只能讀,不能寫,對數據有保護功能。程序的開發工作主要由移植驅動和開源庫、實現具有特定功能的程序等構成。視頻監控模塊由三部分組成:負責采集圖像的zc301p USB接口攝像頭、負責圖像處理的主控制器和顯示視頻的顯示終端。自動裝載模塊主要由上述的主控制器和LCD顯示設備組成。自動裝載應用程序包括擺放路徑規劃程序和模擬過程的顯示畫面程序,并通過網絡進行遠程控制。
視頻監控應用程序包含圖像數據的采集過程設計、圖像解壓縮函數的調用和LCD圖像顯示等。圖像數據采集過程調用了Video4Linux接口[4],將攝像頭的數據讀取到內存中。
初始化設備后,進行視頻圖像的截取。一種視頻截取方式是將read()函數包含在自己的程序中,這樣程序就可以將緩沖區數據提取出來;第二種方式是采用內存映射的方法讀取數據,設計的程序要包含mmap()函數,在程序中實現映射功能。內存映射的方式有一個很大的優點,就是內存共享,可大大提高訪問速度。這樣對文件的訪問不必再調用read()、write()等,各個進程能及時看到共享內存中數據的更新,進而提高實時性。故此系統采用通過mmap()內存映射的方法。
1.1 用Libjpeg解壓jpeg數據
本系統使用的Libjpeg庫是libjpeg-v6b,但libjpeg-v6b只支持文件格式的輸入。由于本系統采用的攝像頭是zc301p,此攝像頭所采集的數據是經硬件壓縮的jpeg數據流,采集的數據直接保存在內存中。然而Libjpeg庫并不支持這樣的輸入。此問題的解決方法是:修改Libjpeg庫的源碼,使其能夠解壓內存中的jpeg數據流。
1.2 視頻顯示模塊
顯示模塊采用LCD顯示屏,每個像素用16位顏色表示,格式為RGB565,但通過Libjpeg庫函數解壓數據,得到的圖像為GB888格式,即24位數據,所以需要進行格式轉化。
本系統采用的硬件設備攝像頭采集的單幅圖片最大分辨率為640×480,所以內存映射時,映射的兩個尺寸參數必須是這兩個最大值。Libjpeg解壓出來的圖片與輸入圖片分辨率同樣大。由于顯示器的分辨率是480×272,當輸入是640×480時,超出了顯示屏的尺寸,圖像顯示不完全,結果如圖1。

圖1 直接顯示的結果
Libjpeg支持縮放解壓,可供選擇的縮放比例有1/2、1/4、1/8三種。選擇1/2的縮放比例,分辨率為320×240,有花屏和明顯的掃描痕跡,顯示效果如圖2。

圖2 采用1/2縮放比例顯示的結果
以上兩種情況盡管顯示出來的部分比較清楚,但總體效果不好。選擇1/4的縮放比例,分辨率為160×120,畫面比較清晰流暢,沒有花屏,也無掃描痕跡,顯示的效果比較理想,如圖3所示。

圖3 采用1/4縮放比例顯示的結果
選擇1/8的縮放比例,畫面清晰流暢,但畫面太小,不利于實時監控,顯示效果如圖4。

圖4 采用1/8縮放比例顯示的結果
綜合三種縮放比例的分析和實驗結果比較可知,1/4縮放比例是最佳選擇。
自動裝載的實現基于Framebuffer技術。Linux內核fb_ops定義了Framebuffer設備的操作[6]。
本系統使用的開發板型號是FS2410,處理器是S3C2410。
由于顯示終端顯示的是RGB565格式,因此可通過對每個像素點直接賦值使framebuffer顯示顏色。
下面利用仿真函數對framebuffer的控制來模擬實際水泥的自動裝載過程。將顯示終端界面看作水泥擺放區域,用一塊白色矩形代表單袋水泥。從傳送帶落下的水泥每次都落在同一位置,因此選取顯示屏上一個固定區域作為水泥的落地點。在此選LCD左上角,周期性地使這塊區域變成白色即可。將顯示屏看成一個二維坐標系,落地點為(0,0),按照路徑先沿行移動、后沿列移動的順序擺放,考慮到現實中的速度問題,每移動一步,延遲1 s。此過程可建模成一個循環嵌套的過程,設定好每個具體位置應該移動的步數,實現有序執行。根據顯示屏的分辨率480×272,設定每袋水泥占的區域大小為60×80,行間隔16,列間隔10,即每行為7袋,每列為3袋,一層共21袋。設置不同的背景顏色代表不同的層,而每層的擺放方法是相同的,以便查看。在本系統中,共設計3層。第一層用藍色背景表示,裝載效果如圖5。

圖5 第一層裝載效果
第二層用紅色背景表示,裝載效果如圖6。

圖6 第二層裝載效果
第三層用綠色背景表示,裝載效果如圖7。

圖7 第三層裝載效果
另外,定義一個變量記錄裝載的數量,以供上位機調用。
利用socket在ARM開發板和上位機之間實現網絡通信。將上位機和ARM開發板用交叉網線連接起來,利用socket編程,建立一個socket,采用服務器/客戶機的訪問模式,開發板作為服務器端,上位機作為客戶機端。實現通信后,利用上位機通過網絡來直接控制開發板的工作,實現遠程控制。
在雙方的通信過程中,約定好一套通信協議。由于本文只實現了模擬裝載和實時監控兩個功能,因此在遠程控制時,只設定兩個命令即可。約定好A命令表示模擬裝載,B命令為觀看監控錄像。通過這兩個命令,可以在上位機很好地遠程控制下位機。
本文提出的嵌入式自動裝載與視頻監控系統,以S3C2410處理器作為主控制器,運行Linux系統,具有實現簡單、可擴展性強等特點。通過嵌入式視頻監控系統可以查看裝載現場的狀況,對于突發事件,能及時做出反應,保障裝載工作安全進行。自動裝載系統的設計為日后實際系統搭建打下了基礎,對以后的工作具有重大意義。
[1] 張慶平, 蘇國民. 特大型礦井全自動裝卸系統的實現[J]. 工礦自動化, 2002(6):41-42.
[2] 彭鐵鋼, 劉國繁, 曹少坤,等. 基于ARM的嵌入式視頻監控系統設計[J]. 計算機工程與設計, 2010, 31(6):1191-1194.
[3] 許青林, 解爭龍. 基于ARM的Linux系統移植研究與實現[J]. 物聯網技術, 2013(1):37-38.
[4] 王元偉, 劉國秀. 基于V4L的視頻采集系統的設計[J]. 鐵路計算機應用, 2010, 19(7):30-34.
[5] HONG J, SODSONG W, CHUNG S, et al. Design, implementation and evaluation of a task-parallel JPEG decoder for the Libjpeg-turbo library[J]. Oral Diseases, 2012, 12(12):117-120.
[6] 雷鴻, 熊文龍, 楊單. 基于Fram ebuffer的LCD驅動程序的實現[J]. 武漢理工大學學報:交通科學與工程版, 2006, 30(1):106-109.
[7] 盧劍翔, 劉成安, 胡和智,等. 基于s3c2410的CramFS根文件系統的移植[J]. 微計算機信息, 2006, 22(32):133-135.
Remote control system for automatic loading and video monitoring
Li Zichang,Li Zhi,Guan Sihai
(School of Electro-Mechanical Engineering, Xidian University, Xi’an 710071, China)
An embedded automatic loading and video monitoring system in remote control is proposed in this paper. The CPU of the system is equipped with S3C2410 processor and embedded Linux operating system. The video monitoring module uses USB interface camera, and the corresponding Linux driver is transplanted. With the Libjpeg open source library, the hardware compression image is extracted and displayed through the display terminal. To realize the automatic loading module, the desired goods placement path should be set first, and then using the Framebuffer frame buffer writing screen technology to display the automatic loading process on the display terminal. Through the Socket network interface, the host computer can realize the remote control for the system.
S3C2410; Linux; video monitoring; automatic loading; Libjpeg; Framebuffer;Socket
國家自然科學基金項目(61673310)
TP13
A
10.19358/j.issn.1674- 7720.2017.01.001
李子昌,李智,管四海.自動裝載與視頻監控遠程控制系統[J].微型機與應用,2017,36(1):1-3.
2016-09-03)
李子昌(1990-),男,碩士研究生,主要研究方向:嵌入式系統設計與開發。
李智(1961-),男,博士,教授,主要研究方向:復雜網絡、博弈演化、自適應信號處理。
管四海(1990-),男,博士研究生,主要研究方向:自適應信號處理。