基於Actor-Critic(A2C)強化學習的四旋翼無人機飛行控制系統matlab模擬

我爱C编程發表於2024-11-07

1.演算法模擬效果

matlab2022a模擬結果如下(完整程式碼執行後無水印):

模擬操作步驟可參考程式配套的操作影片。

2.演算法涉及理論知識概要

基於Actor-Critic強化學習的四旋翼無人機飛行控制系統是一種利用強化學習技術實現飛行器自主控制的方法。該方法透過構建Actor(策略網路)和Critic(價值網路)兩個元件來學習最優控制策略。四旋翼無人機因其靈活性和廣泛應用前景成為研究熱點。傳統的控制方法依賴於精確的數學建模和控制律設計,但在複雜和不確定環境下表現有限。

2.1 強化學習基礎

強化學習的核心是馬爾科夫決策過程(Markov Decision Process, MDP)。MDP由狀態空間 S、動作空間A、轉移機率P、即時獎勵函式R 和折扣因子γ 構成。

策略 π:定義了智慧體在給定狀態下選擇動作的機率分佈。

價值函式:用於評估策略的好壞,主要包括狀態價值函式Vπ(s) 和動作價值函式Qπ(s,a)。

2.2 Actor-Critic

Actor-Critic方法結合了策略梯度(Policy Gradient)和價值函式(Value Function)兩種方法的優點,透過兩個網路協同工作來最佳化策略。

2.3 四旋翼無人機飛行控制

四旋翼無人機的控制問題可以視為一個MDP,其中:

狀態空間S 包括無人機的位置、速度、加速度、姿態等資訊。

動作空間A 包括四個電機的推力輸出。

即時獎勵函式R 可以根據任務需求設計,如接近目標位置、保持姿態穩定等。

狀態向量s 可以表示為:

動作向量a 可以表示為四個電機的推力輸出:

基於Actor-Critic強化學習的四旋翼無人機飛行控制系統透過智慧體與環境的互動學習最優控制策略,適用於多種複雜的飛行任務。隨著演算法的不斷最佳化和完善,這種方法將在未來的無人系統開發中發揮更加重要的作用。

3.MATLAB核心程式

% 載入已訓練好的代理
load trained\ac.mat
 
opts = rlSimulationOptions('MaxSteps',(Time2-Time1)/dt);% 設定最大步驟數
 
Rwd_all = zeros(Sim_times,1);% 初始化總獎勵陣列
Steps_all = zeros(Sim_times,1);% 初始化步數陣列
for i = 1:Sim_times% 對於每次模擬
    Exp_learn = sim(Environment,agent,opts);% 執行模擬並獲取經驗
    Rwd_all(i) = sum(Exp_learn.Reward);% 計算並儲存總獎勵
end
 
 
 
figure;
plot(Rwd_all,'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.4,0.9,0.4]);
xlabel('模擬次數');
ylabel('獎勵值');
ylim([200,300]) 
 
 
 
% 提取模擬中的位置資料
Xs   = Exp_learn.Observation.Quad.Data(1,:);% 獲取X方向位移
Ys   = Exp_learn.Observation.Quad.Data(2,:);% 獲取Y方向位移
Zs   = Exp_learn.Observation.Quad.Data(3,:);% 獲取Z方向位移
 
 
dist = sqrt((Xs).^2 + (Ys).^2 + (Zs).^2);
 
figure
subplot(1,2,1)
plot3(Xs,Ys,Zs,'-b',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
grid on
xlabel('X')
ylabel('Y')
zlabel('Z')
title('無人機三維飛行軌跡');
 
 
 
subplot(1,2,2)
plot(dist)
xlabel('Time (s)')
ylabel('距離')
0Z_009m
 

  

相關文章