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