小型無人機(jī)在航拍、災(zāi)害救援、防火等領(lǐng)域得到廣泛運(yùn)用,但是無人機(jī)操作復(fù)雜,尤其是控制飛行姿態(tài)平穩(wěn)、航線準(zhǔn)確和降落平滑,對(duì)地面人員的操作水平要求較高。操作問題容易造成無人機(jī)的飛行事故,嚴(yán)重時(shí)會(huì)損壞飛機(jī)機(jī)體及機(jī)上設(shè)備,也會(huì)危害對(duì)地面人員及財(cái)產(chǎn)安全。因此,需要平衡儀輔助地面操作人員控制飛機(jī)的姿態(tài)和航跡。
FPGA對(duì)數(shù)據(jù)并行處理,使用相同算法時(shí)與CPU相比,計(jì)算速度高,影響速度快,適合數(shù)據(jù)密集、重復(fù)性高的工作。FPGA在邏輯上具有高度靈活性,對(duì)各種通訊協(xié)議具有良好的兼容性,也可根據(jù)各種控制系統(tǒng)制定數(shù)據(jù)輸出格式。FPGA架構(gòu)飛控具有較大優(yōu)勢(shì),但由于FPGA設(shè)計(jì)難度較高,開發(fā)流程繁瑣,開發(fā)周期長,影響FPGA架構(gòu)飛控的應(yīng)用和普及。本文針對(duì)上述問題提出了一種基于Xllinx Vivado HLS工具的FPGA架構(gòu)飛控的快捷開發(fā)方法,并將該方法應(yīng)用于四旋翼飛行器平衡儀的設(shè)計(jì)上。
1平衡儀介紹
平衡儀用于提高無人機(jī)飛行的穩(wěn)定性。無人機(jī)的穩(wěn)定性包括橫向穩(wěn)定性、縱向穩(wěn)定性和航向穩(wěn)定性,分別表示無人機(jī)在橫滾、俯仰和航向上恢復(fù)原始狀態(tài)的能力。通過使用平衡儀輔助地面人員操縱無人機(jī),可精確控制無人機(jī)的飛行姿態(tài)。
本平衡儀包括慣性測(cè)量單元:使用三軸加速度計(jì)、三軸陀螺儀和三軸磁力計(jì)測(cè)量無人機(jī)物理運(yùn)動(dòng)狀態(tài);數(shù)據(jù)處理單元:平衡儀系統(tǒng)的核心,用來計(jì)算無人機(jī)當(dāng)前姿態(tài)并控制控制機(jī)械執(zhí)行結(jié)構(gòu)調(diào)整無人機(jī)姿態(tài)。平衡儀結(jié)構(gòu)如圖1所示。
本平衡儀算法分為姿態(tài)解算算法和控制算法。
姿態(tài)解算算法用于得到當(dāng)前無人機(jī)飛行姿態(tài),當(dāng)前姿態(tài)用俯仰角、橫滾角和方向角表示,姿態(tài)解算算法的核心為四元數(shù)法。平衡儀軟件流程如圖2所示,系統(tǒng)上電后對(duì)處理器和傳感器進(jìn)行初始化。使用加速度計(jì)補(bǔ)償陀螺儀的漂移,進(jìn)行數(shù)據(jù)融合得到誤差四元數(shù),計(jì)算得到當(dāng)前四元數(shù)后,計(jì)算得到當(dāng)前姿態(tài)角。對(duì)遙控信號(hào)解碼后可得到目標(biāo)姿態(tài)角,與當(dāng)前姿態(tài)角一起通過PD算法得到控制量的輸出。
?
2 Xllinx Vivado HLS介紹
當(dāng)今無線、醫(yī)療、軍用產(chǎn)品和消費(fèi)類產(chǎn)品應(yīng)用中使用的高級(jí)算法比以往更加復(fù)雜,加上緊迫的開發(fā)和驗(yàn)證計(jì)劃,即最有經(jīng)驗(yàn)的RTL開發(fā)團(tuán)隊(duì)都感到極具挑戰(zhàn)。Vivado Design Suite Vivado高層次綜合可將CC++和System C 規(guī)范直接引入Xllinx All Programmable 器件,無需手動(dòng)創(chuàng)建RTL,從而加速了IP創(chuàng)建。Vivado高層次綜合支持ISE和Vivado設(shè)計(jì)環(huán)境,使系統(tǒng)工程師和設(shè)計(jì)架構(gòu)師能以更快速的方式創(chuàng)建IP 。
早探索了具有不同設(shè)計(jì)需求和多種微架構(gòu)后,Vivado HLS (High-Level Syn thesis)能直接將CC++和System C 轉(zhuǎn)換為VHDL 或Verilog的RTL級(jí),從而加速了設(shè)計(jì)的實(shí)現(xiàn)和驗(yàn)證,功能仿真可以通過C語言執(zhí)行,這相比VHDL 和Verilog仿真加速超過了一個(gè)數(shù)量級(jí)。Vivado HLS提供給設(shè)計(jì)人員和架構(gòu)師一個(gè)更快,更可靠的方法進(jìn)行高品質(zhì)設(shè)計(jì)。
3 設(shè)計(jì)思路
通過上述分析,使用Xllinx Vivado HLS套件時(shí)需要以已有C語言實(shí)現(xiàn)后仿真的飛控核心代碼為基礎(chǔ),整合為Xllinx Vivado HLS套件所需結(jié)構(gòu),完成功能仿真后,通過高級(jí)綜合工具轉(zhuǎn)換為對(duì)應(yīng)IP核,在EDK套件中配置后生成對(duì)應(yīng)比特流文件。
3.1 C語言代碼調(diào)整
C語言平臺(tái)調(diào)試方便,可通過在線調(diào)試查看變量數(shù)值,對(duì)數(shù)據(jù)格式支持性好,代碼編譯數(shù)度較快,可使用ARM對(duì)飛控算法框架做功能仿真。飛控框架驗(yàn)證合理后,需要對(duì)C語言代碼做調(diào)整,包括一下幾個(gè)方面:1整理飛控算法的程序結(jié)構(gòu)。平衡儀核心代碼主要分為傳感器數(shù)據(jù)的預(yù)處理、和姿態(tài)角解算、控制量計(jì)算等部分。將這些功能整合到一個(gè)函數(shù)FC中,使用統(tǒng)一的輸入輸出變量。2整理飛控算法的輸入輸出變量。根據(jù)HLS工具對(duì)數(shù)據(jù)格式的要求,輸入變量使用值傳遞方法,輸出變量和輸入輸出變量使用指針傳遞方法。此處輸入變量包括傳感器數(shù)據(jù)、遙控信號(hào)值和控制參數(shù)。輸出信號(hào)包括飛機(jī)的控制信號(hào)、姿態(tài)角和一部分狀態(tài)值。3調(diào)整非關(guān)鍵信號(hào)的數(shù)據(jù)格式。目前Xllinx Zynq系列芯片普遍有對(duì)浮點(diǎn)數(shù)處理的專用DSP單元,對(duì)浮點(diǎn)數(shù)有良好的支持。但DSP單元數(shù)量有限,對(duì)于對(duì)響應(yīng)時(shí)間具有苛刻要求的系統(tǒng)中,可采用部分點(diǎn)數(shù)運(yùn)算部分定點(diǎn)運(yùn)算的方法。對(duì)于精度要求高的變量或者關(guān)鍵變量,如四元數(shù),采用浮點(diǎn)數(shù)計(jì)算;對(duì)于對(duì)要求不高且對(duì)系統(tǒng)影響不大的信號(hào),如遙控信號(hào)值,采用定點(diǎn)運(yùn)算的方法。
3.2HLS使用
在HLS中建立工程,選擇正確的目標(biāo)芯片,添加所有的C語言文件,在工程的Top Function中填寫算法的頂層函數(shù)名稱,本例中為FC。運(yùn)行C Syn thesis,調(diào)試提示的警告和錯(cuò)誤??赏ㄟ^添加Testbench軟件仿真飛控算法的C語言程序。
例如測(cè)試姿態(tài)解算功能時(shí),需要使用預(yù)先采樣的傳感器數(shù)值驗(yàn)算算法計(jì)算得到的姿態(tài)值是否準(zhǔn)確、響應(yīng)是否及時(shí)。建立Testbench文件,定義預(yù)先存儲(chǔ)的傳感器實(shí)驗(yàn)數(shù)據(jù)和FC函數(shù)對(duì)應(yīng)的輸入輸出變量,在main函數(shù)中按照傳感器采樣順序和數(shù)據(jù)格式將傳感器數(shù)據(jù)依次送入FC函數(shù),使用Simulation工具仿真驗(yàn)證實(shí)驗(yàn)結(jié)果。
使用C Syn thesis工具對(duì)FC函數(shù)進(jìn)行綜合,綜合后可查看綜合報(bào)表,包括各種資源的預(yù)計(jì)使用情況。例如在設(shè)計(jì)中發(fā)現(xiàn)LNT預(yù)計(jì)使用量超過實(shí)際數(shù)量后使用率過高,查看是在何處使用了大量的LUT,可試圖采用模塊分時(shí)復(fù)用的方法解決問題。打開此函數(shù)對(duì)應(yīng)的C文件,在Directive欄中選擇對(duì)應(yīng)函數(shù),點(diǎn)擊右鍵選擇Insert Directive在彈出的對(duì)話框中Directive選項(xiàng)為NLINE。也可通過輸入腳本“set_directive_in line函數(shù)名”,再次運(yùn)行C語言的綜合,查看資源使用情況。
代碼調(diào)試完成后使用Export RTL,選擇Pcore for EDK格式,生成飛控核心算法對(duì)應(yīng)的IP核。
3.3EDK配置
在EDK中添加生成的飛控核心算法IP核路徑,并將此IP核添加至相應(yīng)的工程中。編寫配置相應(yīng)的輸入輸出IP核,在平衡儀設(shè)計(jì)中,需要編寫配置以下模塊:
機(jī)械執(zhí)行機(jī)構(gòu)控制驅(qū)動(dòng)模塊:目前小型無人機(jī)電機(jī)和舵機(jī)控制多以脈寬調(diào)制信號(hào)為主,此模塊功能為將飛控核心模塊計(jì)算出的油門、升降、橫滾和方向等控制量轉(zhuǎn)換為對(duì)應(yīng)的控制信號(hào),并通過芯片管腳輸出。將此模塊添加至EDK工程中后,編寫對(duì)應(yīng)的MPD文件,配置對(duì)應(yīng)的輸入輸出端口,如配置由飛控核心模塊傳入的吸納后端口為輸入,寬度為32位;輸出到機(jī)械控制機(jī)構(gòu)的信號(hào)端口為輸出,默認(rèn)為1位.MPD文件配置完成后在Ports標(biāo)簽轉(zhuǎn)中將此模塊的端口與飛控核心模塊對(duì)應(yīng)的信號(hào)連接。
遙控接收機(jī)信號(hào)解碼模塊:此平衡儀中使用的遙控接收機(jī)信號(hào)采用6通道脈寬調(diào)制信號(hào),周期約為22ms,脈寬從1~2ms分別代表該通道信號(hào)從最小到最大的信號(hào)量。將此模板添加至EDK工程中后,編寫對(duì)應(yīng)的MPD文件,配置對(duì)應(yīng)的輸入輸出端口,6個(gè)通道信號(hào)定義為輸入,寬度默認(rèn)為2;解碼后的6路信號(hào)定義為輸出,信號(hào)寬度為32.MPD文件配置完成后在Ports標(biāo)簽中將此模塊的端口與飛控核心模塊對(duì)應(yīng)的信號(hào)連接。傳感器讀寫模塊:此平衡儀例子中使用的傳感器接口均為I*2C總線,可共用一組總線接口。此模塊功能為通過IC總線初始化傳感器并按照一定采樣時(shí)間讀取傳感器數(shù)據(jù)。將此模塊添加至EDK工程中后,編寫對(duì)應(yīng)的MPD文件,具體過程同上一模塊類似。其中IC總線的SDA線為輸入輸出類型,編寫MPD文件時(shí)注意使用輸入、輸出和門控的形式表示輸入輸出出口。MPD文件配置完成后在Ports標(biāo)簽中將此模塊的端口與飛控核心模塊對(duì)應(yīng)的信號(hào)連接。
4實(shí)現(xiàn)與結(jié)果
在完成代碼編寫和仿真試調(diào)后,生成比特流文件。為驗(yàn)證此方法生成IP核的有效性,將其應(yīng)用到基于Xilinx Zynq-7000擴(kuò)展式處理平臺(tái)(EPP)的ZedBoard中。為了直觀比較數(shù)據(jù)準(zhǔn)確性,添加了串口IP核將傳感數(shù)據(jù)和解算的姿態(tài)角打印到PC端。將傳感器數(shù)據(jù)送入原始C語言實(shí)現(xiàn)的核心代碼中,將仿真得到的姿態(tài)角與FPGA中得到的姿態(tài)角對(duì)照發(fā)現(xiàn)姿態(tài)角計(jì)算準(zhǔn)確,響應(yīng)較高。
為了直觀比較運(yùn)算時(shí)間,配置FPGA一個(gè)管腳輸出Busy信號(hào)表示實(shí)際運(yùn)算的時(shí)間。每次運(yùn)算開始時(shí)Busy管腳置高電平。在ARM平臺(tái)中實(shí)現(xiàn)的飛控系統(tǒng)也配置一個(gè)類似管腳用于輸出飛控實(shí)際運(yùn)算的時(shí)間。比較兩個(gè)管腳輸出信號(hào)高電平的寬度,如圖3所示,ARM平臺(tái)實(shí)現(xiàn)此算法需要超過1ms的時(shí)間,而FPGA平臺(tái)實(shí)現(xiàn)此算法僅需約7μs,如圖4所示,硬件加速超過了兩個(gè)數(shù)量級(jí),具有較大優(yōu)勢(shì)。
?
?
為驗(yàn)證此方法的可靠性,將此系統(tǒng)應(yīng)用在一個(gè)四旋翼飛行器中。經(jīng)過實(shí)際飛行測(cè)試,如圖5所示,飛行器飛行穩(wěn)定,適合實(shí)際飛行測(cè)試,如圖5所示,飛行器飛行穩(wěn)定,適合完成多種目視范圍飛行任務(wù),該飛行系統(tǒng)具有較高的可靠性。
?
5 結(jié)束語
本文介紹了一種基于FPGA的小型無人機(jī)飛控系統(tǒng)的開發(fā)方法,借助Xilinx Vivado HLS工具,將已有的C語言平臺(tái)的飛控核心代碼轉(zhuǎn)換為FPGA平臺(tái)的IP核。此方法的特點(diǎn)是開發(fā)難度低、流程簡(jiǎn)便、周期短,生成的IP核運(yùn)行速度與ARM平臺(tái)相比提高了兩個(gè)數(shù)量級(jí),且精度沒有降低。本文以算法較簡(jiǎn)單的平衡儀為例驗(yàn)證了此方法的可行性,在處理更加復(fù)雜的導(dǎo)航算法和控制算法時(shí),F(xiàn)PGA平臺(tái)更將凸顯出其處理速度快的優(yōu)勢(shì),此方法可在基于FPGA的飛控系統(tǒng)開發(fā)過程中得到廣泛的應(yīng)用。在后續(xù)的改進(jìn)方法中,將更加注重資源的使用情況,合理利用邏輯資源。
參考文獻(xiàn)
[1]霍新宇.關(guān)于無人機(jī)在森林防火監(jiān)測(cè)方面的探究[J].科技與創(chuàng)新,2014(7):128-130.
[2]喻少林.基于 DSP+FPGA的微小型無人機(jī)飛控計(jì)算機(jī)研究[D].杭州:浙江大學(xué),2011.
[3] 張鵬翼.紅外傳感器在無人機(jī)姿態(tài)平衡系統(tǒng)中的應(yīng)用[J].電光與控制,2007,14(6):170-172.
[4] 張?zhí)旃?捷聯(lián)慣性導(dǎo)航技術(shù)[M].北京:國防工業(yè)出版社,2007.
[5] 徐玉.微小型無人機(jī)飛控平臺(tái)與姿態(tài)融合算法研究[D]. 杭州:浙江大學(xué),2008.
[6] 秦永元.慣性導(dǎo)航[M].北京:科學(xué)出版社,2006.
[7] 胡壽松.自動(dòng)控制原理[M].北京:科學(xué)出版社,2001.
[8] Xilinx.Vivado design suite user guide[M].San Jose:Xilinx,2013.
[9] Xilinx.Vivado design suite tutorial[M].San Jose:Xilinx,2013.
[10]何賓.Xilinx FPGA設(shè)計(jì)權(quán)威指南 Vivado集成設(shè)計(jì)環(huán)境[M].北京:清華大學(xué)出版社,2014.
?
評(píng)論
查看更多