李子昌,,李智,,管四海
(西安電子科技大學(xué) 機(jī)電工程學(xué)院,,陜西 西安 710071)
摘要:設(shè)計(jì)了一種嵌入式自動(dòng)裝載與視頻監(jiān)控系統(tǒng),,并通過網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程控制。該系統(tǒng)采用S3C2410處理器,,移植Linux操作系統(tǒng),,成功運(yùn)行在S3C2410上。視頻監(jiān)控模塊使用的攝像頭是USB接口形式,,移植對(duì)應(yīng)的Linux驅(qū)動(dòng)程序,,攝像頭才能正常采集數(shù)據(jù)。移植Libjpeg開源庫,,對(duì)經(jīng)硬件壓縮的圖像進(jìn)行解壓,,通過顯示終端顯示,進(jìn)而實(shí)時(shí)對(duì)現(xiàn)場(chǎng)進(jìn)行監(jiān)控,。自動(dòng)裝載模塊的實(shí)現(xiàn),,首先設(shè)定期望的貨物擺放路徑,其次利用Framebuffer幀緩沖寫屏技術(shù)在顯示終端上顯示自動(dòng)裝載過程,。通過Socket網(wǎng)絡(luò)接口,,上位機(jī)可對(duì)該系統(tǒng)進(jìn)行遠(yuǎn)程控制,。
關(guān)鍵詞:S3C2410;Linux,;視頻監(jiān)控,;自動(dòng)裝載;Libjpeg,;Framebuffer,;Socket
中圖分類號(hào):TP13文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.01.001
引用格式:李子昌,李智,,管四海.自動(dòng)裝載與視頻監(jiān)控遠(yuǎn)程控制系統(tǒng)[J].微型機(jī)與應(yīng)用,,2017,36(1):1-3.
至今為止,多數(shù)傳統(tǒng)工業(yè)領(lǐng)域的貨物裝卸和擺放還是靠人力完成[1],,如搬運(yùn)水泥,。惡劣的工作環(huán)境和繁重的體力勞動(dòng)給工作人員帶來巨大的勞動(dòng)負(fù)擔(dān),且對(duì)工人的身體健康有很大的危害,。隨著物聯(lián)網(wǎng)技術(shù)的大力發(fā)展,,如何利用嵌入式技術(shù),,設(shè)計(jì)一套具有實(shí)時(shí)視頻監(jiān)控且能自動(dòng)裝載的系統(tǒng)成為當(dāng)下的關(guān)鍵問題,。
S3C2410處理器體積小巧,可節(jié)省板卡空間,;功耗比大多數(shù)芯片要低很多,,適合工作在對(duì)電源有特殊要求的環(huán)境中;主頻能夠達(dá)到203 MHz,,具有很好的實(shí)時(shí)性能,;具有內(nèi)存管理單元,因此可以移植并運(yùn)行操作系統(tǒng),,處理更復(fù)雜的任務(wù)[2],。基于以上特點(diǎn),,選擇S3C2410作為本系統(tǒng)主控制器,。Linux操作系統(tǒng)支持創(chuàng)建多個(gè)用戶、處理多個(gè)任務(wù)[3],,所以基于S3C2410+Linux的嵌入式系統(tǒng)成為第一選擇,。Linux系統(tǒng)內(nèi)核中圖像采集設(shè)備的接口是Video4Linux,在此接口的基礎(chǔ)上,,結(jié)合自己的設(shè)計(jì),,開發(fā)出具有相應(yīng)功能的程序?;赩ideo4Linux開發(fā)視頻采集程序具有接口簡單,、容易實(shí)現(xiàn),、開發(fā)周期短等特點(diǎn)[4],故受到廣泛關(guān)注,。Libjpeg是一個(gè)開源庫,,用來壓縮或解壓JPEG格式的圖像[5],可以在設(shè)計(jì)的程序中調(diào)用該庫提供的函數(shù),,完成解壓過程,,減少開發(fā)人員的工作量。Framebuffer[6]是Linux內(nèi)核中可由用戶調(diào)用的函數(shù)接口,,通過這個(gè)接口,,可以把圖形設(shè)備當(dāng)成緩沖區(qū)來使用, 圖形設(shè)備的操作與真實(shí)緩沖區(qū)的操作完全相同,,可使用戶避免接觸底層繁瑣的操作,,使開發(fā)變得簡單。利用Socket接口,,通過網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程控制,。
綜上所述,本文提出一種基于S3C2410+Linux的嵌入式自動(dòng)裝載系統(tǒng),,同時(shí)具有對(duì)現(xiàn)場(chǎng)進(jìn)行視頻監(jiān)控的功能,。監(jiān)控和裝載系統(tǒng)的軟件是在Linux系統(tǒng)中開發(fā)的,內(nèi)核的版本是2.6.8.1,,移植了相應(yīng)的開源庫,。另外,根文件系統(tǒng)的類型有很多種,,該系統(tǒng)采用的是cramfs[7],,該類型只能讀,不能寫,,對(duì)數(shù)據(jù)有保護(hù)功能,。程序的開發(fā)工作主要由移植驅(qū)動(dòng)和開源庫、實(shí)現(xiàn)具有特定功能的程序等構(gòu)成,。視頻監(jiān)控模塊由三部分組成:負(fù)責(zé)采集圖像的zc301p USB接口攝像頭,、負(fù)責(zé)圖像處理的主控制器和顯示視頻的顯示終端。自動(dòng)裝載模塊主要由上述的主控制器和LCD顯示設(shè)備組成,。自動(dòng)裝載應(yīng)用程序包括擺放路徑規(guī)劃程序和模擬過程的顯示畫面程序,,并通過網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程控制。
1視頻監(jiān)控模塊設(shè)計(jì)
視頻監(jiān)控應(yīng)用程序包含圖像數(shù)據(jù)的采集過程設(shè)計(jì),、圖像解壓縮函數(shù)的調(diào)用和LCD圖像顯示等,。圖像數(shù)據(jù)采集過程調(diào)用了Video4Linux接口[4],將攝像頭的數(shù)據(jù)讀取到內(nèi)存中,。
初始化設(shè)備后,,進(jìn)行視頻圖像的截取,。一種視頻截取方式是將read()函數(shù)包含在自己的程序中,這樣程序就可以將緩沖區(qū)數(shù)據(jù)提取出來,;第二種方式是采用內(nèi)存映射的方法讀取數(shù)據(jù),,設(shè)計(jì)的程序要包含mmap()函數(shù),在程序中實(shí)現(xiàn)映射功能,。內(nèi)存映射的方式有一個(gè)很大的優(yōu)點(diǎn),,就是內(nèi)存共享,可大大提高訪問速度,。這樣對(duì)文件的訪問不必再調(diào)用read(),、write()等,各個(gè)進(jìn)程能及時(shí)看到共享內(nèi)存中數(shù)據(jù)的更新,,進(jìn)而提高實(shí)時(shí)性,。故此系統(tǒng)采用通過mmap()內(nèi)存映射的方法。
1.1用Libjpeg解壓jpeg數(shù)據(jù)
本系統(tǒng)使用的Libjpeg庫是libjpegv6b,,但libjpeg-v6b只支持文件格式的輸入,。由于本系統(tǒng)采用的攝像頭是zc301p,此攝像頭所采集的數(shù)據(jù)是經(jīng)硬件壓縮的jpeg數(shù)據(jù)流,,采集的數(shù)據(jù)直接保存在內(nèi)存中,。然而Libjpeg庫并不支持這樣的輸入。此問題的解決方法是:修改Libjpeg庫的源碼,,使其能夠解壓內(nèi)存中的jpeg數(shù)據(jù)流,。
1.2視頻顯示模塊
顯示模塊采用LCD顯示屏,,每個(gè)像素用16位顏色表示,,格式為RGB565,但通過Libjpeg庫函數(shù)解壓數(shù)據(jù),,得到的圖像為GB888格式,,即24位數(shù)據(jù),所以需要進(jìn)行格式轉(zhuǎn)化,。
本系統(tǒng)采用的硬件設(shè)備攝像頭采集的單幅圖片最大分辨率為640×480,,所以內(nèi)存映射時(shí),映射的兩個(gè)尺寸參數(shù)必須是這兩個(gè)最大值,。Libjpeg解壓出來的圖片與輸入圖片分辨率同樣大,。由于顯示器的分辨率是480×272,當(dāng)輸入是640×480時(shí),,超出了顯示屏的尺寸,,圖像顯示不完全,結(jié)果如圖1,。
Libjpeg支持縮放解壓,,可供選擇的縮放比例有1/2,、1/4、1/8三種,。選擇1/2的縮放比例,,分辨率為320×240,有花屏和明顯的掃描痕跡,,顯示效果如圖2,。
以上兩種情況盡管顯示出來的部分比較清楚,但總體效果不好,。選擇1/4的縮放比例,,分辨率為160×120,畫面比較清晰流暢,,沒有花屏,,也無掃描痕跡,顯示的效果比較理想,,如圖3所示,。
選擇1/8的縮放比例,畫面清晰流暢,,但畫面太小,,不利于實(shí)時(shí)監(jiān)控,顯示效果如圖4,。
綜合三種縮放比例的分析和實(shí)驗(yàn)結(jié)果比較可知,,1/4縮放比例是最佳選擇。
2自動(dòng)裝載的設(shè)計(jì)與實(shí)現(xiàn)
自動(dòng)裝載的實(shí)現(xiàn)基于Framebuffer技術(shù),。Linux內(nèi)核fb_ops定義了Framebuffer設(shè)備的操作[6],。
本系統(tǒng)使用的開發(fā)板型號(hào)是FS2410,處理器是S3C2410,。
由于顯示終端顯示的是RGB565格式,,因此可通過對(duì)每個(gè)像素點(diǎn)直接賦值使framebuffer顯示顏色。
下面利用仿真函數(shù)對(duì)framebuffer的控制來模擬實(shí)際水泥的自動(dòng)裝載過程,。將顯示終端界面看作水泥擺放區(qū)域,,用一塊白色矩形代表單袋水泥。從傳送帶落下的水泥每次都落在同一位置,,因此選取顯示屏上一個(gè)固定區(qū)域作為水泥的落地點(diǎn),。在此選LCD左上角,周期性地使這塊區(qū)域變成白色即可,。將顯示屏看成一個(gè)二維坐標(biāo)系,,落地點(diǎn)為(0,0),按照路徑先沿行移動(dòng),、后沿列移動(dòng)的順序擺放,,考慮到現(xiàn)實(shí)中的速度問題,,每移動(dòng)一步,延遲1 s,。此過程可建模成一個(gè)循環(huán)嵌套的過程,,設(shè)定好每個(gè)具體位置應(yīng)該移動(dòng)的步數(shù),實(shí)現(xiàn)有序執(zhí)行,。根據(jù)顯示屏的分辨率480×272,,設(shè)定每袋水泥占的區(qū)域大小為60×80,行間隔16,,列間隔10,,即每行為7袋,每列為3袋,,一層共21袋,。設(shè)置不同的背景顏色代表不同的層,而每層的擺放方法是相同的,,以便查看,。在本系統(tǒng)中,共設(shè)計(jì)3層,。第一層用藍(lán)色背景表示,,裝載效果如圖5。
第二層用紅色背景表示,,裝載效果如圖6,。
第三層用綠色背景表示,裝載效果如圖7,。
另外,,定義一個(gè)變量記錄裝載的數(shù)量,以供上位機(jī)調(diào)用,。
3遠(yuǎn)程控制
利用socket在ARM開發(fā)板和上位機(jī)之間實(shí)現(xiàn)網(wǎng)絡(luò)通信,。將上位機(jī)和ARM開發(fā)板用交叉網(wǎng)線連接起來,,利用socket編程,,建立一個(gè)socket,采用服務(wù)器/客戶機(jī)的訪問模式,,開發(fā)板作為服務(wù)器端,,上位機(jī)作為客戶機(jī)端。實(shí)現(xiàn)通信后,,利用上位機(jī)通過網(wǎng)絡(luò)來直接控制開發(fā)板的工作,,實(shí)現(xiàn)遠(yuǎn)程控制。
在雙方的通信過程中,,約定好一套通信協(xié)議,。由于本文只實(shí)現(xiàn)了模擬裝載和實(shí)時(shí)監(jiān)控兩個(gè)功能,,因此在遠(yuǎn)程控制時(shí),只設(shè)定兩個(gè)命令即可,。約定好A命令表示模擬裝載,,B命令為觀看監(jiān)控錄像。通過這兩個(gè)命令,,可以在上位機(jī)很好地遠(yuǎn)程控制下位機(jī),。
4結(jié)論
本文提出的嵌入式自動(dòng)裝載與視頻監(jiān)控系統(tǒng),以S3C2410處理器作為主控制器,,運(yùn)行Linux系統(tǒng),,具有實(shí)現(xiàn)簡單、可擴(kuò)展性強(qiáng)等特點(diǎn),。通過嵌入式視頻監(jiān)控系統(tǒng)可以查看裝載現(xiàn)場(chǎng)的狀況,,對(duì)于突發(fā)事件,能及時(shí)做出反應(yīng),,保障裝載工作安全進(jìn)行,。自動(dòng)裝載系統(tǒng)的設(shè)計(jì)為日后實(shí)際系統(tǒng)搭建打下了基礎(chǔ),對(duì)以后的工作具有重大意義,。
參考文獻(xiàn)
?。?] 張慶平, 蘇國民. 特大型礦井全自動(dòng)裝卸系統(tǒng)的實(shí)現(xiàn)[J]. 工礦自動(dòng)化, 2002(6):41 42.
[2] 彭鐵鋼, 劉國繁, 曹少坤,等. 基于ARM的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2010, 31(6):1191 1194.
?。?] 許青林, 解爭龍. 基于ARM的Linux系統(tǒng)移植研究與實(shí)現(xiàn)[J]. 物聯(lián)網(wǎng)技術(shù), 2013(1):37 38.
?。?] 王元偉, 劉國秀. 基于V4L的視頻采集系統(tǒng)的設(shè)計(jì)[J]. 鐵路計(jì)算機(jī)應(yīng)用, 2010, 19(7):30 34.
[5] HONG J, SODSONG W, CHUNG S, et al. Design, implementation and evaluation of a taskparallel JPEG decoder for the Libjpegturbo library[J]. Oral Diseases, 2012, 12(12):117 120.
?。?] 雷鴻, 熊文龍, 楊單. 基于Fram ebuffer的LCD驅(qū)動(dòng)程序的實(shí)現(xiàn)[J]. 武漢理工大學(xué)學(xué)報(bào):交通科學(xué)與工程版, 2006, 30(1):106 109.
?。?] 盧劍翔, 劉成安, 胡和智,等. 基于s3c2410的CramFS根文件系統(tǒng)的移植[J]. 微計(jì)算機(jī)信息, 2006, 22(32):133 135.