基於強化學習的自主泊車Matlab例項
Matlab例項分享——基於強化學習的自主泊車
原文連結:Train PPO Agent for Automatic Parking Valet
↓↓↓↓↓↓↓↓↓↓↓↓————以下是正文————↓↓↓↓↓↓↓↓↓↓↓↓
如下圖所示,該示例演示了用於自動搜尋空位和執行停車操作的混合控制器的設計。混合控制器使用模型預測控制(MPC)跟隨停車場中的紫色環形參考路徑,找到空位時使用受過訓練的強化學習(RL)智慧體執行停車操作。
自動泊車場景
在此示例中,自動泊車演算法執行一系列操作,同時感應並避開狹窄空間中的障礙物。它在自適應MPC控制器和RL智慧體之間切換,以完成停車操作。 MPC控制器沿著參考路徑以恆定速度移動車輛,同時演算法搜尋空的停車位。找到地點後,RL代理接管並執行預先訓練的停車操作。控制器可以獲取有關環境(停車場)的先驗知識,包括空曠地點和停放的車輛的位置。
1 停車場地圖建立
停車場由ParkingLot類表示,該類儲存有關自我車輛,空停車位和靜態障礙物(已停泊的汽車)的資訊。每個停車位都有一個唯一的索引號和一個綠色(空閒)或紅色(已佔用)的指示燈。停放的車輛以黑色表示。建立一個在位置7有空閒點的ParkingLot物件。
freeSpotIdx = 7;%這個可以自己修改,1-64停車位
map = ParkingLot(freeSpotIdx);
指定自我車輛的初始姿勢。
在車輛駛入停車場時,根據第一個可用的空位確定目標姿態。
egoInitialPose = [20, 15, 0];
使用createTargetPose函式計算車輛的目標姿態。目標姿勢對應於freeSpotIdx中的位置。
egoTargetPose = createTargetPose(map,freeSpotIdx)
2 感測器模組
使用攝像頭和鐳射雷達感測器從環境中收集資訊。
2.1 相機
下圖中以綠色陰影表示的區域表示了安裝在自駕車上的攝像頭的視野。攝像機的視野範圍為,最大測量深度為10 m。
隨著自我車輛的前進,攝像頭模組會感應落在視場內的停車位,並確定該位是空位還是空位。
為簡單起見,此動作是使用地點位置和當前車輛姿態之間的幾何關係來實現的。如果di<=dmax並faimin<=fai_i<=faimax,則泊車位在攝像機範圍內,其中di是到泊車位的距離,並且fai是與泊車位的角度。
2.2 雷達
強化學習智慧體使用鐳射雷達感測器讀數來確定自我車輛與環境中其他車輛的接近程度。在該示例中,鐳射雷達感測器也使用幾何關係建模。鐳射雷達距離是沿著12條線段測量的,這些線段從自我車輛的中心放射狀出現。當鐳射雷達線與障礙物相交時,它將返回障礙物與車輛的距離。沿任何線段的最大可測鐳射雷達距離為6 m。
3 自動泊車系統建模
在Simulink®中建立了自動泊車模擬模型,包括控制器,車輛,感測器和停車場。
先載入停車場引數,並開啟simulink模型
autoParkingValetParams
mdl = ‘rlAutoParkingValet’;
open_system(mdl)
該模型中的自主車輛動力學由具有兩個輸入的單軌腳踏車模型表示:車速(m / s)和轉向角(弧度), 輸出車輛位置和姿態。
MPC和RL控制器放置在“啟用子系統”模組中,該模組由表示車輛是否必須搜尋空位或執行停車操作的訊號啟用。
啟用訊號由“車輛模式”子系統中的“攝像頭”演算法確定。
最初,車輛處於搜尋模式,MPC控制器跟蹤參考路徑。
當找到空位時,將啟用停車模式,並且RL代理執行停車動作。
4 自適應模型預測控制器
使用createMPCForParking指令碼建立用於參考軌跡跟蹤的自適應MPC控制器物件
createMPCForParking
5 建立強化學習訓練環境
訓練RL代理的環境是下圖中紅色陰影區域。
由於停車場中的對稱性,在對該區域進行適當的座標轉換後,對該區域內的培訓足以使該策略適應其他區域。
與在整個停車場上進行訓練相比,使用此較小的訓練區域可顯著減少訓練時間。
訓練區域是22。5 m x 20 m的空間,目標點位於其水平中心。
觀測值是相對於目標姿態的位置誤差以及自我車輛的位置誤差,真實航向角的正弦和餘弦以及鐳射雷達感測器的讀數。
停車期間的車速恆定為2 m / s。
動作訊號是離散的轉向角,以15度為步長在+/- 45度之間變化。
如果相對於目標姿態的誤差在+/- 0。75 m(位置)和+/- 10度(方向)的指定公差內,則認為車輛已停車。
如果自我車輛超出訓練區域的邊界,與障礙物碰撞或成功停車,則該情節終止。
獎勵函式為
當停車成功ft=1,當停車還未成功ft=0; 發生碰撞gt=1,無碰撞gt=0。
不同停車位位置的車輛姿態觀測值的座標轉換如下:
建立環境的觀察和操作規範。
numObservations = 16;
observationInfo = rlNumericSpec([numObservations 1]);
observationInfo。Name = ‘observations’;
steerMax = pi/4;
discreteSteerAngles = -steerMax : deg2rad(15) : steerMax;
actionInfo = rlFiniteSetSpec(num2cell(discreteSteerAngles));
actionInfo。Name = ‘actions’;
numActions = numel(actionInfo。Elements);
建立Simulink環境介面,並指定RL Agent塊的路徑。
blk = [mdl ‘/RL Controller/RL Agent’];
env = rlSimulinkEnv(mdl,blk,observationInfo,actionInfo);
定義用於訓練的重置功能:autoParkingValetResetFcn函式在每個情節開始時將自我車輛的初始姿勢重置為隨機值。
env。ResetFcn = @autoParkingValetResetFcn;
建立智慧體
在此示例中,RL智慧體是具有離散操作空間的近端策略最佳化(PPO)智慧體。
設定隨機種子生成器以提高可重複性。
rng(0)
要建立 critic representations,,首先建立一個具有16個輸入和一個輸出的深度神經網路。
critic network的輸出是特定觀察的狀態值函式。
criticNetwork = [
featureInputLayer(numObservations,‘Normalization’,‘none’,‘Name’,‘observations’)
fullyConnectedLayer(128,‘Name’,‘fc1’)
reluLayer(‘Name’,‘relu1’)
fullyConnectedLayer(128,‘Name’,‘fc2’)
reluLayer(‘Name’,‘relu2’)
fullyConnectedLayer(128,‘Name’,‘fc3’)
reluLayer(‘Name’,‘relu3’)
fullyConnectedLayer(1,‘Name’,‘fc4’)];
criticOptions = rlRepresentationOptions(‘LearnRate’,1e-3,‘GradientThreshold’,1);
critic = rlValueRepresentation(criticNetwork,observationInfo,。。。
‘Observation’,{‘observations’},criticOptions);
actorNetwork = [
featureInputLayer(numObservations,‘Normalization’,‘none’,‘Name’,‘observations’)
fullyConnectedLayer(128,‘Name’,‘fc1’)
reluLayer(‘Name’,‘relu1’)
fullyConnectedLayer(128,‘Name’,‘fc2’)
reluLayer(‘Name’,‘relu2’)
fullyConnectedLayer(numActions, ‘Name’, ‘out’)
softmaxLayer(‘Name’,‘actionProb’)];
為PPO代理建立隨機角色表示
actorOptions = rlRepresentationOptions(‘LearnRate’,2e-4,‘GradientThreshold’,1);
actor = rlStochasticActorRepresentation(actorNetwork,observationInfo,actionInfo,。。。
‘Observation’,{‘observations’},actorOptions);
指定代理選項並建立PPO代理。
agentOpts = rlPPOAgentOptions(。。。
‘SampleTime’,Ts,。。。
‘ExperienceHorizon’,200,。。。
‘ClipFactor’,0。2,。。。
‘EntropyLossWeight’,0。01,。。。
‘MiniBatchSize’,64,。。。
‘NumEpoch’,3,。。。
‘AdvantageEstimateMethod’,“gae”,。。。
‘GAEFactor’,0。95,。。。
‘DiscountFactor’,0。998);
agent = rlPPOAgent(actor,critic,agentOpts);
在訓練期間,代理會收集經驗,直到達到200步的經驗水平或情節終止,然後從64個經驗的小批中訓練三個時期。
客觀函式限幅因子0。2改善了訓練穩定性,折扣因子值0。998鼓勵了長期獎勵。
評論家的差異透過廣義優勢估計法以0。95的GAE係數降低了產量。
訓練
在此示例中,最多10000個情節,每個情節最多持續200個時間步長。
當達到最大情節數目或超過100個情節的平均獎勵超過100時,訓練終止。使用rlTrainingOptions物件指定訓練選項。
trainOpts = rlTrainingOptions(。。。
‘MaxEpisodes’,10000,。。。
‘MaxStepsPerEpisode’,200,。。。
‘ScoreAveragingWindowLength’,200,。。。
‘Plots’,‘training-progress’,。。。
‘StopTrainingCriteria’,‘AverageReward’,。。。
‘StopTrainingValue’,80);
使用訓練功能訓練代理。
培訓此代理是一個計算密集型過程,需要幾分鐘才能完成。
為了節省執行本示例的時間,請透過將doTraining設定為false來載入預訓練的代理。
要自己培訓代理,請將doTraining設定為true。
doTraining = false;
if doTraining
trainingStats = train(agent,env,trainOpts);
else
load(‘rlAutoParkingValetAgent。mat’,‘agent’);
end
應用RL進行模擬
設定空位在19處,並進行模擬
freeSpotIdx = 19; % free spot location
sim(mdl);
模擬結果動圖
前輪轉角控制量
個人評論
從轉角控制量可以看到效果並不是很好,主要是因為在進行強化學習訓練時,將控制量也就是RL的action前輪轉角進行了離散處理,15度為一個步長,這樣訓練花費的時間會比較小,實現性高,但是線上控制時會出現來回的震盪,所以該演算法並不適合實際控制,只是為強化學習在車輛控制領域裡應用提供了一種思路。
2020年12月31日23點58分,2021新年快樂