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