• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于ARM技術(shù)的智能車無(wú)線控制系統(tǒng)設(shè)計(jì)研究

    2020-06-30 10:15:22張金博張喜民袁戰(zhàn)軍
    微型電腦應(yīng)用 2020年4期
    關(guān)鍵詞:實(shí)現(xiàn)路徑

    張金博 張喜民 袁戰(zhàn)軍

    摘 要:?智能車輛的發(fā)展對(duì)控制系統(tǒng)提出了更高的要求,因而設(shè)計(jì)了一款智能車無(wú)線控制系統(tǒng)。系統(tǒng)基于ARM Linux,開發(fā)并實(shí)現(xiàn)了車載系統(tǒng)客戶端,在搭建了交叉編譯開發(fā)環(huán)境的基礎(chǔ)上對(duì)嵌入式Linux內(nèi)核進(jìn)行了配置編譯,并詳細(xì)介紹了數(shù)據(jù)采集與發(fā)送層的編碼實(shí)現(xiàn)過(guò)程,實(shí)現(xiàn)了采集圖像與錄制視頻、網(wǎng)路發(fā)送與監(jiān)控功能,各模塊設(shè)計(jì)為獨(dú)立進(jìn)程,各子模塊作為獨(dú)立線程運(yùn)行,監(jiān)控軟件客戶端通過(guò)內(nèi)存盤中的文件完成數(shù)據(jù)交換過(guò)程,從而有效實(shí)現(xiàn)了異步執(zhí)行和遠(yuǎn)程監(jiān)控功能。

    關(guān)鍵詞:?智能車輛無(wú)線控制; ARM Linux; 遠(yuǎn)程監(jiān)控系統(tǒng); 實(shí)現(xiàn)路徑

    中圖分類號(hào): TP 273.5? ? ? 文獻(xiàn)標(biāo)志碼: A

    Design and Research of Wireless Control System for Smart

    Car Based on ARM Technology

    ZHANG Jinbo, ZHANG Ximin, YUAN Zhanjun

    (School of Information Engineering, Shanxi Institute of International Trade & Commerce, Xian, Shanxi? 712046, China)

    Abstract:

    The development of intelligent vehicles puts forward higher requirements for the control system. This paper mainly completes the design of a wireless control system of the smart car. The system is based on ARM Linux, develops and implements the vehicle system client, and builds a cross-compilation development environment. Based on the configuration and compilation of the embedded Linux kernel, the coding implementation process of the data acquisition and transmission layer is introduced in detail, and the functions of collecting images and recording video, network transmission and monitoring are realized. Each module is designed as an independent process. The module runs as a separate thread, and the monitoring software client completes the data exchange process through the files in the memory disk, thereby effectively implementing the asynchronous execution and remote monitoring functions.

    Key words:

    intelligent vehicle wireless control; ARM Linux; remote monitoring system; implementation path

    0 引言

    快速發(fā)展的人工智能為智能車輛的完善提供了有力支撐,在智能交通系統(tǒng)中智能車輛占用重要地位,促使在目前的汽車行業(yè)中自動(dòng)駕駛成為熱門發(fā)展技術(shù),該技術(shù)以駕駛環(huán)境為依據(jù)并通過(guò)對(duì)人類行為進(jìn)行模擬做出相應(yīng)決策,在此基礎(chǔ)上完成駕駛行為,因此對(duì)智能車無(wú)線控制系統(tǒng)的研究成為主要方向之一,嵌入式系統(tǒng)可有效滿足控制需求,其核心部分即嵌入式系統(tǒng)軟件負(fù)責(zé)實(shí)現(xiàn)系統(tǒng)業(yè)務(wù)邏輯的任務(wù),具體通過(guò)對(duì)嵌入式硬件平臺(tái)進(jìn)行控制和調(diào)度完成。本文主要對(duì)基于ARM Linux 的遠(yuǎn)程監(jiān)控系統(tǒng)進(jìn)行了研究,重點(diǎn)介紹了監(jiān)控系統(tǒng)客戶端軟件的實(shí)現(xiàn)過(guò)程,完成了底層開發(fā)環(huán)境及用戶交互的圖形系統(tǒng)的搭建,并實(shí)現(xiàn)了核心業(yè)務(wù)模塊功能。

    1 Linux的構(gòu)建和移植

    開發(fā)Linux程序的步驟為:首先完成交叉編譯開發(fā)環(huán)境的建立,然后向目標(biāo)平臺(tái)移植 Linux 內(nèi)核,將程序邏輯通過(guò)PC Linux 完成編寫調(diào)通,通過(guò)模擬模塊實(shí)現(xiàn)同相關(guān)硬件的有效對(duì)接,及時(shí)修正測(cè)試中的軟件缺陷,接下來(lái)在目標(biāo)平臺(tái)上交叉編譯調(diào)通的軟件模塊,通過(guò)測(cè)試進(jìn)一步發(fā)現(xiàn)并修正相應(yīng)軟件缺陷。

    1.1 交叉編譯開發(fā)環(huán)境的建立

    交叉編譯開發(fā)環(huán)境是移植Linux內(nèi)核及開發(fā) Linux 的基礎(chǔ),通常是將交叉編譯器運(yùn)行于PC平臺(tái)或高服務(wù)器(即宿主機(jī)HOST)上通過(guò)編譯鏈接實(shí)現(xiàn)目標(biāo)平臺(tái)代碼的生成,本文的遠(yuǎn)程監(jiān)控系統(tǒng)以普通PC作為宿主機(jī)完成交叉編譯開發(fā)環(huán)境的建立,主要包括交叉編譯工具鏈 的安裝和測(cè)試(arm-linux-gcc,運(yùn)行于PC平臺(tái)的交叉編譯器,負(fù)責(zé)生成ARM平臺(tái)二進(jìn)制代碼)以及通訊測(cè)試。本文選用的硬件開發(fā)板卡S3C6410含有arm-linux-gcc-壓縮包,先在 s3c6410-gcc(位于HOME目錄下)中建立一個(gè)存放交叉編譯工具鏈的目錄,進(jìn)入目錄拷貝并解壓TAR 壓縮包到安裝目錄,此目錄通過(guò)指定Linux環(huán)境變量即可完成到可執(zhí)行程序搜索路徑的添加,從而完成交叉編譯環(huán)境的建立[1]。

    1.2 配置編譯Linux內(nèi)核

    作為嵌入式系統(tǒng)軟件的關(guān)鍵部分Linux內(nèi)核由系統(tǒng)底層的初始代碼構(gòu)成(針對(duì)特定目標(biāo)平臺(tái)),提供最基本的各種系統(tǒng)服務(wù),啟動(dòng)系統(tǒng)時(shí)需先完成基本的初始化工作(通過(guò)引導(dǎo)器),在內(nèi)存中裝載Linux 內(nèi)核后跳轉(zhuǎn)到內(nèi)存位置繼續(xù)執(zhí)行,為滿足項(xiàng)目需求本文使用了附帶移植好Linux 內(nèi)核的開發(fā)板卡,使包括配置CPU 類型、線程調(diào)度模型等在內(nèi)的系統(tǒng)核心功能無(wú)需額外改動(dòng),主要改動(dòng)硬件外設(shè)。系統(tǒng)客戶端的硬件外設(shè)包括液晶屏、GPS及GPRS 模塊(二者通過(guò)S3C6410 的串口通信)、SD卡插槽及USB 接口各一個(gè)SOC內(nèi)建的串口驅(qū)動(dòng)已包含在內(nèi)核配置中無(wú)需改動(dòng)。系統(tǒng)的內(nèi)核配置采用xconfig完成,選擇Device Driver/Netwrok device support(位于界面左側(cè)列表)后勾選PPP support,從而在該Linux內(nèi)核中加入PPP 的支持;選擇HID Devices / USB Device? support 后勾選需支持的 USB 設(shè)備驅(qū)動(dòng);選擇MMC/card support后勾選所需存儲(chǔ)設(shè)備驅(qū)動(dòng)。配置完成后當(dāng)前目錄生成一個(gè)配置文件(config),可通過(guò) make 命令完成編譯,根據(jù)板卡的說(shuō)明書將由make uImage 命令生成內(nèi)核鏡像燒錄至板卡上[2]。

    2 圖像采集與視頻錄制的設(shè)計(jì)與實(shí)現(xiàn)

    2.1 硬件加速模塊與軟件 API 接口

    本文選用了S3C6410,其硬件JPEG編解碼模塊支持編碼輸入為YCbCr 視頻源、解碼輸入為JPEG 圖像數(shù)據(jù)(UXGA分辨率可達(dá)1600x1 200),具備攝像頭數(shù)據(jù)直接輸入功能;JPEG 硬件解碼器的API包括初始化、編解碼執(zhí)行、配置等,調(diào)用編碼功能涉及到的API流程為:首先需對(duì)編碼器進(jìn)行初始化處理(EncodeInit ),涉及底層操作的硬件編碼器可直接訪問(wèn)內(nèi)存(無(wú)需通過(guò)SOC 的 MMU ),JPEG 編碼器使用驅(qū)動(dòng)預(yù)留的內(nèi)存區(qū)域(物理連續(xù));接下來(lái)通過(guò)通過(guò)GetEncodeInBuf和GetEncodeOutBuf完成存放源圖像數(shù)據(jù)及存放編碼后數(shù)據(jù)的獲?。ㄎ挥趦?nèi)存區(qū)域中),在此基礎(chǔ)上完成JPEG 編碼操作(由EncodeExe 執(zhí)行),選項(xiàng)配置由SetConfig完成,將獲取的源圖形數(shù)據(jù)(位于指定內(nèi)存區(qū)域)進(jìn)行編碼后,在指定內(nèi)存輸出區(qū)域存放圖像,最后調(diào)用EncodeDeInit釋放系統(tǒng)資源并關(guān)閉編碼器。

    MPEG4編解碼模塊支持 MPEG4 SimpleProfie規(guī)格的編解碼,其API 調(diào)用流程類似于JPEG 硬件編碼器,遠(yuǎn)程監(jiān)控系統(tǒng)中使用了多個(gè)API,通過(guò)SetConfig 函數(shù)完成配置,Init 函數(shù)和Decode函數(shù)分別用于初始化硬件模塊及解碼,內(nèi)存空間指針(放置輸入數(shù)據(jù))通過(guò)調(diào)用GetInBuf 函數(shù)獲取后調(diào)用Exe 函數(shù)執(zhí)行,接下來(lái)通過(guò) GetOutBuf 函數(shù)的調(diào)用完成輸出數(shù)據(jù)內(nèi)存指針的獲取,最后調(diào)用 deInit 函數(shù)關(guān)閉編碼器[3]。

    2.2 數(shù)據(jù)與內(nèi)存管理

    攝像頭采集子模塊作為數(shù)據(jù)的生產(chǎn)者,其所產(chǎn)生的 YUV 數(shù)據(jù)包可被兩個(gè)子模塊即圖像壓縮存儲(chǔ)(采集圖像需壓縮成 JPEG 圖像)及視頻編碼存儲(chǔ)(需壓縮記錄到AVI 文件中)使用??紤]到嵌入式系統(tǒng)有限的總線帶寬,數(shù)據(jù)量較大的圖像無(wú)法采用內(nèi)存拷貝的方式,通過(guò)內(nèi)存管理子模塊(屬于C++類)主要負(fù)責(zé)對(duì)數(shù)據(jù)包流向及內(nèi)存使用情況進(jìn)行控制,實(shí)現(xiàn)兩個(gè)子模塊各自具有指針,能夠指向同一YUV 圖像數(shù)據(jù),子模塊使用完畢后通過(guò)一個(gè)外部模塊釋放圖像數(shù)據(jù)指針的內(nèi)存空間。C++類聚合了MemServer(內(nèi)存池類),由內(nèi)存池負(fù)責(zé)分配與釋放大量的內(nèi)存,使內(nèi)存碎片問(wèn)題得以有效解決,并對(duì)工作中的內(nèi)存使用狀況進(jìn)行監(jiān)控以確保內(nèi)存的合理分配和使用[4]。數(shù)據(jù)包從采集到編碼以數(shù)據(jù)與內(nèi)存管理模塊作為中轉(zhuǎn),在內(nèi)存的實(shí)際分配和釋放過(guò)程中記錄內(nèi)存的大小,該模塊通過(guò)調(diào)用推送方法將數(shù)據(jù)包推入,同時(shí)注冊(cè)了自有的一個(gè)函數(shù)作為回調(diào)函數(shù),通過(guò)回調(diào)函數(shù)的調(diào)用實(shí)現(xiàn)了數(shù)據(jù)包指針在各編碼子模塊使用完后返回至數(shù)據(jù)管理子模塊。此外,采用自主編程實(shí)現(xiàn)內(nèi)存池類,預(yù)先malloc內(nèi)存區(qū)域(若干塊等長(zhǎng))實(shí)現(xiàn)MemServer內(nèi)部管理,對(duì)各個(gè)塊的狀態(tài)(使用與空閑兩條鏈表)進(jìn)行記錄,外部以數(shù)據(jù)大小為依據(jù)對(duì)內(nèi)存接口進(jìn)行調(diào)用分配,其返回給外部的指針包括一塊指向內(nèi)存塊指針(標(biāo)記為空閑)或一塊內(nèi)存塊合并的指針(合并連續(xù)的多個(gè)空閑塊),并向使用鏈表移動(dòng)這些記錄;外部則以鏈表上的記錄為依據(jù)完成內(nèi)存區(qū)域的釋放后將其標(biāo)記為空閑,記錄返回至空閑鏈表上(恢復(fù)合并的內(nèi)存塊到原始分離狀態(tài))[5]。

    采集到新的數(shù)據(jù)幀后,采集模塊通過(guò)內(nèi)存分配接口的調(diào)用完成內(nèi)存空間的申請(qǐng),用數(shù)據(jù)包封裝指向此內(nèi)存空間的指針,結(jié)構(gòu)體如下(包含了數(shù)據(jù)指針和使用計(jì)數(shù),標(biāo)記使用過(guò)這塊內(nèi)存區(qū)域的編碼模塊的個(gè)數(shù))[6]。

    struct MediaPackage

    {

    int ref;

    MMStreamPackage

    *

    pak;

    };

    若編碼模塊在數(shù)量上等于數(shù)據(jù)包的使用計(jì)數(shù),說(shuō)明所有編碼模塊均使用了此數(shù)據(jù)包可安全釋放。各編碼模塊承自同一父類EncodeServer,即可使用父類的各個(gè)接口(包括數(shù)據(jù)推送、清除緩沖、回調(diào)函數(shù)),并在初始化時(shí)注冊(cè)指針,內(nèi)存管理子模塊據(jù)此可預(yù)先獲知采集數(shù)據(jù)的消費(fèi)者數(shù)目。內(nèi)存管理子模塊對(duì)EncodeServer 類進(jìn)行維護(hù),通過(guò)指針指向即可完成推送/清空數(shù)據(jù)、注冊(cè)回調(diào)函數(shù),數(shù)據(jù)管理同編碼間的關(guān)系得以抽象和簡(jiǎn)化,提高了系統(tǒng)的擴(kuò)展性。當(dāng)采集模塊推入數(shù)據(jù)時(shí)候,數(shù)據(jù)管理子模塊統(tǒng)一對(duì)數(shù)據(jù)包進(jìn)行釋放處理[7]。

    2.3 攝像頭采集子模塊

    該子模塊同樣屬于C++的類,主要由圖像采集線程和數(shù)據(jù)推送線程構(gòu)成,攝像頭模塊驅(qū)動(dòng)采用標(biāo)準(zhǔn)V4L 接口(/dev 目錄下的設(shè)備文件),程序讀寫數(shù)據(jù)通過(guò)標(biāo)準(zhǔn)Linux文件調(diào)用讀取API完成,并通過(guò)ioctl 函數(shù)完成參數(shù)設(shè)置。圖像采集線程啟動(dòng)后打開V4L設(shè)備文件(同模擬攝像頭對(duì)應(yīng))并設(shè)置采集參數(shù),在此基礎(chǔ)上對(duì)YUV 幀數(shù)據(jù)(由攝像頭模塊返回)進(jìn)行持續(xù)讀取。采集線程向各新YUV 數(shù)據(jù)分配新的數(shù)據(jù)包并打上時(shí)間戳(標(biāo)記采集時(shí)間),再將數(shù)據(jù)包放入一個(gè)屬于鏈表的緩沖內(nèi),指向數(shù)據(jù)包的指針[8]。數(shù)據(jù)推送線程以預(yù)先設(shè)計(jì)好的間隔為依據(jù),將數(shù)據(jù)包從緩沖取出后推出給內(nèi)存管理子模塊,并通過(guò)清空緩沖及停止采集兩個(gè)函數(shù)接口的設(shè)置提升了系統(tǒng)的魯棒性。

    3 圖像壓縮及視頻編碼存儲(chǔ)采集的實(shí)現(xiàn)

    3.1 圖像壓縮存儲(chǔ)采集

    該子模塊內(nèi)部包含一個(gè)作為輸入數(shù)據(jù)緩沖的鏈表和用于數(shù)據(jù)壓縮的工作線程構(gòu)成,被封裝成一個(gè) C++的類。該模塊設(shè)置了回調(diào)函數(shù)設(shè)置接口,負(fù)責(zé)將子模塊的工作狀態(tài)傳遞給外部,系統(tǒng)的內(nèi)存管理子模塊通過(guò)此接口獲取并釋放數(shù)據(jù)包的指針,通過(guò)接口數(shù)據(jù)推送接口的調(diào)用 推入YUV 圖像數(shù)據(jù)包。數(shù)據(jù)包先以節(jié)點(diǎn)的形式掛載于鏈表上(作為緩沖),線程同步事件由推入的新數(shù)據(jù)觸發(fā),喚醒圖像壓縮工作線程(處于等待狀態(tài)),具體的工作線程流程如圖1所示,先以預(yù)定的拍照間隔為依據(jù)對(duì)數(shù)據(jù)包的時(shí)間戳進(jìn)行檢查,圖像工作線程會(huì)將未達(dá)到間隔的數(shù)據(jù)標(biāo)記為使用,并向內(nèi)存管理子模塊返回?cái)?shù)據(jù)包(通過(guò)回調(diào)函數(shù)接口);工作線程在當(dāng)前數(shù)據(jù)包的時(shí)間戳大于上次拍照時(shí)間同預(yù)設(shè)時(shí)間間隔之和的情況下,通過(guò)JPEG編碼API的調(diào)用完成該YUV圖像到JPEG圖片的壓縮及在指定位置存儲(chǔ)過(guò)程[9]。

    3.2 視頻編碼存儲(chǔ)采集

    該子模塊由數(shù)據(jù)包鏈表、視頻壓縮工作線程及回調(diào)注冊(cè)接口構(gòu)成,此外還包含AVI 打包模塊負(fù)責(zé)處理MPEG4數(shù)據(jù)幀,將其以用戶設(shè)置的參數(shù)為依據(jù)打包為AVI視頻文件(適用于普通播放軟件)。通過(guò)數(shù)據(jù)推送接口的調(diào)用內(nèi)存管理子模塊完成YUV 圖像數(shù)據(jù)包的推入,其工作流程如圖2所示。

    先對(duì)自身的工作狀態(tài)進(jìn)行檢查,工作線程在沒(méi)有錄像任務(wù)的情況下標(biāo)記數(shù)據(jù)表為使用,再將數(shù)據(jù)包返回至內(nèi)存管理子模塊(回調(diào)函數(shù)接口)。有錄像任務(wù)則將該 YUV圖像通過(guò)MPEG4編碼 API 的調(diào)用完成到MPEG4 幀的壓縮,然后由 AVI打包模塊封裝上時(shí)間戳和幀信息后打包,存儲(chǔ)到指定位置[10]。

    4 總結(jié)

    本文主要完成了基于ARM Linux智能車無(wú)線控制系統(tǒng)的設(shè)計(jì),以S3C6410作為嵌入式系統(tǒng)平臺(tái)的主控,完成了客戶端軟件的設(shè)計(jì),圖像采集與視頻錄制模塊主要由攝像頭采集、圖像壓縮存儲(chǔ)、編碼存儲(chǔ)等功能子模塊構(gòu)成,各子模塊間異步執(zhí)行(以獨(dú)立線程的方式運(yùn)行),在分配的內(nèi)存區(qū)域中存放通過(guò)采集、編碼、壓縮處理后的信息以供后續(xù)處理,輸入內(nèi)存采用線性緩沖進(jìn)行管理。

    參考文獻(xiàn)

    [1]李澤彬,姚有峰,張飛龍,等.基于單片機(jī)的智能家居語(yǔ)音控制系統(tǒng)設(shè)計(jì)[J]. 電子設(shè)計(jì)工程, 2017(8):175-177.

    [2] 李云紅,張恒,張亞林,等.基于ARM的WiFi無(wú)線終端系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)與數(shù)字工程, 2017(3):498-501.

    [3] 葉身村.周慶.于振浩.基于KEA128的電磁直立智能車控制系統(tǒng)設(shè)計(jì)[J].汽車實(shí)用技術(shù),2018(21):27-28.

    [4] 蘇元楷,季磊,聶嘉欣,等.基于STM32F407的路徑識(shí)別智能小車設(shè)計(jì)[J]. 信息通信, 2017(8):31-33.

    [5] Jorge Godoy, Joshué Pérez, Enrique Onieva, et al. A driverless vehicle demonstration on motorways and in urban environments[J]. Transport, 2015 (3):253-263.

    [6] Suresh Nanda Kumar, Ramasamy Panneerselvam. A Time-Dependent Vehicle Routing Problem with Time Windows for E-Commerce Supplier Site Pickups Using Genetic Algorithm[J]. Intelligent Information Management, 2015 (4):181-194.

    [7] 王浩.基于RT5350嵌入式平臺(tái)的無(wú)線智能小車控制系統(tǒng)設(shè)計(jì)[J]. 泰山學(xué)院學(xué)報(bào),2016(6):75-79.

    [8] 張棟冰.基于TOPHAT-PCNN的圖像車輛目標(biāo)檢測(cè)方法研究[J]. 南京大學(xué)學(xué)報(bào)(自然科學(xué)), 2017(3):590-597.

    [9] 胡焯源,曹玉東,李羊.基于HSV顏色空間的車身顏色識(shí)別算法[J]. 遼寧工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版), 2017(1):10-12.

    [10] 黃姝娟,劉萍萍,白小軍,等.基于STM32的智能車控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2018(9):185-188.

    (收稿日期: 2019.08.10)

    猜你喜歡
    實(shí)現(xiàn)路徑
    論紅色文化在大學(xué)生思想政治教育中的價(jià)值及實(shí)現(xiàn)路徑
    淺議人民銀行金融穩(wěn)定職能的實(shí)現(xiàn)路徑
    國(guó)際私法法典化的挑戰(zhàn)與實(shí)現(xiàn)路徑
    人間(2016年26期)2016-11-03 16:58:21
    我國(guó)學(xué)術(shù)期刊的價(jià)值設(shè)定與實(shí)現(xiàn)路徑
    出版廣角(2016年4期)2016-04-20 00:58:48
    青岛市| 克山县| 阿拉善右旗| 亚东县| 乌鲁木齐县| 平定县| 昌乐县| 彭州市| 沽源县| 响水县| 叙永县| 绿春县| 喀什市| 松桃| 乌鲁木齐市| 临高县| 舒城县| 桐庐县| 兰溪市| 井冈山市| 云霄县| 尚志市| 阿荣旗| 锦州市| 瑞安市| 司法| 阜康市| 台东市| 资阳市| 汝阳县| 凌源市| 石屏县| 交口县| 留坝县| 胶南市| 维西| 衡东县| 曲周县| 罗定市| 东台市| 寻乌县|