《電子技術(shù)應用》
您所在的位置:首頁 > 電源技術(shù) > 設計應用 > 基于RT-Thread的無人機數(shù)據(jù)記錄儀設計與實現(xiàn)
基于RT-Thread的無人機數(shù)據(jù)記錄儀設計與實現(xiàn)
2018年電子技術(shù)應用第4期
盛 蔚,賀 彪,高 彤
北京航空航天大學 儀器科學與光電工程學院,北京100191
摘要: 隨著無人機任務載荷的種類日益增多,功能日益強大,數(shù)據(jù)記錄儀作為記錄無人機飛行狀態(tài)和任務載荷信息的重要航電設備,也面臨著數(shù)據(jù)量增大、工作環(huán)境復雜、工作時間長的挑戰(zhàn),設計一種多用途、高可靠、易存取的數(shù)據(jù)記錄儀成為行業(yè)發(fā)展的必然要求。對傳統(tǒng)無人機數(shù)據(jù)記錄儀存在的功耗大、體積大、成本高、存儲效率低、實用性差的缺點做出改進:在STM32F4微處理器上移植了RT-Thread嵌入式實時操作系統(tǒng),以SD卡為存儲介質(zhì),用Fatfs文件系統(tǒng)進行數(shù)據(jù)組織,創(chuàng)新地提出了多線程數(shù)據(jù)緩沖存儲策略,并且開發(fā)了USB驅(qū)動,能夠從PC端將數(shù)據(jù)拷出進行離線分析。最后根據(jù)軟硬件設計進行了小批量試制,經(jīng)測試能夠?qū)崿F(xiàn)多通道、大數(shù)據(jù)流輸入環(huán)境下的長時間準確存儲。
中圖分類號: TP368.1
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.174525
中文引用格式: 盛蔚,賀彪,高彤. 基于RT-Thread的無人機數(shù)據(jù)記錄儀設計與實現(xiàn)[J].電子技術(shù)應用,2018,44(4):10-13.
英文引用格式: Sheng Wei,He Biao,Gao Tong. Design and implementation of UAV data recorder based on RT-Thread[J].Application of Electronic Technique,2018,44(4):10-13.
Design and implementation of UAV data recorder based on RT-Thread
Sheng Wei,He Biao,Gao Tong
School of Instrument and Opto-Electronics Engineering,Beihang University,Beijing 100191,China
Abstract: With the increasing variety and enhancing function of unmanned aerial vehicle(UAV) payload, data recorder, as an important avionics equipment to record UAV flight status and payload information, is also faced with the challenges of increasing recording data, complex working environment and long working hours. The design of a versatile, reliable and accessible data recorder has become an inevitable requirement for the development of the industry. This paper makes improvements to the shortcomings of the traditional UAV data recorder, such as large power consumption, large volume, high cost, low storage efficiency and poor practicability, has firstly transplanted RT-Thread embedded real-time operating system on the STM32F4 microprocessor and the Fatfs file system to organize data, with SD card as the storage medium, has secondly put forward a multi-thread and multi-buffer strategy to storage data, has thirdly developed USB drive, making storaged data easily copied from the PC side for offline analysis. Finally, according to the software and hardware design, a small batch trial production is carried out. After the test, data recorder can accurately storage the multi-channel big data stream for a long time.
Key words : data recording;embedded real-time operating system;RT-Thread;USB;UAV
0 引言

    傳統(tǒng)的無人機數(shù)據(jù)記錄儀僅僅是記錄無人機在整個飛行過程中各狀態(tài)參數(shù)的機載電子設備,大多采用FPGA作為控制器,NAND Flash作為存儲單元,SRAM作為數(shù)據(jù)緩存,以并行的方式完成數(shù)據(jù)的緩存和處理[1-2],雖然也能實現(xiàn)飛行數(shù)據(jù)的有效存儲,但又產(chǎn)生了功耗大和體積大的問題。而且FPGA需要外部存儲模塊(如EEPROM或Flash)來存儲編程文件[2-3],相比于ARM內(nèi)置SRAM和Flash運行和存儲編程文件,這無疑增加了外圍電路的復雜性。此外,以NAND Flash作為大容量存儲設備,就必須設計相應的壞塊管理算法和擦寫平衡算法,在實際存儲過程中進行實時ECC校驗,并實時維護一個NAND Flash壞塊表,以防把數(shù)據(jù)寫入壞塊造成無法讀出[4-5],大大降低了系統(tǒng)的存儲效率。

    日新月異的無人機應用場合要求數(shù)據(jù)記錄儀不僅要記錄飛行器的飛行狀態(tài),還要記錄各種任務設備的指令、數(shù)據(jù)和工作信息以便離線使用,功能舉例如下:

    (1)存儲差分GPS基站和移動站的原始星歷數(shù)據(jù)做后差分解算,提高航測作業(yè)的位置解算精度;

    (2)在靜止時和飛行時存儲導航傳感器的所有高頻原始數(shù)據(jù),進行離線噪聲建模,優(yōu)化濾波模型;

    (3)在地面和機上分別記錄數(shù)據(jù)鏈上行和下行的指令和數(shù)據(jù),離線分析鏈路可靠性。

    除此之外還有諸多功能等待開發(fā)和挖掘,但這些功能都要求數(shù)據(jù)的存儲必須滿足實時、可靠、低功耗、小型化和易存取等特點。本文結(jié)合無人機領(lǐng)域的實際應用需求,設計了一種基于嵌入式實時操作系統(tǒng)RT-Thread的數(shù)據(jù)記錄儀。

1 功能模塊選型

    為滿足實時、可靠、低功耗、小型化、低成本和易存取的無人機數(shù)據(jù)記錄儀設計需求,從低功耗、小型化和低成本的角度考慮,ARM微處理器必然是最優(yōu)選擇;從滿足實時性和高可靠的角度考慮,在硬件平臺上移植嵌入式實時操作系統(tǒng),通過線程的時間片輪轉(zhuǎn)來保證無疑是最優(yōu)選擇;從易存取的角度考慮,使用SD卡作為存儲介質(zhì)能夠避免系統(tǒng)將CPU資源浪費在擦寫平衡和ECC校驗等環(huán)節(jié),使用USB進行數(shù)據(jù)讀取能提高數(shù)據(jù)讀取效率。

    本文所設計的無人機數(shù)據(jù)記錄儀使用的硬件嵌入式平臺為STM32F4系列微處理器,使用該微處理器的SDIO模塊讀寫SD卡,接收、緩沖并存儲多路串口的輸入數(shù)據(jù),USB模塊讀取存儲的數(shù)據(jù),并移植了嵌入式實時操作系統(tǒng)RT-Thread進行線程調(diào)度和文件系統(tǒng)支持,主體架構(gòu)如圖1所示。

wrj2-t1.gif

    RT-Thread相較于?滋C/OS-III和FreeRTOS等嵌入式實時操作系統(tǒng)有很多優(yōu)點:首先是開源的,且符合POSIX規(guī)范,穩(wěn)定性高;支持Fatfs文件系統(tǒng),采用多級目錄結(jié)構(gòu),能夠?qū)Σ煌愋?、不同來源和不同用途的無人機數(shù)據(jù)進行更科學化的文件管理,且能夠與PC端實現(xiàn)文件互傳,便于數(shù)據(jù)導出;采用基于優(yōu)先級的全搶占式多線程調(diào)度算法和基于時間片的輪轉(zhuǎn)調(diào)度算法,使用內(nèi)核對象(包括信號量、互斥量等)進行線程同步,極大地優(yōu)化了線程的執(zhí)行和調(diào)度效率,提升了微處理器的數(shù)據(jù)存取性能,在此基礎(chǔ)上進行有效的硬件驅(qū)動開發(fā)和應用程序開發(fā)就能夠滿足無人機行業(yè)對數(shù)據(jù)存取的要求。

2 硬件驅(qū)動開發(fā)

    硬件驅(qū)動的開發(fā)主要為3部分,包括在嵌入式實時操作系統(tǒng)RT-Thread的架構(gòu)上進行串口模塊、SDIO模塊和USB模塊的驅(qū)動開發(fā)。RT-Thread為這些模塊定義了中間層框架,這個框架向上和向下各提供一個接口,向下是底層驅(qū)動對硬件的接口,這個接口完成對硬件模塊的控制并從硬件獲得數(shù)據(jù),向上是與應用程序交互的接口,通過這個中間層框架,應用程序就可以通過統(tǒng)一的接口訪問底層硬件,即使硬件有所改動上層代碼幾乎不用改動,提高了系統(tǒng)的移植性[6]。

    串口驅(qū)動主要包括串口的初始化程序以及中斷接收程序,以實現(xiàn)對外部輸入數(shù)據(jù)的快速響應。SDIO驅(qū)動主要包括SD卡的初始化程序、SD卡的產(chǎn)品信息讀取函數(shù)和SD卡讀寫函數(shù),用來實現(xiàn)對SD卡的功能配置,還需要在SD卡上運行Fatfs文件系統(tǒng),以文件系統(tǒng)的組織形式進行串口數(shù)據(jù)的快速存儲。USB驅(qū)動用于實現(xiàn)PC對SD卡中存儲數(shù)據(jù)的拷貝,以便在PC上進行處理和分析,這就需要開發(fā)USB的大容量存儲設備驅(qū)動[7],而USB主要通過描述符(descriptor)進行接口描述,本文按照如下結(jié)構(gòu)配置描述符[8]:一個設備描述符,采用USB2.0協(xié)議,并支持一個配置描述符;一個配置描述符,包含一個接口描述符;一個接口描述符,接口設備類為Mass Storage類,下設兩個端點;兩個端點描述符,一個IN端點和一個OUT端點負責數(shù)據(jù)接收和發(fā)送,并都采用塊傳輸形式,最大傳輸數(shù)據(jù)包長度為64 B。描述符配置完畢后,USB就可以響應大容量存儲的各類設備請求并按照標準的USB2.0協(xié)議進行數(shù)據(jù)傳輸了。

    最后將這3個模塊的底層驅(qū)動與RT-Thread中間層框架實現(xiàn)對接,就可以通過調(diào)用RT-Thread應用層的標準設備接口進行應用程序開發(fā)了。

3 多線程數(shù)據(jù)緩沖存儲策略

    在多通道數(shù)據(jù)量大且復雜度高的應用場合,如果把非周期字節(jié)流的接收和存儲放在一個線程里去執(zhí)行,難免會引發(fā)存儲設備的頻繁寫入,大容量存儲設備大多以塊而非字節(jié)為最小寫入單位,一次只寫入幾個字節(jié)與寫入整塊的時間相同,一次只寫入幾個字節(jié)必然造成CPU資源的浪費,而存儲設備的讀取和寫入往往是線程中最耗時的環(huán)節(jié),這樣勢必會降低整體系統(tǒng)的存儲效率。如果恰巧在線程執(zhí)行過程中有新的數(shù)據(jù)到來,CPU就無法及時響應,勢必會影響實時性,造成數(shù)據(jù)損失。

    為保證數(shù)據(jù)存儲的完整和可靠,且不過多占用CPU資源影響其他線程調(diào)度,本文創(chuàng)新地提出了多線程數(shù)據(jù)緩沖技術(shù),遵循“先接收后緩沖再存儲”的原則,即設計3個線程分別接收數(shù)據(jù)、緩沖數(shù)據(jù)和存儲數(shù)據(jù),并合理分配CPU資源,讓接收線程處理的數(shù)據(jù)最少,緩沖線程處理的數(shù)據(jù)適中,存儲線程處理的數(shù)據(jù)最多。根據(jù)LIU C L和LAYLAND J在文獻[9]中提出并證明的結(jié)論,在實時操作系統(tǒng)中,單調(diào)速率調(diào)度(RMS)算法的線程設置必須滿足周期越短,優(yōu)先級越高的規(guī)律,因此上述3個線程的優(yōu)先級設置應滿足“執(zhí)行周期遞增,優(yōu)先級遞減”的原則,具體線程設計思路如圖2所示。

wrj2-t2.gif

    在實際數(shù)據(jù)到來后,處于最高優(yōu)先級的接收線程可以快速響應并將接收到的字節(jié)流及時寫入一級緩沖區(qū),一級緩沖區(qū)的大小可以設置為256 B左右,一級緩沖區(qū)存滿后則通知緩沖線程執(zhí)行;處于中等優(yōu)先級的緩沖線程啟動后就迅速把一級緩沖區(qū)的數(shù)據(jù)拷貝到二級緩沖區(qū)中,并將一級緩沖區(qū)清零,數(shù)據(jù)指針復位,使其不影響下一次接收任務的正常寫入,二級緩沖區(qū)的大小可以設置為2 048 B左右,必須顯著大于一級緩沖區(qū)的大小,二級緩沖區(qū)存滿后則通知存儲線程執(zhí)行;處于低優(yōu)先級的存儲線程啟動后就迅速把二級緩沖區(qū)中的數(shù)據(jù)拷貝到三級緩沖區(qū)中,并將二級緩沖區(qū)清零,數(shù)據(jù)指針復位,使其不影響下一次二級緩沖區(qū)的正常寫入,三級緩沖區(qū)設置成一個隊列結(jié)構(gòu),從二級緩沖區(qū)拷貝過來的數(shù)據(jù)就按照隊列依次寫入三級緩沖區(qū),由于SD卡一次最小寫入單位是512 B,為提高對存儲設備的寫入效率,就必須嚴格控制寫入SD卡的字節(jié)數(shù)為512的整數(shù)倍,寫入SD卡完成后再將剩余數(shù)據(jù)的指針移到三級緩沖區(qū)的開頭,并將下一次移進來的數(shù)據(jù)放在這些數(shù)據(jù)的末尾,保證下一次寫入數(shù)據(jù)的正確性和高效率,而且每個線程執(zhí)行完成后都同步計算至下次觸發(fā)的超時時間,保證緩沖區(qū)的數(shù)據(jù)即使不滿也能通過觸發(fā)超時逐步轉(zhuǎn)存最后寫入SD卡,程序執(zhí)行流程如圖3所示。

wrj2-t3.gif

    通過以上3個線程和三級緩沖區(qū)對數(shù)據(jù)進行處理后,相較于使用一個單一線程進行數(shù)據(jù)接收和存儲,完全避免了數(shù)據(jù)丟失問題和SD卡頻繁寫入的資源浪費問題,拆分后串口3個線程的CPU時間片輪轉(zhuǎn)過程如圖4所示。

wrj2-t4.gif

    從操作系統(tǒng)多線程調(diào)度的時間片輪轉(zhuǎn)來看[10],接收線程處理的數(shù)據(jù)量最小,其占用的CPU時間片也很少,即使在緩沖線程和存儲線程的執(zhí)行過程中有數(shù)據(jù)輸入,接收線程也可以搶占較低優(yōu)先級的緩沖線程和存儲線程得以執(zhí)行,保證不丟失任何輸入數(shù)據(jù)。而且由于接收線程執(zhí)行時間短,執(zhí)行完畢后緩沖線程和存儲線程也能從之前被搶占的地方繼續(xù)執(zhí)行,將數(shù)據(jù)流匯聚成數(shù)據(jù)塊再進行寫入,顯著提高數(shù)據(jù)的存儲效率,降低SD卡讀寫的耗時。

4 系統(tǒng)性能測試

    為驗證軟硬件設計的正確性和高效性,接下來進行了小批量試制,系統(tǒng)實物如圖5所示,并在試制完成的數(shù)據(jù)記錄儀上進行系統(tǒng)性能測試。

wrj2-t5.gif

    擬定如下測試方案:連接PC和數(shù)據(jù)記錄儀,通過上位機軟件向數(shù)據(jù)記錄儀的3個串口同時以115 200的波特率發(fā)送不同數(shù)據(jù),頻率均為10 Hz,數(shù)據(jù)量均為1 000 B/次,模仿無人機應用中的高頻次連續(xù)數(shù)據(jù),分別以單線程接收存儲和多線程數(shù)據(jù)緩沖存儲兩種方法進行測試,在數(shù)據(jù)記錄儀進行數(shù)據(jù)存儲的同時PC上也通過上位機軟件進行發(fā)送數(shù)據(jù)的同步存儲,連續(xù)不間斷工作24小時進行壓力測試,完成后通過USB口將數(shù)據(jù)記錄儀存儲的3個不同文件拷貝到PC上,以上位機存儲的發(fā)送數(shù)據(jù)為基準,計算兩種方法的數(shù)據(jù)存儲率、CPU實際占用率和SD卡讀寫次數(shù),結(jié)果如圖6所示。

wrj2-t6.gif

    通過這個測試方案不僅驗證了整個系統(tǒng)軟硬件設計的可靠性,還對單線程存儲策略和多線程數(shù)據(jù)緩沖存儲策略進行了對比。測試結(jié)果表明,多線程數(shù)據(jù)緩沖存儲策略因為增加了線程的調(diào)度,雖然增加了CPU的實際占用率,但這與其帶來的數(shù)據(jù)存儲率的顯著提升相比是微不足道的,而且這種方式大幅降低了存儲設備同等數(shù)據(jù)量下的讀寫頻次,延長了存儲設備的使用壽命,明顯優(yōu)于單線程存儲策略,且在長時間、大數(shù)據(jù)輸入壓力測試的情況下仍能維持很好的數(shù)據(jù)存儲性能,數(shù)據(jù)存儲率為100%,達到了設計的預期效果。最后進行實際應用測試,準備兩個數(shù)據(jù)記錄儀,將一個數(shù)據(jù)記錄儀安裝在小型四旋翼無人機上,存儲無人機飛行數(shù)據(jù)和差分GPS移動站接收機的后差分數(shù)據(jù),另一個在地面存儲差分GPS基站接收機的后差分數(shù)據(jù),進行實際多頻次高強度飛行后利用第三方軟件進行后差分解算。經(jīng)測試,數(shù)據(jù)均無丟包,工作均正常,能夠滿足高強度飛行任務的需要。

5 結(jié)論

    本文以實際無人機行業(yè)應用為牽引,設計了一款基于RT-Thread的實時、可靠、低功耗、小型化和易存取的無人機數(shù)據(jù)記錄儀,通過多線程數(shù)據(jù)緩沖存儲策略實現(xiàn)了大量連續(xù)數(shù)據(jù)輸入條件下的高效率、高可靠存儲,并能通過USB連接線將存儲的數(shù)據(jù)快速導出到PC中進行事后分析,能夠滿足日益復雜的無人機行業(yè)應用對數(shù)據(jù)記錄儀的要求。另外,多線程和多級緩沖區(qū)的數(shù)據(jù)處理模式不僅局限于嵌入式領(lǐng)域,對于需要多通道數(shù)據(jù)處理的個人計算機和服務器軟件開發(fā)也有一定的借鑒作用。

參考文獻

[1] 韓勇豪.一種大容量無人機飛行數(shù)據(jù)記錄儀的研制[D].南京:南京航空航天大學,2012.

[2] 葉艷.大容量無人機數(shù)據(jù)記錄儀的數(shù)據(jù)卸載及處理技術(shù)研究[D].南京:南京航空航天大學,2014.

[3] 劉光輝,周軍,于曉洲.低成本無人飛行器機載數(shù)據(jù)記錄儀的設計與實現(xiàn)[J].測控技術(shù),2011,30(1):10-12.

[4] 張勝勇,高世杰,吳志勇,等.基于FPGA的NAND Flash壞塊處理方法[J].計算機工程,2010(6):239-240,243.

[5] 彭卓文,楊新民,王勝紅.基于FPGA控制的高速大容量NAND Flash存儲模塊設計[J].電子設計工程,2017,25(7):111-114,118.

[6] 曹成.嵌入式實時操作系統(tǒng)RT-Thread原理分析與應用[D].濟南:山東科技大學,2011.

[7] 薛園園.USB應用開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007.

[8] 陸斌.低功耗嵌入式網(wǎng)管系統(tǒng)和USB大容量存儲設備的設計和開發(fā)[D].北京:北京郵電大學,2013.

[9] LIU C L,LAYLAND J.Scheduling algorithms for multipro-gramming in a hard real time environment[J].Journal of the ACM,1973,20(1):46-61.

[10] 張博.嵌入式實時操作系統(tǒng)中的數(shù)據(jù)緩沖技術(shù)[J].電子世界,2014(4):24-25.



作者信息:

盛  蔚,賀  彪,高  彤

(北京航空航天大學 儀器科學與光電工程學院,北京100191)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。