主要内容gydF4y2Ba

培训自动代客泊车的PPO代理gydF4y2Ba

这个例子演示了一个用于自动搜索和停车任务的混合控制器的设计。该混合控制器使用模型预测控制(MPC)在停车场中遵循参考路径,并使用训练过的强化学习(RL)代理执行停车机动。gydF4y2Ba

在这个例子中,自动停车算法执行了一系列的机动,同时在狭窄的空间中感知和避开障碍物。它在自适应MPC控制器和RL代理之间切换来完成停车机动。MPC控制器沿参考路径以恒定速度移动车辆,同时算法搜索空车位。当一个停车位被发现,RL代理接管并执行一个预先训练的停车机动。控制器可以事先了解环境(停车场),包括空车点和停放车辆的位置。gydF4y2Ba

停车场gydF4y2Ba

停车场代表的是gydF4y2Ba停车场gydF4y2Ba类,它存储关于ego车辆、空停车位和静态障碍物(停放的汽车)的信息。每个停车位都有一个独特的索引号和一个指示灯,绿色(空闲)或红色(占用)。停放的车辆用黑色表示。gydF4y2Ba

创建一个gydF4y2Ba停车场gydF4y2Ba目标在7号位置有一个空闲点。gydF4y2Ba

freeSpotIdx = 7;地图=停车场(freeSpotIdx);gydF4y2Ba

图Auto Parking Valet包含一个轴对象。axis对象包含272个类型为矩形、直线、文本、多边形的对象。gydF4y2Ba

指定初始姿态gydF4y2Ba (gydF4y2Ba XgydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba YgydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba θgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba 为了自我的载体。当车辆在停车场中导航时,目标姿态是基于第一个可用的空闲位置确定的。gydF4y2Ba

egoInitialPose = [20, 15, 0];gydF4y2Ba

使用。计算飞行器的目标姿态gydF4y2BacreateTargetPosegydF4y2Ba函数。目标位姿对应的位置gydF4y2BafreeSpotIdxgydF4y2Ba.gydF4y2Ba

freeSpotIdx egoTargetPose = createTargetPose(地图)gydF4y2Ba
egoTargetPose =gydF4y2Ba1×3gydF4y2Ba47.7500 4.9000 -1.5708gydF4y2Ba

传感器模块gydF4y2Ba

停车算法使用摄像头和激光雷达传感器从环境中收集信息。gydF4y2Ba

相机gydF4y2Ba

安装在ego车上的摄像机的视场由下图中绿色阴影区域表示。照相机有一个视场gydF4y2Ba φgydF4y2Ba 有界的gydF4y2Ba ±gydF4y2Ba 60gydF4y2Ba 度gydF4y2Ba 以及最大测量深度gydF4y2Ba dgydF4y2Ba 马克斯gydF4y2Ba 10米。gydF4y2Ba

当自我车辆向前移动时,摄像头模块感知视野范围内的停车点,并决定一个停车位是空闲的还是被占用的。为了简单起见,这个动作是使用点位置和当前车辆姿态之间的几何关系来实现的。停车位在摄像头范围内,如果gydF4y2Ba dgydF4y2Ba 我gydF4y2Ba ≤gydF4y2Ba dgydF4y2Ba 马克斯gydF4y2Ba 和gydF4y2Ba φgydF4y2Ba 最小值gydF4y2Ba ≤gydF4y2Ba φgydF4y2Ba 我gydF4y2Ba ≤gydF4y2Ba φgydF4y2Ba 马克斯gydF4y2Ba ,在那里gydF4y2Ba dgydF4y2Ba 我gydF4y2Ba 到停车位的距离是多少gydF4y2Ba φgydF4y2Ba 我gydF4y2Ba 是到停车位的角度。gydF4y2Ba

激光雷达gydF4y2Ba

强化学习代理使用激光雷达传感器读数来确定ego车辆与环境中其他车辆的接近程度。本例中的激光雷达传感器也使用几何关系建模。激光雷达距离是沿着从自我飞行器中心放射状出现的12条线段测量的。当激光雷达线与障碍物相交时,它返回障碍物与车辆的距离。沿任何线段的最大可测激光雷达距离为6米。gydF4y2Ba

自动泊车代客模式gydF4y2Ba

泊车代客模型,包括控制器、ego车辆、传感器和停车场,是在Simulink®中实现的。金宝appgydF4y2Ba

加载自动泊车代客参数。gydF4y2Ba

autoParkingValetParamsgydF4y2Ba

打开Simulin金宝appk模型。gydF4y2Ba

mdl =gydF4y2Ba“rlAutoParkingValet”gydF4y2Ba;open_system (mdl)gydF4y2Ba

该模型中的自我车辆动力学由一个单车道自行车模型来表示,该模型包含两个输入:车辆速度gydF4y2Ba vgydF4y2Ba (m/s)和转向角gydF4y2Ba δgydF4y2Ba (弧度)。MPC和RL控制器被放置在启用子系统模块中,这些模块由信号激活,这些信号表示车辆是否需要搜索空车位或执行停车机动。使能信号由车辆模式子系统中的Camera算法决定。一开始,飞行器在里面gydF4y2Ba搜索gydF4y2Ba模式和MPC控制器跟踪参考路径。当找到一个空位时,gydF4y2Ba公园gydF4y2Bamode被激活时,RL agent执行停车动作。gydF4y2Ba

自适应模型预测控制器gydF4y2Ba

为参考轨迹跟踪创建自适应MPC控制器对象gydF4y2BacreateMPCForParkinggydF4y2Ba脚本。有关自适应MPC的更多信息,请参见gydF4y2Ba自适应政策委员会gydF4y2Ba(模型预测控制工具箱)gydF4y2Ba.gydF4y2Ba

createMPCForParkinggydF4y2Ba

强化学习环境gydF4y2Ba

RL agent的训练环境为下图中红色阴影区域。由于停车场的对称性,在对观测数据进行适当的坐标变换后,该区域内的训练足以使政策调整到其他区域。与整个停车场的培训相比,使用这个更小的培训区域显著减少了培训时间。gydF4y2Ba

对于这个环境:gydF4y2Ba

  • 训练区域是一个22.5米× 20米的空间,目标点位于其水平中心。gydF4y2Ba

  • 观测结果就是位置误差gydF4y2Ba XgydF4y2Ba egydF4y2Ba 和gydF4y2Ba YgydF4y2Ba egydF4y2Ba 自我飞行器相对于目标姿态,真实航向角的正弦和余弦gydF4y2Ba θgydF4y2Ba ,以及激光雷达传感器读数。gydF4y2Ba

  • 车辆在停车时的速度是恒定的2米/秒。gydF4y2Ba

  • 动作信号是离散的转向角度,范围在+/- 45度之间的步骤,15度。gydF4y2Ba

  • 如果相对于目标位姿的误差在+/- 0.75米(位置)和+/-10度(方向)的指定公差范围内,则认为车辆已停好。gydF4y2Ba

  • 如果自负的车辆超出了训练区域的界限,与障碍物相撞,或者成功地停车,这一集就结束了。gydF4y2Ba

  • 奖励gydF4y2Ba rgydF4y2Ba tgydF4y2Ba 提供的时间gydF4y2BatgydF4y2Ba是:gydF4y2Ba

rgydF4y2Ba tgydF4y2Ba =gydF4y2Ba 2gydF4y2Ba egydF4y2Ba -gydF4y2Ba (gydF4y2Ba 0gydF4y2Ba .gydF4y2Ba 05gydF4y2Ba XgydF4y2Ba egydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 0gydF4y2Ba .gydF4y2Ba 04gydF4y2Ba YgydF4y2Ba egydF4y2Ba 2gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 0gydF4y2Ba .gydF4y2Ba 5gydF4y2Ba egydF4y2Ba -gydF4y2Ba 40gydF4y2Ba θgydF4y2Ba egydF4y2Ba 2gydF4y2Ba -gydF4y2Ba 0gydF4y2Ba .gydF4y2Ba 05gydF4y2Ba δgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba One hundred.gydF4y2Ba fgydF4y2Ba tgydF4y2Ba -gydF4y2Ba 50gydF4y2Ba ggydF4y2Ba tgydF4y2Ba

在这里,gydF4y2Ba XgydF4y2Ba egydF4y2Ba ,gydF4y2Ba YgydF4y2Ba egydF4y2Ba ,gydF4y2Ba θgydF4y2Ba egydF4y2Ba 自我飞行器的位置和航向角与目标姿态有偏差吗gydF4y2Ba δgydF4y2Ba 是转向角度。gydF4y2Ba fgydF4y2Ba tgydF4y2Ba (0或1)表示车辆是否已停车gydF4y2Ba ggydF4y2Ba tgydF4y2Ba (0或1)表示车辆是否在同一时间与障碍物相撞gydF4y2Ba tgydF4y2Ba .gydF4y2Ba

车辆姿态的坐标变换gydF4y2Ba (gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ,gydF4y2Ba θgydF4y2Ba )gydF4y2Ba 对不同停车位位置的观察如下:gydF4y2Ba

  • 1 - 14:不转换gydF4y2Ba

  • 第15 - 22:gydF4y2Ba XgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba YgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba -gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba θgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba θgydF4y2Ba -gydF4y2Ba πgydF4y2Ba /gydF4y2Ba 2gydF4y2Ba

  • 23-36:gydF4y2Ba XgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba One hundred.gydF4y2Ba -gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba 60gydF4y2Ba -gydF4y2Ba YgydF4y2Ba ,gydF4y2Ba θgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba θgydF4y2Ba -gydF4y2Ba πgydF4y2Ba

  • 37-40:gydF4y2Ba XgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba 60gydF4y2Ba -gydF4y2Ba YgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba θgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba θgydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba πgydF4y2Ba /gydF4y2Ba 2gydF4y2Ba

  • 41-52:gydF4y2Ba XgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba One hundred.gydF4y2Ba -gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba 30.gydF4y2Ba -gydF4y2Ba YgydF4y2Ba ,gydF4y2Ba θgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba θgydF4y2Ba +gydF4y2Ba πgydF4y2Ba

  • 53 - 64:gydF4y2Ba XgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba XgydF4y2Ba ,gydF4y2Ba YgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba YgydF4y2Ba -gydF4y2Ba 28gydF4y2Ba ,gydF4y2Ba θgydF4y2Ba ‾gydF4y2Ba =gydF4y2Ba θgydF4y2Ba

创建环境的观察和行动规范。gydF4y2Ba

numObservations = 16;observationInfo = rlNumericSpec([numObservations 1]); / /注意observationInfo。Name =gydF4y2Ba“观察”gydF4y2Ba;steerMax =π/ 4;disstetesteerangles = -steerMax: deg2rad(15): steerMax;actionInfo = rlFiniteSetSpec (num2cell (discreteSteerAngles));actionInfo。Name =gydF4y2Ba“行动”gydF4y2Ba;numActions =元素个数(actionInfo.Elements);gydF4y2Ba

创建Simulink环金宝app境接口,指定RL Agent块的路径。gydF4y2Ba

黑色= [mdlgydF4y2Ba“/ RL控制器/ RL代理”gydF4y2Ba];env = rl金宝appSimulinkEnv (mdl,黑色,observationInfo actionInfo);gydF4y2Ba

指定一个用于训练的重置函数。的gydF4y2BaautoParkingValetResetFcngydF4y2Ba函数在每一集开始时将自我载体的初始姿态重置为随机值。gydF4y2Ba

env。ResetFcn = @autoParkingValetResetFcn;gydF4y2Ba

有关创建Simulink环境的更多信息,请参见金宝appgydF4y2Barl金宝appSimulinkEnvgydF4y2Ba.gydF4y2Ba

创建代理gydF4y2Ba

本例中的RL代理是具有离散动作空间的近端策略优化(PPO)代理。PPO代理依靠演员和评论家代表来学习最优策略。agent为演员和评论家维护基于深度神经网络的函数近似器。要了解有关PPO代理的更多信息,请参见gydF4y2Ba近端政策优化代理gydF4y2Ba.gydF4y2Ba

为重现性设置随机种子生成器。gydF4y2Ba

rng (0)gydF4y2Ba

要创建批评表示,首先创建一个有16个输入和1个输出的深度神经网络。评价网络的输出是一个特定观测的状态值函数。gydF4y2Ba

criticNetwork = [featureInputLayer(numobobservations,gydF4y2Ba“归一化”gydF4y2Ba,gydF4y2Ba“没有”gydF4y2Ba,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“观察”gydF4y2Ba) fullyConnectedLayer (128,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“fc1”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu1”gydF4y2Ba) fullyConnectedLayer (128,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“取得”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu2”gydF4y2Ba) fullyConnectedLayer (128,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“一个fc3”文件gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu3”gydF4y2Ba) fullyConnectedLayer (1,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“fc4”gydF4y2Ba));gydF4y2Ba

为PPO代理创建批评家。有关更多信息,请参见gydF4y2BarlValueRepresentationgydF4y2Ba和gydF4y2BarlRepresentationOptionsgydF4y2Ba.gydF4y2Ba

criticOptions = rlRepresentationOptions (gydF4y2Ba“LearnRate”gydF4y2Ba1 e - 3,gydF4y2Ba“GradientThreshold”gydF4y2Ba1);评论家= rlValueRepresentation (criticNetwork observationInfo,gydF4y2Ba...gydF4y2Ba“观察”gydF4y2Ba,{gydF4y2Ba“观察”gydF4y2Ba}, criticOptions);gydF4y2Ba

行动者网络的输出是车辆处于某一状态时采取每种可能转向动作的概率。创建参与者深度神经网络。gydF4y2Ba

actorNetwork = [featureInputLayer(numobobservations,gydF4y2Ba“归一化”gydF4y2Ba,gydF4y2Ba“没有”gydF4y2Ba,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“观察”gydF4y2Ba) fullyConnectedLayer (128,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“fc1”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu1”gydF4y2Ba) fullyConnectedLayer (128,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“取得”gydF4y2Ba) reluLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“relu2”gydF4y2Ba) fullyConnectedLayer (numActionsgydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“出”gydF4y2Ba) softmaxLayer (gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“actionProb”gydF4y2Ba));gydF4y2Ba

为PPO代理创建一个随机参与者表示。有关更多信息,请参见gydF4y2BarlStochasticActorRepresentationgydF4y2Ba.gydF4y2Ba

actorOptions = rlRepresentationOptions (gydF4y2Ba“LearnRate”gydF4y2Ba2的军医,gydF4y2Ba“GradientThreshold”gydF4y2Ba1);演员= rlStochasticActorRepresentation (actorNetwork observationInfo actionInfo,gydF4y2Ba...gydF4y2Ba“观察”gydF4y2Ba,{gydF4y2Ba“观察”gydF4y2Ba}, actorOptions);gydF4y2Ba

指定代理选项并创建PPO代理。有关PPO代理选项的更多信息,请参见gydF4y2BarlPPOAgentOptionsgydF4y2Ba.gydF4y2Ba

agentOpts = rlPPOAgentOptions (gydF4y2Ba...gydF4y2Ba“SampleTime”gydF4y2BaTs,gydF4y2Ba...gydF4y2Ba“ExperienceHorizon”gydF4y2Ba, 200,gydF4y2Ba...gydF4y2Ba“ClipFactor”gydF4y2Ba, 0.2,gydF4y2Ba...gydF4y2Ba“EntropyLossWeight”gydF4y2Ba, 0.01,gydF4y2Ba...gydF4y2Ba“MiniBatchSize”gydF4y2Ba, 64,gydF4y2Ba...gydF4y2Ba“NumEpoch”gydF4y2Ba3,gydF4y2Ba...gydF4y2Ba“AdvantageEstimateMethod”gydF4y2Ba,gydF4y2Ba“gae”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“GAEFactor”gydF4y2Ba, 0.95,gydF4y2Ba...gydF4y2Ba“DiscountFactor”gydF4y2Ba, 0.998);代理= rlPPOAgent(演员、评论家、agentOpts);gydF4y2Ba

在训练过程中,agent收集经验,直到达到200步的经验视界或事件结束,然后从64个经验小批量进行三个阶段的训练。目标函数剪辑系数为0.2可提高训练稳定性,折扣系数为0.998可鼓励长期奖励。用GAE因子为0.95的广义优势估计方法减少了评价输出中的方差。gydF4y2Ba

火车代理gydF4y2Ba

对于本例,您对代理进行最多10000集的训练,每集最多持续200个时间步骤。当达到最大集数或平均奖励超过100集时,训练结束。gydF4y2Ba

指定用于培训的选项gydF4y2BarlTrainingOptionsgydF4y2Ba对象。gydF4y2Ba

trainOpts = rlTrainingOptions (gydF4y2Ba...gydF4y2Ba“MaxEpisodes”gydF4y2Ba, 10000,gydF4y2Ba...gydF4y2Ba“MaxStepsPerEpisode”gydF4y2Ba, 200,gydF4y2Ba...gydF4y2Ba“ScoreAveragingWindowLength”gydF4y2Ba, 200,gydF4y2Ba...gydF4y2Ba“阴谋”gydF4y2Ba,gydF4y2Ba“训练进步”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“StopTrainingCriteria”gydF4y2Ba,gydF4y2Ba“AverageReward”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“StopTrainingValue”gydF4y2Ba, 80);gydF4y2Ba

训练代理人使用gydF4y2Ba火车gydF4y2Ba函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理gydF4y2BadoTraininggydF4y2Ba来gydF4y2Ba假gydF4y2Ba.自己训练代理人,设置gydF4y2BadoTraininggydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

doTraining = false;gydF4y2Ba如果gydF4y2BadoTraining trainingStats = train(agent,env,trainOpts);gydF4y2Ba其他的gydF4y2Ba负载(gydF4y2Ba“rlAutoParkingValetAgent.mat”gydF4y2Ba,gydF4y2Ba“代理”gydF4y2Ba);gydF4y2Ba结束gydF4y2Ba

模拟剂gydF4y2Ba

仿真该模型,将车辆停放在自由车位上。为了模拟车辆在不同的位置停车,在下面的代码中更改空闲位置。gydF4y2Ba

freeSpotIdx = 7;gydF4y2Ba%空闲点位置gydF4y2Basim (mdl);gydF4y2Ba

图Auto Parking Valet包含一个轴对象。axis对象包含296个类型为矩形、直线、文本、多边形的对象。gydF4y2Ba

车辆达到目标位姿在指定的误差公差+/- 0.75米(位置)和+/-10度(方向)。gydF4y2Ba

要查看自我车辆的位置和方向,请打开自我车辆姿态范围。gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba