梁 晨,劉小雄,張興旺,黃劍雄
(西北工業(yè)大學(xué) 自動化學(xué)院, 西安 710072)
近些年來隨著科技的提升,旋翼無人機行業(yè)發(fā)展迅猛,應(yīng)用場景越來越廣闊,由于四旋翼具有可垂直起降、低成本和結(jié)構(gòu)簡單的特性,因此在公共安全、民用航拍、消防急救、農(nóng)業(yè)植保以及軍事領(lǐng)域具有十分廣泛的用途。目前四旋翼無人機正在朝著易攜帶、多功能和更加安全高效的方向發(fā)展。
由于四旋翼是典型欠驅(qū)動非線性強耦合系統(tǒng)[1],四旋翼的速度和位置控制都依賴于姿態(tài)的控制,因此四旋翼的姿態(tài)控制一直是研究的熱點之一[2-4]。然而四旋翼在飛行過程中容易受到環(huán)境的干擾,旋翼槳葉之間的氣動干擾,存在電機快速旋轉(zhuǎn)時產(chǎn)生的陀螺力矩以及旋翼質(zhì)量分布不均等問題,這使得對四旋翼的精確建模尤為困難,從而導(dǎo)致依賴精確建模的傳統(tǒng)控制算法[5]難以達到控制要求。
強化學(xué)習(xí)又稱為增強學(xué)習(xí),自從20世紀(jì)初便被提出來了,經(jīng)過將近一個多世紀(jì)的發(fā)展,強化學(xué)習(xí)與心理學(xué)、智能控制、優(yōu)化理論、計算智能、認(rèn)知科學(xué)等學(xué)科有著密切的聯(lián)系,是一個典型的多學(xué)科交叉領(lǐng)域。近些年來,得益于高速計算機、深度學(xué)習(xí)以及大數(shù)據(jù)技術(shù)的發(fā)展,強化學(xué)習(xí)得到了越來越廣泛的關(guān)注,尤其是深度強化學(xué)習(xí)技術(shù),被學(xué)術(shù)界認(rèn)為是最有可能實現(xiàn)人工智能的算法,已經(jīng)成為最受學(xué)者們關(guān)注的前沿技術(shù)之一。
2016年AlphaGo成功戰(zhàn)勝了人類頂級棋手,使得深度強化學(xué)習(xí)得到了廣泛的關(guān)注,之后的AlphaGo Zero,更是使得強化學(xué)習(xí)技術(shù)成為人工智能領(lǐng)域最熱門的技術(shù)之一。強化學(xué)習(xí)技術(shù)不僅在博弈類游戲上取得了巨大成功,而且在控制領(lǐng)域也已有了新的突破,如在兩輪車的控制[6]、倒立擺的控制[7]上均取得了較好的進展。本文提出一種將強化學(xué)習(xí)[8]與神經(jīng)網(wǎng)絡(luò)結(jié)合起來的端到端的控制方法,該方法只關(guān)心系統(tǒng)的輸入輸出,不關(guān)心系統(tǒng)內(nèi)部過程,通過智能體與環(huán)境的不斷交互,反饋獎懲信息來優(yōu)化控制參數(shù),從而避免了對四旋翼進行精確建模等問題。該方法輸入為姿態(tài)角與姿態(tài)角速率,經(jīng)過神經(jīng)網(wǎng)絡(luò),計算出四旋翼的動作值函數(shù),再通過貪婪策略對動作進行選取,得到四旋翼各個槳葉的拉力。通過強化學(xué)習(xí)的方法對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,最終使得神經(jīng)網(wǎng)絡(luò)可以收斂。最終通過在強化學(xué)習(xí)算法工具包OpenAI Gym中建立四旋翼的模型,用本文設(shè)計的控制算法對該模型進行仿真控制,結(jié)果證明了該算法的有效性。
如圖1所示,本文對“X”型結(jié)構(gòu)的四旋翼進行動力學(xué)模型的建立。在慣性系中應(yīng)用牛頓第二定律,可得四旋翼飛行器在合外力F作用下的線運動和合外力矩M作用下的角運動方程:

圖1 四旋翼結(jié)構(gòu)圖

(1)
通過對槳葉動力學(xué)模型的分析和電機模型的建立,可以求得槳葉產(chǎn)生的力矩、旋翼慣性反扭力矩以及陀螺效應(yīng)力矩。根據(jù)機體系與地面系的旋轉(zhuǎn)關(guān)系可求得歐拉角速率與機體三軸角速率的關(guān)系:

(2)
當(dāng)四旋翼姿態(tài)變化很小時,通過求解式(1),得到四旋翼飛行器的角運動方程:

(3)
其中:φ、θ、ψ為滾轉(zhuǎn)角、俯仰角、偏航角;p、q、r為滾轉(zhuǎn)角速率、俯仰角速率、偏航角速率;Ix、Iy、Iz分別為四旋翼飛行器繞x、y、z軸的轉(zhuǎn)動慣量,Jr為每個槳葉的轉(zhuǎn)動慣量;ΩG為陀螺力矩轉(zhuǎn)速;
根據(jù)圖1的四旋翼結(jié)構(gòu),定義UT、Uφ、Uθ、Uψ分別為四旋翼高度、滾轉(zhuǎn)通道、俯仰通道以及偏航通道的控制輸入,F(xiàn)1、F2、F3、F4分別為4個槳葉提供的拉力,則有:
(4)
其中:d表示旋翼轉(zhuǎn)軸到x軸或y軸的距離;CM為反扭力矩系數(shù),CT為升力系數(shù)。
圖2為強化學(xué)習(xí)的基本圖,強化學(xué)習(xí)是通過智能體與環(huán)境的不斷交互來更新控制策略的。一開始,智能體隨機選擇一個動作A作用于環(huán)境,環(huán)境模型通過該動作使得整個系統(tǒng)達到一個新的狀態(tài),并且通過回報函數(shù)給智能體一個反饋。這樣不斷循環(huán)下去,智能體與環(huán)境持續(xù)地交互,從而產(chǎn)生更多的數(shù)據(jù)樣本。智能體根據(jù)與環(huán)境交互而產(chǎn)生的數(shù)據(jù)樣本來改變自身的動作選擇策略。通過不斷地試錯,智能體最終會學(xué)到一個最優(yōu)的策略。

圖2 強化學(xué)習(xí)基本框圖
從強化學(xué)習(xí)的基本原理中我們可以看出來,強化學(xué)習(xí)與監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)有一些本質(zhì)上的區(qū)別。如傳統(tǒng)的監(jiān)督學(xué)習(xí)中,數(shù)據(jù)樣本是一些帶有標(biāo)簽的靜止訓(xùn)練集,只要樣本數(shù)據(jù)之間的差異足夠明顯,就能夠訓(xùn)練一個不錯的模型。而強化學(xué)習(xí)則是一個連續(xù)決策的過程,在強化學(xué)習(xí)中,智能體沒有直接的指導(dǎo)信息,而是通過環(huán)境反饋的立即回報來修正自身的策略,智能體需要不斷地與環(huán)境進行交互從而實時地獲取訓(xùn)練數(shù)據(jù),通過這種試錯的方式來獲得最佳的策略。
本文采用基于值函數(shù)逼近的無模型強化學(xué)習(xí)算法Deep Q-Network[9]來對四旋翼姿態(tài)進行控制。DQN算法是在Q-Learning算法的基礎(chǔ)上進行的改進,在Q-Learning算法中,維護一張表Q-Table它的每一列代表一個動作,每一行代表一個狀態(tài),這張表記錄了每個狀態(tài)下采取不同動作所獲得的最大長期獎勵期望,通過這張表就可以知道每一步的最佳動作是什么。但是在狀態(tài)空間維度十分龐大甚至連續(xù)時,Q-Table不能存儲下所有的狀態(tài),因此DeepMind對Q-Learning進行了改進,便得到了DQN算法,其改進主要體現(xiàn)在以下幾個方面:
1)DQN利用卷積神經(jīng)網(wǎng)絡(luò)進行值函數(shù)的逼近;
2)DQN利用了經(jīng)驗回放訓(xùn)練強化學(xué)習(xí)的學(xué)習(xí)過程;
3)DQN中獨立設(shè)置了目標(biāo)網(wǎng)絡(luò)來單獨處理時間差分算法中的TD偏差。
DQN算法流程如圖3所示,在DQN算法中,有幾個比較重要的環(huán)節(jié):環(huán)境、當(dāng)前值網(wǎng)絡(luò)與目標(biāo)值網(wǎng)絡(luò)、動作庫、經(jīng)驗池以及回報函數(shù)。環(huán)境模型在上一節(jié)中已經(jīng)建立,其余的將在本節(jié)進行建立。

圖3 DQN算法流程
1)動作庫:本文中動作庫是俯仰、滾轉(zhuǎn)、偏航三通道的控制量Uφ、Uθ、Uψ。
2)值函數(shù)神經(jīng)網(wǎng)絡(luò):在DQN中,存在兩個結(jié)構(gòu)完全相同的逼近值函數(shù)的神經(jīng)網(wǎng)絡(luò):一個是當(dāng)前值函數(shù)神經(jīng)網(wǎng)絡(luò),另一個是目標(biāo)值函數(shù)神經(jīng)網(wǎng)絡(luò)。當(dāng)前值函數(shù)與目標(biāo)值函數(shù)的差作為部分依據(jù)修正神經(jīng)網(wǎng)絡(luò)的參數(shù),當(dāng)前值函數(shù)神經(jīng)網(wǎng)絡(luò)每一步都更新,而目標(biāo)值函數(shù)神經(jīng)網(wǎng)絡(luò)每隔一定的步數(shù)更新。本文采用三層BP神經(jīng)網(wǎng)絡(luò)作為值函數(shù)神經(jīng)網(wǎng)絡(luò),輸入維度為2,對應(yīng)單個通道的角度與角速率,輸出維度對應(yīng)單個通道的動作庫維度。
網(wǎng)絡(luò)參數(shù)的更新如下所示:
Q(s,a;θ)]·▽Q(s,a;θ)
(5)
其中:θ為網(wǎng)絡(luò)參數(shù);α為學(xué)習(xí)速率;r為立即回報;γ為折扣因子;s和a分別為狀態(tài)與動作。
3)經(jīng)驗池:由于強化學(xué)習(xí)是建立在馬爾科夫決策過程的基礎(chǔ)上的,因此通過強化學(xué)習(xí)得到的樣本數(shù)據(jù)之間存在著相關(guān)性,而神經(jīng)網(wǎng)絡(luò)的前提是樣本之間獨立同分布。基于此,建立一個經(jīng)驗池,將通過強化學(xué)習(xí)得到的數(shù)據(jù)存在經(jīng)驗池中,訓(xùn)練時從經(jīng)驗池中隨機均勻采取一些樣本進行訓(xùn)練,以此來打破數(shù)據(jù)樣本之間存在的相關(guān)性。
4)回報函數(shù):本文研究內(nèi)容是四旋翼的姿態(tài)控制,以滾轉(zhuǎn)角φ單通道為例,設(shè)計回報函數(shù)如下:
(6)
當(dāng)角度偏差或角速度比較大時,對智能體懲罰比較大,反之則懲罰較小。強化學(xué)習(xí)會對智能體朝著使得累積回報最大的方向進行訓(xùn)練。
基于以上分析,設(shè)計基于無模型強化學(xué)習(xí)算法DQN的四旋翼控制律,模型參數(shù)如表1所示。

表1 模型參數(shù)
具體設(shè)計如下:
由于三通道的控制律結(jié)構(gòu)一致,因此以下僅以滾轉(zhuǎn)通道為例進行介紹。依據(jù)第二章四旋翼姿態(tài)控制結(jié)構(gòu),需要建立兩個結(jié)構(gòu)相同但參數(shù)不同的神經(jīng)網(wǎng)絡(luò),即目標(biāo)網(wǎng)絡(luò)和現(xiàn)實網(wǎng)絡(luò),定義目標(biāo)網(wǎng)絡(luò)的參數(shù)為θ-,現(xiàn)實網(wǎng)絡(luò)的參數(shù)為θ。本文采用三層BP神經(jīng)網(wǎng)絡(luò)對值函數(shù)進行擬合,神經(jīng)網(wǎng)絡(luò)輸入層有兩個神經(jīng)元,分別為俯仰角偏差與俯仰角速率;隱藏層有10個神經(jīng)元;輸出層有20個神經(jīng)元,對應(yīng)俯仰通道的動作值函數(shù)。
設(shè)置經(jīng)驗池大小為5 000,經(jīng)驗池中每一個樣本存儲智能體的上一步狀態(tài)st、當(dāng)前狀態(tài)st+1、環(huán)境給予的立即回報r以及在當(dāng)前狀態(tài)下所選取的動作a,當(dāng)樣本數(shù)據(jù)大于5 000時,可以認(rèn)為前面的數(shù)據(jù)已經(jīng)不具備參考價值,刪除掉最早的數(shù)據(jù)。

圖4 經(jīng)驗池
規(guī)定每次訓(xùn)練時從經(jīng)驗池中隨機均勻抽取50條樣本進行訓(xùn)練。因為訓(xùn)練時系統(tǒng)使用ε貪婪策略進行動作的選取,所以為使系統(tǒng)一開始具備較強的探索能力,盡最大可能探索到范圍以內(nèi)的所有狀態(tài),不至于收斂到局部最優(yōu),實驗中將ε貪婪值初始化為0,每隔1 000步,貪婪值增加0.01,最大增加到0.95。
在實驗中,給定初始角度偏差為5°,同時初始化角速度為0°/s,開始訓(xùn)練智能體。訓(xùn)練采取回合制,為防止智能體收斂到局部最優(yōu),為每一個回合設(shè)定最大仿真步數(shù),當(dāng)角度偏差超過設(shè)定范圍或者本回合步數(shù)超過最大步數(shù)時,本回合結(jié)束,開始下一回合訓(xùn)練。實驗中,對仿真回合不做限制,但是每一個回合將輸出損失與參數(shù)模型,實驗中可以隨時終止訓(xùn)練并將模型導(dǎo)出。
綜上所述,以貪婪策略作為滾轉(zhuǎn)通道控制量的選取策略,即滾轉(zhuǎn)通道控制量取值為值函數(shù)中值最大的元素所對應(yīng)的動作,即:
(7)
根據(jù)第3小節(jié)所描述的實驗方法進行實驗,仿真步驟如下所示:
1)初始化一些必要的參數(shù),如動作庫、貪婪值、初始角度偏差、經(jīng)驗池大小、每次訓(xùn)練所采的樣本數(shù)等;
2)開始訓(xùn)練,訓(xùn)練時動作的選取采用ε貪婪策略。每回合訓(xùn)練時輸出損失與參數(shù)模型,當(dāng)損失達到一定要求之后,停止訓(xùn)練,保存參數(shù)模型。對俯仰、滾轉(zhuǎn)、偏航通道分別進行如上所示的訓(xùn)練并保存好參數(shù)模型;
3)將參數(shù)模型輸入到最終的仿真模型中,并通過式(4)反解出每個電機的拉力,從而實現(xiàn)對四旋翼的姿態(tài)控制。
仿真電腦CPU為Intel i5-7500,內(nèi)存8.00 GB,在ubuntu16.04系統(tǒng)下,采用OpenAI Gym工具包進行仿真,訓(xùn)練效果如圖5所示。

圖5 損失函數(shù)曲線
從損失函數(shù)曲線中可以看出,在強化學(xué)習(xí)的訓(xùn)練下,神經(jīng)網(wǎng)絡(luò)基本上從4 000步開始就已經(jīng)收斂了,而到10 000步左右時出現(xiàn)小幅的波動,這是因為貪婪策略取值最大為0.95,系統(tǒng)依然有5%的概率隨機選取動作,這會導(dǎo)致目標(biāo)網(wǎng)絡(luò)與現(xiàn)實網(wǎng)絡(luò)之間的偏差增大,進而導(dǎo)致?lián)p失函數(shù)的增加。實驗中,選取了第4 000步時的模型參數(shù)作為最終的模型參數(shù)。

圖6 初始值為正時Δφ的變化
將訓(xùn)練好的模型輸入系統(tǒng)控制結(jié)構(gòu)中,并對角度觀測量加入[0.1,0.1]上的隨機噪聲,初始化φ為5°,設(shè)置期望值為0度進行仿真實驗。如圖6所示,系統(tǒng)基本上能夠在1 s以內(nèi)達到控制目標(biāo),并且穩(wěn)定在目標(biāo)值左右。

圖7 初始值為負(fù)時Δφ的變化
將Δφ的初始值為-5時訓(xùn)練得到的模型參數(shù),重新輸入到飛機模型中,得到曲線如圖7所示。
由以上分析,將訓(xùn)練好的網(wǎng)絡(luò)模型輸入到飛機模型中,控制器輸入為期望角度值,將當(dāng)前角度值與期望角度值做差,當(dāng)角度偏差為正時通過第一個網(wǎng)絡(luò)模型進行控制,當(dāng)角度偏差為負(fù)時通過第二個網(wǎng)絡(luò)模型進行控制。
圖8為φ的控制效果圖,將系統(tǒng)初始角度與期望角度分別設(shè)置為5°和0°,并在第5 s、10 s、15 s時分別改變系統(tǒng)的期望角度,可以看到,系統(tǒng)基本可以跟上控制指令。

圖8 φ的控制效果圖
同理,俯仰角和偏航角的控制結(jié)構(gòu)與滾轉(zhuǎn)角一致,俯仰通道與偏航通道的控制效果如下:
圖9、圖10分別為俯仰角和偏航角的控制效果圖。將俯仰角的初始值和期望值分別設(shè)置為-5°和0°,然后在5 s、10 s、15 s時分別改變俯仰角期望值為5°、0°和-5°,得到曲線如圖9(c)所示。同理將偏航角的初始值與期望值分別設(shè)置為10°和0°,然后在5 s、10 s、15 s時分別改變偏航角的值為10°、0°和-10°,得到曲線如圖10(c)所示。

圖9 俯仰角的控制效果圖

圖10 偏航角的控制效果圖
綜合以上曲線可以看出,在單獨控制一個通道時,基于DQN的控制律基本可以快速準(zhǔn)確地跟蹤上指令信號的改變。接著將三通道的控制量通過下式求出各槳葉所提供的拉力,從而達到控制四旋翼飛行器的目的。
(8)
其中:Ac為系數(shù)矩陣。
圖11為將各通道控制量經(jīng)過控制分配之后得到的四旋翼姿態(tài)控制效果圖。

圖11 四旋翼姿態(tài)角控制效果
實驗中,將四旋翼三軸姿態(tài)角均初始化為0°,角度觀測量均加入[-0.1,0.1]上的隨機噪聲,通過在不同時刻給定四旋翼不同的指令信號,使得四旋翼達到不同姿態(tài),最終效果如圖11所示。
從圖11中可以看出,控制器基本上可以使得四旋翼的姿態(tài)跟上指令信號,但同時伴隨有一定的震蕩,還會有一定的誤差。這是因為DQN中,動作空間并不是連續(xù)的,在一些狀態(tài)下,智能體所需要選擇的最優(yōu)動作并不存在于動作空間中,這時智能體只能選擇動作空間中最接近最優(yōu)動作的動作,這就造成了四旋翼姿態(tài)必然會伴隨有一定的震蕩和誤差。因此想要減小震蕩并消除誤差,這能增加動作空間的維度,將動作空間設(shè)置的更加稠密,這樣智能體選擇的動作就會更加接近最優(yōu)值。
本文針對“X”型結(jié)構(gòu)的四旋翼非線性運動模型,提出基于無模型強化學(xué)習(xí)算法DQN的四旋翼姿態(tài)控制律設(shè)計[10]。首先對俯仰角、滾轉(zhuǎn)角以及偏航角分別進行控制律設(shè)計,當(dāng)三通道控制律達到控制要求之后,通過控制分配求出4個槳葉的拉力,進而達到控制四旋翼姿態(tài)的目的。實驗結(jié)果表明基于無模型強化學(xué)習(xí)的控制律能夠在不知道被控對象模型的情況下,控制四旋翼實時跟蹤上參考指令的變化。