王正琳,付 宇,宋澳舉,王路茗
(1.中國民航大學 航空工程學院,天津 300300;2.中國民航大學 經濟與管理學院,天津 300300)
現(xiàn)代無人機的避障功能對無人機的整體穩(wěn)定性有著十分重要的作用,其中人工勢場法作為重要工具,可以基于此定義位置函數(shù)構建無人機避障數(shù)學模型。本文使用python 語言控制多旋翼的方法,將Dronekit-python 數(shù)據(jù)庫導入樹莓派中,可以通過該語言對多旋翼行為進行控制,并且由于Dronekitpython 語言的簡單性與可靠性,使控制代碼可以在虛擬環(huán)境中進行測試與模擬,使用從源碼編譯的SITL 測試dronekit 代碼,保證飛行過程的可靠性與穩(wěn)定性。
為了適應工作環(huán)境,本文在設計無人機結構上采用了精簡耐用的設計理念,通過機架加設備的方式設計了無人機。
無人機的機架主體由2 塊完整切割的碳板通過螺柱連接組成,無人機中上方碳板作為主機架,下方碳板作為副機架,通過計算機仿真,確定了所用碳板的厚度,以及螺柱所安置的位置。經仿真后選取了5 mm 厚的普通3K 碳纖維板作為主機架的碳板,2 mm 厚的普通3K 碳纖維板作為副機架的碳板;并在每個機臂根部用3 枚總共12 枚M3×16 的螺柱將主機架和副機架剛性連接為一個整體。仿真結果如圖1 所示。
圖1 多旋翼機架結構在ANSYS 下的仿真結果Fig.1 Simulation results of multi-rotor framestructure under ANSYS
所選取的5 mm 碳板制作的主機架,在所選用電機最大拉力20 N 下機臂的撓度為1.3 mm,在需用范圍之內。機架用于安置各種無人機的核心設備包括飛控、電機電調等。并連接其它平臺用于安裝更多不同功能的設備。
起落架由2 根碳纖維管和3D 打印的連接件組成,并在底部碳管兩側安裝了2 個橡膠套,用于防滑同時起到一定的減震作用,使降落更加穩(wěn)定。起落架頂部安裝有3D 打印的連接件用于與機架連接,連接件上有4 個螺絲孔對應無人機副機架碳板上的4 個螺絲孔,用M3 的螺絲螺母將二者固連。
外設掛載平臺用于掛載各種實現(xiàn)所需功能的設備,其通過螺柱連接吊裝在機架上處于電池平臺下方。機載計算機平臺為一塊安裝在機架上方的碳板,通過螺柱固定在機架上方,用于安裝機載計算機。
無人機機身結構采用碳板和碳管組合,相比于其他復合材料,在滿足無人機機體同等強度和剛度的前提下,碳纖維復合材料高比強度和高比剛度的特性能夠大大減輕無人機的機身質量,降低無人機的單位載荷成本,使得無人機在空中更好操控,使得規(guī)劃路線、定位等功能更加精準。
無人機底部起落架中間,使用3D 打印的連接件將橫豎交叉的兩根碳管連接在一起,起穩(wěn)定緊固作用。用橡膠將無人機起落架伸出的4 個腳包起來,在防滑同時起到降落接地時的減震緩沖作用。
在無人機實現(xiàn)全部功能的過程中,樹莓派需要向各個部分發(fā)送指令,實現(xiàn)自主運作。樹莓派是無人機的核心,多傳感器信息的融合和分析都是依靠樹莓派。飛行過程也是通過樹莓派來控制指揮的,把程序指令通過相應固件輸入到樹莓派中,在飛行過程中這些代碼指令就可以控制無人機來完成整個過程[1-2]。
在進行實際飛行之前,使用dronekit 可以在SITL 虛擬環(huán)境中進行模擬推演,保證實際飛行安全。再修改完參數(shù)后,通過代碼,可以在SITL 虛擬環(huán)境中進行模擬飛行,通過分析模擬飛行中的數(shù)據(jù),修改改善無人機的飛行狀態(tài)。此外,在模擬飛行中也可以減少在實際場景中無人機的損壞[3]。
四旋翼無人機一般采用“X”型布局,4 個旋翼位于“X”的4 個頂點,螺旋槳在電機的帶動下為多旋翼持續(xù)提供升力。一條斜線的電機作逆時針旋轉,另一條斜線的電機作順時針旋轉,從而保持一個穩(wěn)定的力矩,使無人機姿態(tài)穩(wěn)定。當無人機需要做垂直運動時,同時增加或減小4 個電機的轉速,就能達到垂直上升和垂直下降的目的。當無人機需要做俯仰運動時,增加(或減小)前側2 個電機的轉速,同時減小(或增加)后側2 個電機的轉速,即可達到無人機抬頭(或低頭)的目的[4]。
當無人機需要做滾轉運動時,增加(或減小)左右一側2 個電機的轉速,同時減小(或增加)另一側2 個電機的轉速,即可達到無人機滾轉的目的。當無人機需要做偏航運動時,一條對角線上的2 個電機轉速同時增大,另一條對角線上的2 個電機轉速同時減小,似的一條對角線螺旋槳對機身的反扭矩大于另一條對角線對機身的反扭矩,從而使無人機在富余反扭矩的作用下繞Z 軸轉動,實現(xiàn)偏航運動。
在實現(xiàn)飛行器在同一平面內做前后左右的運動時,需要同時保證反扭力矩的平衡從而保證飛行器的平穩(wěn)運動,無人機前側電機轉速小于后側電機轉速,使無人機發(fā)生一定程度的傾斜,當旋翼的拉力產生水平分量的時候,可以控制多旋翼向空間內不同方向進行運動。無人機使用架構形式,能使飛控、光流傳感器、電池、視覺傳感器等設備能有足夠的空間放置在無人機上,在主機架和副機架預留一定的孔位,方便各種結構以及設備的剛性連接,使之固定在無人機上。
人工勢場法是給目標航路點和直線路徑分配吸引勢場,給障礙物分配排斥勢場。使三維飛行區(qū)域處于目標航路點、直線路徑和障礙物的疊加勢場中,飛行在該區(qū)域中的多旋翼將會被目標航路點和直線路徑同時吸引,而被障礙物排斥,使得多旋翼在飛向目標航路點的同時沿著直線飛行,且能避開障礙物,如圖2 所示。
圖2 人工勢場法示意圖Fig.2 Schematic diagram of artificial potential field method
多旋翼全自主控制層級如圖3 所示,其中任務規(guī)劃在離線模式下進行,包括任務的分配與任務的階段性劃分,路徑規(guī)劃可以靠開源飛控自行完成。底層控制層內置在開源飛控之中,在這里討論應用的情況所以簡化考慮。
圖3 多旋翼全自主控制層級Fig.3 Multi-rotor fully autonomous control level
其中多旋翼進行避障主要涉及路徑規(guī)劃,精確的說是局部路徑規(guī)劃。根據(jù)局部環(huán)境和多旋翼動力學與運動學約束條件,將原本的兩點間的飛行路徑提煉成為可飛的飛行路徑。結合人工勢場法,在算法設計的過程中可以做出如下假設:多旋翼在運動的過程中同時受到目標位置對其的引力和障礙物對其的斥力。下面對無人機避障算法進行分析[5-6]。
多旋翼自主避障示意圖如圖4 所示。
圖4 多旋翼自主避障示意圖Fig.4 Schematic diagram of multi-rotor autonomous obstacle avoidance
(1)令p∈R3表示多旋翼當前的位置,pwp∈R3表示目標航路點。需要設計局部的路徑規(guī)劃器而實時的生成期望位置pd∈R3,引導多旋翼飛向航路點pwp并避開半徑為r0∈R+,球心位于po∈R3處的障礙物。
(2)為了方便模型的建立提出2 個假設:
①多旋翼的初始位置po∈R3滿足:
飛行器剛開始飛行不在障礙區(qū)內。
②目標航路pwp滿足:
目標位置離障礙足夠遠。
其中:方程的前部分為靠近目標航路的部分,方程中間部分為避障部分。根據(jù)假設①,避障項在初始時刻是有界的,如果函數(shù)一直有界,則多旋翼不會與障礙物發(fā)生碰撞。
而后,對V2求一階偏導數(shù):
根據(jù)不變集原理,系統(tǒng)將全局收斂到(p,v),其中v=03×1,p 是方程的解。參數(shù)k0,k1可以調整多旋翼靠近到目標航路點和避障的相對快慢[7]。
多旋翼平衡點示意圖如圖5 所示,平衡點只可能在A 射線的目標航路點與C 線上,出現(xiàn)障礙物時航路點對多旋翼的吸引力與障礙物對它的排斥力形成了一對合力,會使多旋翼盡量的遠離C 射線。如果多旋翼在射線C 上運動,多旋翼靠近障礙物會受到排斥力,且越靠近障礙物排斥力就越大,但是從實際情況的概率上來講,多旋翼運動在一定的空間內但是在此射線上的概率為0,所以此時的為不穩(wěn)定的平衡點,所以是唯一穩(wěn)定的平衡點。
圖5 多旋翼平衡點示意圖Fig.5 Schematic diagram of multi-rotor balance point
代碼主要應用Python 來控制飛機的移動情況。由于是使用的是開源固件,本次是用了dronekit。DroneKit-python 是一個用于控制無人機的Python庫。DroneKit 提供了用于控制無人機的API,其代碼獨立于飛控,單獨運行在機載電腦或其他設備之上,本項目的機載電腦選擇為樹莓派4B,通過串口或無線的方式經MAVLink 協(xié)議與飛控板通信。
從當前主機安裝DroneKit-python。
創(chuàng)建一個新的python 文件并導入DroneKit、pymavlink 和基本模塊:
連接到無人機或模擬的MAVLink 端口:
筆記本端當前可通過SSH 協(xié)議訪問樹莓派,樹莓派系統(tǒng)為Ubuntu18.04。
關于硬件協(xié)議的打通,光流硬件提供給無人機速度信息,因特爾T265 攝像頭提供給無人機空間位置信息,使無人機對自己周圍環(huán)境形成感知。關于攝像頭的安裝與編譯工作:
Intel Realsense SDK 的安裝例如運用如下程序:
Dronekit 作為一款強大的工具其數(shù)據(jù)庫中有很多Python 函數(shù)可以用于調用,電腦與樹莓派連接后運行指令。運用Python3 的指令需要在運行Dronekit后加入一段代碼否則無法識別。
在連接前對無人機水平位置進行校對,規(guī)定起飛前各方向速度為0:
在飛機起飛前需要進行安全檢查與確認,例如:
在起飛后通過代碼控制飛行方向與持續(xù)時間,此處數(shù)值用字母代替:
通過已知的基本程序語言對無人機行駛路徑進行規(guī)劃。
可靠的結構為無人機提供有力的硬件保障。無人機可以根據(jù)自身傳感器對周圍環(huán)境進行探索,并且將周圍位置信息進行量化。根據(jù)無人機位置信息,速度、位移和高度信息,由雷達探測障礙物,然后通過DroneKit 規(guī)劃出路徑來躲避障礙。根據(jù)模型,無人機在該程序下可以sitl 虛擬環(huán)境中可以進行狀態(tài)參數(shù)正常的模擬飛行,在實際場地中,飛行姿態(tài)可以保持平穩(wěn)。