梁 晨,劉小雄,張興旺,黃劍雄
(西北工業(yè)大學(xué) 自動(dòng)化學(xué)院, 西安 710072)
近些年來(lái)隨著科技的提升,旋翼無(wú)人機(jī)行業(yè)發(fā)展迅猛,應(yīng)用場(chǎng)景越來(lái)越廣闊,由于四旋翼具有可垂直起降、低成本和結(jié)構(gòu)簡(jiǎn)單的特性,因此在公共安全、民用航拍、消防急救、農(nóng)業(yè)植保以及軍事領(lǐng)域具有十分廣泛的用途。目前四旋翼無(wú)人機(jī)正在朝著易攜帶、多功能和更加安全高效的方向發(fā)展。
由于四旋翼是典型欠驅(qū)動(dòng)非線性強(qiáng)耦合系統(tǒng)[1],四旋翼的速度和位置控制都依賴于姿態(tài)的控制,因此四旋翼的姿態(tài)控制一直是研究的熱點(diǎn)之一[2-4]。然而四旋翼在飛行過(guò)程中容易受到環(huán)境的干擾,旋翼槳葉之間的氣動(dòng)干擾,存在電機(jī)快速旋轉(zhuǎn)時(shí)產(chǎn)生的陀螺力矩以及旋翼質(zhì)量分布不均等問(wèn)題,這使得對(duì)四旋翼的精確建模尤為困難,從而導(dǎo)致依賴精確建模的傳統(tǒng)控制算法[5]難以達(dá)到控制要求。
強(qiáng)化學(xué)習(xí)又稱為增強(qiáng)學(xué)習(xí),自從20世紀(jì)初便被提出來(lái)了,經(jīng)過(guò)將近一個(gè)多世紀(jì)的發(fā)展,強(qiáng)化學(xué)習(xí)與心理學(xué)、智能控制、優(yōu)化理論、計(jì)算智能、認(rèn)知科學(xué)等學(xué)科有著密切的聯(lián)系,是一個(gè)典型的多學(xué)科交叉領(lǐng)域。近些年來(lái),得益于高速計(jì)算機(jī)、深度學(xué)習(xí)以及大數(shù)據(jù)技術(shù)的發(fā)展,強(qiáng)化學(xué)習(xí)得到了越來(lái)越廣泛的關(guān)注,尤其是深度強(qiáng)化學(xué)習(xí)技術(shù),被學(xué)術(shù)界認(rèn)為是最有可能實(shí)現(xiàn)人工智能的算法,已經(jīng)成為最受學(xué)者們關(guān)注的前沿技術(shù)之一。
2016年AlphaGo成功戰(zhàn)勝了人類頂級(jí)棋手,使得深度強(qiáng)化學(xué)習(xí)得到了廣泛的關(guān)注,之后的AlphaGo Zero,更是使得強(qiáng)化學(xué)習(xí)技術(shù)成為人工智能領(lǐng)域最熱門的技術(shù)之一。強(qiáng)化學(xué)習(xí)技術(shù)不僅在博弈類游戲上取得了巨大成功,而且在控制領(lǐng)域也已有了新的突破,如在兩輪車的控制[6]、倒立擺的控制[7]上均取得了較好的進(jìn)展。本文提出一種將強(qiáng)化學(xué)習(xí)[8]與神經(jīng)網(wǎng)絡(luò)結(jié)合起來(lái)的端到端的控制方法,該方法只關(guān)心系統(tǒng)的輸入輸出,不關(guān)心系統(tǒng)內(nèi)部過(guò)程,通過(guò)智能體與環(huán)境的不斷交互,反饋獎(jiǎng)懲信息來(lái)優(yōu)化控制參數(shù),從而避免了對(duì)四旋翼進(jìn)行精確建模等問(wèn)題。該方法輸入為姿態(tài)角與姿態(tài)角速率,經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò),計(jì)算出四旋翼的動(dòng)作值函數(shù),再通過(guò)貪婪策略對(duì)動(dòng)作進(jìn)行選取,得到四旋翼各個(gè)槳葉的拉力。通過(guò)強(qiáng)化學(xué)習(xí)的方法對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,最終使得神經(jīng)網(wǎng)絡(luò)可以收斂。最終通過(guò)在強(qiáng)化學(xué)習(xí)算法工具包OpenAI Gym中建立四旋翼的模型,用本文設(shè)計(jì)的控制算法對(duì)該模型進(jìn)行仿真控制,結(jié)果證明了該算法的有效性。
如圖1所示,本文對(duì)“X”型結(jié)構(gòu)的四旋翼進(jìn)行動(dòng)力學(xué)模型的建立。在慣性系中應(yīng)用牛頓第二定律,可得四旋翼飛行器在合外力F作用下的線運(yùn)動(dòng)和合外力矩M作用下的角運(yùn)動(dòng)方程:
圖1 四旋翼結(jié)構(gòu)圖
(1)
通過(guò)對(duì)槳葉動(dòng)力學(xué)模型的分析和電機(jī)模型的建立,可以求得槳葉產(chǎn)生的力矩、旋翼慣性反扭力矩以及陀螺效應(yīng)力矩。根據(jù)機(jī)體系與地面系的旋轉(zhuǎn)關(guān)系可求得歐拉角速率與機(jī)體三軸角速率的關(guān)系:
(2)
當(dāng)四旋翼姿態(tài)變化很小時(shí),通過(guò)求解式(1),得到四旋翼飛行器的角運(yùn)動(dòng)方程:
(3)
其中:φ、θ、ψ為滾轉(zhuǎn)角、俯仰角、偏航角;p、q、r為滾轉(zhuǎn)角速率、俯仰角速率、偏航角速率;Ix、Iy、Iz分別為四旋翼飛行器繞x、y、z軸的轉(zhuǎn)動(dòng)慣量,Jr為每個(gè)槳葉的轉(zhuǎn)動(dòng)慣量;ΩG為陀螺力矩轉(zhuǎn)速;
根據(jù)圖1的四旋翼結(jié)構(gòu),定義UT、Uφ、Uθ、Uψ分別為四旋翼高度、滾轉(zhuǎn)通道、俯仰通道以及偏航通道的控制輸入,F(xiàn)1、F2、F3、F4分別為4個(gè)槳葉提供的拉力,則有:
(4)
其中:d表示旋翼轉(zhuǎn)軸到x軸或y軸的距離;CM為反扭力矩系數(shù),CT為升力系數(shù)。
圖2為強(qiáng)化學(xué)習(xí)的基本圖,強(qiáng)化學(xué)習(xí)是通過(guò)智能體與環(huán)境的不斷交互來(lái)更新控制策略的。一開始,智能體隨機(jī)選擇一個(gè)動(dòng)作A作用于環(huán)境,環(huán)境模型通過(guò)該動(dòng)作使得整個(gè)系統(tǒng)達(dá)到一個(gè)新的狀態(tài),并且通過(guò)回報(bào)函數(shù)給智能體一個(gè)反饋。這樣不斷循環(huán)下去,智能體與環(huán)境持續(xù)地交互,從而產(chǎn)生更多的數(shù)據(jù)樣本。智能體根據(jù)與環(huán)境交互而產(chǎn)生的數(shù)據(jù)樣本來(lái)改變自身的動(dòng)作選擇策略。通過(guò)不斷地試錯(cuò),智能體最終會(huì)學(xué)到一個(gè)最優(yōu)的策略。
圖2 強(qiáng)化學(xué)習(xí)基本框圖
從強(qiáng)化學(xué)習(xí)的基本原理中我們可以看出來(lái),強(qiáng)化學(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)練一個(gè)不錯(cuò)的模型。而強(qiáng)化學(xué)習(xí)則是一個(gè)連續(xù)決策的過(guò)程,在強(qiáng)化學(xué)習(xí)中,智能體沒(méi)有直接的指導(dǎo)信息,而是通過(guò)環(huán)境反饋的立即回報(bào)來(lái)修正自身的策略,智能體需要不斷地與環(huán)境進(jìn)行交互從而實(shí)時(shí)地獲取訓(xùn)練數(shù)據(jù),通過(guò)這種試錯(cuò)的方式來(lái)獲得最佳的策略。
本文采用基于值函數(shù)逼近的無(wú)模型強(qiáng)化學(xué)習(xí)算法Deep Q-Network[9]來(lái)對(duì)四旋翼姿態(tài)進(jìn)行控制。DQN算法是在Q-Learning算法的基礎(chǔ)上進(jìn)行的改進(jìn),在Q-Learning算法中,維護(hù)一張表Q-Table它的每一列代表一個(gè)動(dòng)作,每一行代表一個(gè)狀態(tài),這張表記錄了每個(gè)狀態(tài)下采取不同動(dòng)作所獲得的最大長(zhǎng)期獎(jiǎng)勵(lì)期望,通過(guò)這張表就可以知道每一步的最佳動(dòng)作是什么。但是在狀態(tài)空間維度十分龐大甚至連續(xù)時(shí),Q-Table不能存儲(chǔ)下所有的狀態(tài),因此DeepMind對(duì)Q-Learning進(jìn)行了改進(jìn),便得到了DQN算法,其改進(jìn)主要體現(xiàn)在以下幾個(gè)方面:
1)DQN利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行值函數(shù)的逼近;
2)DQN利用了經(jīng)驗(yàn)回放訓(xùn)練強(qiáng)化學(xué)習(xí)的學(xué)習(xí)過(guò)程;
3)DQN中獨(dú)立設(shè)置了目標(biāo)網(wǎng)絡(luò)來(lái)單獨(dú)處理時(shí)間差分算法中的TD偏差。
DQN算法流程如圖3所示,在DQN算法中,有幾個(gè)比較重要的環(huán)節(jié):環(huán)境、當(dāng)前值網(wǎng)絡(luò)與目標(biāo)值網(wǎng)絡(luò)、動(dòng)作庫(kù)、經(jīng)驗(yàn)池以及回報(bào)函數(shù)。環(huán)境模型在上一節(jié)中已經(jīng)建立,其余的將在本節(jié)進(jìn)行建立。
圖3 DQN算法流程
1)動(dòng)作庫(kù):本文中動(dòng)作庫(kù)是俯仰、滾轉(zhuǎn)、偏航三通道的控制量Uφ、Uθ、Uψ。
2)值函數(shù)神經(jīng)網(wǎng)絡(luò):在DQN中,存在兩個(gè)結(jié)構(gòu)完全相同的逼近值函數(shù)的神經(jīng)網(wǎng)絡(luò):一個(gè)是當(dāng)前值函數(shù)神經(jīng)網(wǎng)絡(luò),另一個(gè)是目標(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,對(duì)應(yīng)單個(gè)通道的角度與角速率,輸出維度對(duì)應(yīng)單個(gè)通道的動(dòng)作庫(kù)維度。
網(wǎng)絡(luò)參數(shù)的更新如下所示:
Q(s,a;θ)]·▽Q(s,a;θ)
(5)
其中:θ為網(wǎng)絡(luò)參數(shù);α為學(xué)習(xí)速率;r為立即回報(bào);γ為折扣因子;s和a分別為狀態(tài)與動(dòng)作。
3)經(jīng)驗(yàn)池:由于強(qiáng)化學(xué)習(xí)是建立在馬爾科夫決策過(guò)程的基礎(chǔ)上的,因此通過(guò)強(qiáng)化學(xué)習(xí)得到的樣本數(shù)據(jù)之間存在著相關(guān)性,而神經(jīng)網(wǎng)絡(luò)的前提是樣本之間獨(dú)立同分布?;诖耍⒁粋€(gè)經(jīng)驗(yàn)池,將通過(guò)強(qiáng)化學(xué)習(xí)得到的數(shù)據(jù)存在經(jīng)驗(yàn)池中,訓(xùn)練時(shí)從經(jīng)驗(yàn)池中隨機(jī)均勻采取一些樣本進(jìn)行訓(xùn)練,以此來(lái)打破數(shù)據(jù)樣本之間存在的相關(guān)性。
4)回報(bào)函數(shù):本文研究?jī)?nèi)容是四旋翼的姿態(tài)控制,以滾轉(zhuǎn)角φ單通道為例,設(shè)計(jì)回報(bào)函數(shù)如下:
(6)
當(dāng)角度偏差或角速度比較大時(shí),對(duì)智能體懲罰比較大,反之則懲罰較小。強(qiáng)化學(xué)習(xí)會(huì)對(duì)智能體朝著使得累積回報(bào)最大的方向進(jìn)行訓(xùn)練。
基于以上分析,設(shè)計(jì)基于無(wú)模型強(qiáng)化學(xué)習(xí)算法DQN的四旋翼控制律,模型參數(shù)如表1所示。
表1 模型參數(shù)
具體設(shè)計(jì)如下:
由于三通道的控制律結(jié)構(gòu)一致,因此以下僅以滾轉(zhuǎn)通道為例進(jìn)行介紹。依據(jù)第二章四旋翼姿態(tài)控制結(jié)構(gòu),需要建立兩個(gè)結(jié)構(gòu)相同但參數(shù)不同的神經(jīng)網(wǎng)絡(luò),即目標(biāo)網(wǎng)絡(luò)和現(xiàn)實(shí)網(wǎng)絡(luò),定義目標(biāo)網(wǎng)絡(luò)的參數(shù)為θ-,現(xiàn)實(shí)網(wǎng)絡(luò)的參數(shù)為θ。本文采用三層BP神經(jīng)網(wǎng)絡(luò)對(duì)值函數(shù)進(jìn)行擬合,神經(jīng)網(wǎng)絡(luò)輸入層有兩個(gè)神經(jīng)元,分別為俯仰角偏差與俯仰角速率;隱藏層有10個(gè)神經(jīng)元;輸出層有20個(gè)神經(jīng)元,對(duì)應(yīng)俯仰通道的動(dòng)作值函數(shù)。
設(shè)置經(jīng)驗(yàn)池大小為5 000,經(jīng)驗(yàn)池中每一個(gè)樣本存儲(chǔ)智能體的上一步狀態(tài)st、當(dāng)前狀態(tài)st+1、環(huán)境給予的立即回報(bào)r以及在當(dāng)前狀態(tài)下所選取的動(dòng)作a,當(dāng)樣本數(shù)據(jù)大于5 000時(shí),可以認(rèn)為前面的數(shù)據(jù)已經(jīng)不具備參考價(jià)值,刪除掉最早的數(shù)據(jù)。
圖4 經(jīng)驗(yàn)池
規(guī)定每次訓(xùn)練時(shí)從經(jīng)驗(yàn)池中隨機(jī)均勻抽取50條樣本進(jìn)行訓(xùn)練。因?yàn)橛?xùn)練時(shí)系統(tǒng)使用ε貪婪策略進(jìn)行動(dòng)作的選取,所以為使系統(tǒng)一開始具備較強(qiáng)的探索能力,盡最大可能探索到范圍以內(nèi)的所有狀態(tài),不至于收斂到局部最優(yōu),實(shí)驗(yàn)中將ε貪婪值初始化為0,每隔1 000步,貪婪值增加0.01,最大增加到0.95。
在實(shí)驗(yàn)中,給定初始角度偏差為5°,同時(shí)初始化角速度為0°/s,開始訓(xùn)練智能體。訓(xùn)練采取回合制,為防止智能體收斂到局部最優(yōu),為每一個(gè)回合設(shè)定最大仿真步數(shù),當(dāng)角度偏差超過(guò)設(shè)定范圍或者本回合步數(shù)超過(guò)最大步數(shù)時(shí),本回合結(jié)束,開始下一回合訓(xùn)練。實(shí)驗(yàn)中,對(duì)仿真回合不做限制,但是每一個(gè)回合將輸出損失與參數(shù)模型,實(shí)驗(yàn)中可以隨時(shí)終止訓(xùn)練并將模型導(dǎo)出。
綜上所述,以貪婪策略作為滾轉(zhuǎn)通道控制量的選取策略,即滾轉(zhuǎn)通道控制量取值為值函數(shù)中值最大的元素所對(duì)應(yīng)的動(dòng)作,即:
(7)
根據(jù)第3小節(jié)所描述的實(shí)驗(yàn)方法進(jìn)行實(shí)驗(yàn),仿真步驟如下所示:
1)初始化一些必要的參數(shù),如動(dòng)作庫(kù)、貪婪值、初始角度偏差、經(jīng)驗(yàn)池大小、每次訓(xùn)練所采的樣本數(shù)等;
2)開始訓(xùn)練,訓(xùn)練時(shí)動(dòng)作的選取采用ε貪婪策略。每回合訓(xùn)練時(shí)輸出損失與參數(shù)模型,當(dāng)損失達(dá)到一定要求之后,停止訓(xùn)練,保存參數(shù)模型。對(duì)俯仰、滾轉(zhuǎn)、偏航通道分別進(jìn)行如上所示的訓(xùn)練并保存好參數(shù)模型;
3)將參數(shù)模型輸入到最終的仿真模型中,并通過(guò)式(4)反解出每個(gè)電機(jī)的拉力,從而實(shí)現(xiàn)對(duì)四旋翼的姿態(tài)控制。
仿真電腦CPU為Intel i5-7500,內(nèi)存8.00 GB,在ubuntu16.04系統(tǒng)下,采用OpenAI Gym工具包進(jìn)行仿真,訓(xùn)練效果如圖5所示。
圖5 損失函數(shù)曲線
從損失函數(shù)曲線中可以看出,在強(qiáng)化學(xué)習(xí)的訓(xùn)練下,神經(jīng)網(wǎng)絡(luò)基本上從4 000步開始就已經(jīng)收斂了,而到10 000步左右時(shí)出現(xiàn)小幅的波動(dòng),這是因?yàn)樨澙凡呗匀≈底畲鬄?.95,系統(tǒng)依然有5%的概率隨機(jī)選取動(dòng)作,這會(huì)導(dǎo)致目標(biāo)網(wǎng)絡(luò)與現(xiàn)實(shí)網(wǎng)絡(luò)之間的偏差增大,進(jìn)而導(dǎo)致?lián)p失函數(shù)的增加。實(shí)驗(yàn)中,選取了第4 000步時(shí)的模型參數(shù)作為最終的模型參數(shù)。
圖6 初始值為正時(shí)Δφ的變化
將訓(xùn)練好的模型輸入系統(tǒng)控制結(jié)構(gòu)中,并對(duì)角度觀測(cè)量加入[0.1,0.1]上的隨機(jī)噪聲,初始化φ為5°,設(shè)置期望值為0度進(jìn)行仿真實(shí)驗(yàn)。如圖6所示,系統(tǒng)基本上能夠在1 s以內(nèi)達(dá)到控制目標(biāo),并且穩(wěn)定在目標(biāo)值左右。
圖7 初始值為負(fù)時(shí)Δφ的變化
將Δφ的初始值為-5時(shí)訓(xùn)練得到的模型參數(shù),重新輸入到飛機(jī)模型中,得到曲線如圖7所示。
由以上分析,將訓(xùn)練好的網(wǎng)絡(luò)模型輸入到飛機(jī)模型中,控制器輸入為期望角度值,將當(dāng)前角度值與期望角度值做差,當(dāng)角度偏差為正時(shí)通過(guò)第一個(gè)網(wǎng)絡(luò)模型進(jìn)行控制,當(dāng)角度偏差為負(fù)時(shí)通過(guò)第二個(gè)網(wǎng)絡(luò)模型進(jìn)行控制。
圖8為φ的控制效果圖,將系統(tǒng)初始角度與期望角度分別設(shè)置為5°和0°,并在第5 s、10 s、15 s時(shí)分別改變系統(tǒng)的期望角度,可以看到,系統(tǒng)基本可以跟上控制指令。
圖8 φ的控制效果圖
同理,俯仰角和偏航角的控制結(jié)構(gòu)與滾轉(zhuǎn)角一致,俯仰通道與偏航通道的控制效果如下:
圖9、圖10分別為俯仰角和偏航角的控制效果圖。將俯仰角的初始值和期望值分別設(shè)置為-5°和0°,然后在5 s、10 s、15 s時(shí)分別改變俯仰角期望值為5°、0°和-5°,得到曲線如圖9(c)所示。同理將偏航角的初始值與期望值分別設(shè)置為10°和0°,然后在5 s、10 s、15 s時(shí)分別改變偏航角的值為10°、0°和-10°,得到曲線如圖10(c)所示。
圖9 俯仰角的控制效果圖
圖10 偏航角的控制效果圖
綜合以上曲線可以看出,在單獨(dú)控制一個(gè)通道時(shí),基于DQN的控制律基本可以快速準(zhǔn)確地跟蹤上指令信號(hào)的改變。接著將三通道的控制量通過(guò)下式求出各槳葉所提供的拉力,從而達(dá)到控制四旋翼飛行器的目的。
(8)
其中:Ac為系數(shù)矩陣。
圖11為將各通道控制量經(jīng)過(guò)控制分配之后得到的四旋翼姿態(tài)控制效果圖。
圖11 四旋翼姿態(tài)角控制效果
實(shí)驗(yàn)中,將四旋翼三軸姿態(tài)角均初始化為0°,角度觀測(cè)量均加入[-0.1,0.1]上的隨機(jī)噪聲,通過(guò)在不同時(shí)刻給定四旋翼不同的指令信號(hào),使得四旋翼達(dá)到不同姿態(tài),最終效果如圖11所示。
從圖11中可以看出,控制器基本上可以使得四旋翼的姿態(tài)跟上指令信號(hào),但同時(shí)伴隨有一定的震蕩,還會(huì)有一定的誤差。這是因?yàn)镈QN中,動(dòng)作空間并不是連續(xù)的,在一些狀態(tài)下,智能體所需要選擇的最優(yōu)動(dòng)作并不存在于動(dòng)作空間中,這時(shí)智能體只能選擇動(dòng)作空間中最接近最優(yōu)動(dòng)作的動(dòng)作,這就造成了四旋翼姿態(tài)必然會(huì)伴隨有一定的震蕩和誤差。因此想要減小震蕩并消除誤差,這能增加動(dòng)作空間的維度,將動(dòng)作空間設(shè)置的更加稠密,這樣智能體選擇的動(dòng)作就會(huì)更加接近最優(yōu)值。
本文針對(duì)“X”型結(jié)構(gòu)的四旋翼非線性運(yùn)動(dòng)模型,提出基于無(wú)模型強(qiáng)化學(xué)習(xí)算法DQN的四旋翼姿態(tài)控制律設(shè)計(jì)[10]。首先對(duì)俯仰角、滾轉(zhuǎn)角以及偏航角分別進(jìn)行控制律設(shè)計(jì),當(dāng)三通道控制律達(dá)到控制要求之后,通過(guò)控制分配求出4個(gè)槳葉的拉力,進(jìn)而達(dá)到控制四旋翼姿態(tài)的目的。實(shí)驗(yàn)結(jié)果表明基于無(wú)模型強(qiáng)化學(xué)習(xí)的控制律能夠在不知道被控對(duì)象模型的情況下,控制四旋翼實(shí)時(shí)跟蹤上參考指令的變化。