主要内容GydF4y2Ba

培训自动停车剂的PPO代理GydF4y2Ba

该示例演示了自动搜索和停车任务的混合控制器的设计。该混合控制器使用模型预测控制(MPC)跟踪停车场中的参考路径,并使用经过训练的强化学习(RL)代理执行停车操作。GydF4y2Ba

本示例中的自动停车算法执行一系列机动,同时感应和避免狭小空间中的障碍物。它在自适应MPC控制器和RL代理之间切换以完成停车操纵。MPC控制器沿着参考路径以恒定速度移动车辆,而算法搜索空停车位。当发现点时,RL代理接管并执行备用停车的操作。在控制器上可获得包括空斑和停放车辆的地点的环境(停车场)的先验知识。GydF4y2Ba

停车场GydF4y2Ba

停车场由此表示GydF4y2Ba停车场GydF4y2Ba类,它存储有关ego车辆、空停车位和静态障碍物(停放的车辆)的信息。每个停车位都有一个唯一的索引号和一个指示灯,指示灯为绿色(空闲)或红色(已占用)。停放的车辆以黑色表示。GydF4y2Ba

创建一个GydF4y2Ba停车场GydF4y2Ba物体在位置7处有一个自由点。GydF4y2Ba

freeSpotIdx=7;map=ParkingLot(freeSpotIdx);GydF4y2Ba

图自动驻车代客泊车包含一个轴对象。axes对象包含272个矩形、直线、文本和多边形类型的对象。GydF4y2Ba

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

egoInitialpose = [20,15,0];GydF4y2Ba

使用。计算飞行器的目标姿态GydF4y2BacreateTargetpose.GydF4y2Ba函数。目标姿势对应于位置GydF4y2Ba自由基GydF4y2Ba.GydF4y2Ba

freeSpotIdx egoTargetPose = createTargetPose(地图)GydF4y2Ba
自我目标姿态=GydF4y2Ba1×3GydF4y2Ba47.7500 4.9000 -1.5708GydF4y2Ba

传感器模块GydF4y2Ba

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

照相机GydF4y2Ba

安装在自我车辆上的摄像机的视野由下图中的区域中的区域表示。相机有一个视野GydF4y2Ba φGydF4y2Ba 有界的GydF4y2Ba ±GydF4y2Ba 60.GydF4y2Ba 度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

autoparkingvaletparams.GydF4y2Ba

打开Simulin金宝appk模型。GydF4y2Ba

mdl =GydF4y2Ba'rlautoparkingvalet'GydF4y2Ba;Open_System(MDL)GydF4y2Ba

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

自适应模型预测控制器GydF4y2Ba

创建用于使用该参考轨迹跟踪的Adaptive MPC控制器对象GydF4y2BacreateMPCForParkingGydF4y2Ba脚本。有关自适应MPC的更多信息,请参见GydF4y2Ba自适应MPCGydF4y2Ba(模型预测控制工具箱)GydF4y2Ba.GydF4y2Ba

createMPCForParkingGydF4y2Ba

强化学习环境GydF4y2Ba

用于训练RL代理的环境是在下图中以红色阴影的区域。由于停车场的对称性,在将适当的坐标转换应用于观察后,该地区内的训练足以适应其他地区。与整个停车场的训练相比,使用这种较小的训练区域显着减少了培训时间。GydF4y2Ba

对于这个环境:GydF4y2Ba

  • 训练区是22.5米×20米的空间,其水平中心处的目标斑点。GydF4y2Ba

  • 观察结果是位置误差GydF4y2Ba XGydF4y2Ba EGydF4y2Ba 和GydF4y2Ba YGydF4y2Ba EGydF4y2Ba 自我车辆相对于目标姿势,正弦和余弦的真实标题角度GydF4y2Ba θGydF4y2Ba 和激光雷达传感器读数。GydF4y2Ba

  • 停车时的车速为恒定的2 m/s。GydF4y2Ba

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

  • 如果目标姿态的误差在+/-0.75 m(位置)和+/-10度(方向)的规定公差范围内,则认为车辆已停放。GydF4y2Ba

  • 如果ego车辆超出训练区域的边界、与障碍物碰撞或成功停车,则该事件终止。GydF4y2Ba

  • 奖赏GydF4y2Ba RGydF4y2Ba TGydF4y2Ba 随时提供GydF4y2BaTGydF4y2Ba,是:GydF4y2Ba

RGydF4y2Ba TGydF4y2Ba =GydF4y2Ba 2.GydF4y2Ba EGydF4y2Ba -GydF4y2Ba (GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 05.GydF4y2Ba XGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba +GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 04.GydF4y2Ba YGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba )GydF4y2Ba +GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 5.GydF4y2Ba EGydF4y2Ba -GydF4y2Ba 40GydF4y2Ba θGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba -GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 05.GydF4y2Ba δGydF4y2Ba 2.GydF4y2Ba +GydF4y2Ba 100.GydF4y2Ba FGydF4y2Ba TGydF4y2Ba -GydF4y2Ba 50.GydF4y2Ba GGydF4y2Ba TGydF4y2Ba

这里,GydF4y2Ba XGydF4y2Ba EGydF4y2Ba ,GydF4y2Ba YGydF4y2Ba EGydF4y2Ba , 和GydF4y2Ba θGydF4y2Ba EGydF4y2Ba 是ego车辆相对于目标姿态的位置和航向角误差,以及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 2.GydF4y2Ba

  • 23-36:GydF4y2Ba XGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 100.GydF4y2Ba -GydF4y2Ba XGydF4y2Ba ,GydF4y2Ba YGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 60.GydF4y2Ba -GydF4y2Ba YGydF4y2Ba ,GydF4y2Ba θGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba θGydF4y2Ba -GydF4y2Ba πGydF4y2Ba

  • 37-40:GydF4y2Ba XGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 60.GydF4y2Ba -GydF4y2Ba YGydF4y2Ba ,GydF4y2Ba YGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba XGydF4y2Ba ,GydF4y2Ba θGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba θGydF4y2Ba -GydF4y2Ba 3.GydF4y2Ba πGydF4y2Ba /GydF4y2Ba 2.GydF4y2Ba

  • 41-52:GydF4y2Ba XGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 100.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 28.GydF4y2Ba ,GydF4y2Ba θGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba θGydF4y2Ba

为环境创建观察和动作规范。GydF4y2Ba

numObservations=16;observationInfo=rlNumericSpec([numObservations 1]);observationInfo.Name=GydF4y2Ba'观察'GydF4y2Ba;steerMax=pi/4;DiscretesteRanges=-steerMax:deg2rad(15):steerMax;actionInfo=rlFiniteSetSpec(num2单元(DiscretesteRanges));actionInfo.Name=GydF4y2Ba“行动”GydF4y2Ba;数量= numel(ActionInfo.Elements);GydF4y2Ba

创建Simulink环金宝app境界面,指定RL代理程序块的路径。GydF4y2Ba

黑色= [mdlGydF4y2Ba'/ RL控制器/ RL代理'GydF4y2Ba];env = rl金宝appSimulinkEnv (mdl,黑色,observationInfo actionInfo);GydF4y2Ba

指定一个用于训练的重置函数。的GydF4y2Baautoparkingvaletresetfcn.GydF4y2Ba功能将自我车辆的初始姿势重置为每一集开始时的随机值。GydF4y2Ba

env.ResetFcn=@automarkingvaletresetfcn;GydF4y2Ba

有关创建Simulink环境的详细信息,请参见金宝appGydF4y2Barl金宝appSimulinkEnvGydF4y2Ba.GydF4y2Ba

创建代理GydF4y2Ba

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

设置随机种子发生器以进行再现性。GydF4y2Ba

RNG(0)GydF4y2Ba

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

批评= [featureInputLayer(numobservations,GydF4y2Ba“归一化”GydF4y2Ba,GydF4y2Ba“没有”GydF4y2Ba,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'观察'GydF4y2Ba)完全连接层(128,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc1'GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“relu1”GydF4y2Ba)完全连接层(128,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc2'GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'relu2'GydF4y2Ba)完全连接层(128,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc3'GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'relu3'GydF4y2Ba)全康连接层(1,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc4'GydF4y2Ba)];GydF4y2Ba

为PPO代理商创建批评者。有关更多信息,请参阅GydF4y2BarlvalueerepresentationGydF4y2Ba和GydF4y2BarlRepresentationOptionsGydF4y2Ba.GydF4y2Ba

QuandOptions = rlrepresentationOptions(GydF4y2Ba“LearnRate”GydF4y2Ba,1e-3,GydF4y2Ba“梯度阈值”GydF4y2Ba,1);评论家= rlvaluerepresentation(批评,观察invo,GydF4y2Ba......GydF4y2Ba'观察'GydF4y2Ba,{GydF4y2Ba'观察'GydF4y2Ba}, criticOptions);GydF4y2Ba

actor网络的输出是当车辆处于某个状态时采取每个可能的转向动作的概率。创建演员深神经网络。GydF4y2Ba

actorNetwork = [featureInputLayer(numobobservations,GydF4y2Ba“归一化”GydF4y2Ba,GydF4y2Ba“没有”GydF4y2Ba,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'观察'GydF4y2Ba)完全连接层(128,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc1'GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“relu1”GydF4y2Ba)完全连接层(128,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'fc2'GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'relu2'GydF4y2Ba) fullyConnectedLayer (numActionsGydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“出去”GydF4y2Ba)软MaxLayer(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'actionprob'GydF4y2Ba)];GydF4y2Ba

为PPO代理创建随机参与者表示。有关详细信息,请参阅GydF4y2BarlStochasticActorRepresentationGydF4y2Ba.GydF4y2Ba

ACTOROPTIONS = RLREPRESENTATIONOPTIONS(GydF4y2Ba“LearnRate”GydF4y2Ba,2e-4,GydF4y2Ba“梯度阈值”GydF4y2Ba,1);Actor = rlstochasticRorrepresentation(Actornetwork,观察Info,ActionInfo,GydF4y2Ba......GydF4y2Ba'观察'GydF4y2Ba,{GydF4y2Ba'观察'GydF4y2Ba}, actorOptions);GydF4y2Ba

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

代理= rlppoagentoptions(GydF4y2Ba......GydF4y2Ba“SampleTime”GydF4y2Ba,ts,GydF4y2Ba......GydF4y2Ba“ExperienceHorizon”GydF4y2Ba,200,GydF4y2Ba......GydF4y2Ba“ClipFactor”GydF4y2Ba,0.2,GydF4y2Ba......GydF4y2Ba“无熵重量”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“折扣演员”GydF4y2Ba,0.998); 代理=rlPPOAgent(演员、评论家、代理);GydF4y2Ba

在培训过程中,代理收集经验,直到达到200步的经验范围或情节结束,然后在三个时期内从64个经验的小批量中进行培训。目标函数剪辑因子为0.2可提高培训稳定性,贴现因子值为0.998可鼓励长期奖励。批评家t通过GAE系数为0.95的广义优势估计方法降低产量。GydF4y2Ba

列车员GydF4y2Ba

在本例中,您最多为代理培训10000集,每集最多持续200个时间步。当达到最大集数或超过100集的平均奖励超过100时,培训将终止。GydF4y2Ba

指定使用GydF4y2BaRL培训选项GydF4y2Ba目的。GydF4y2Ba

培训选项=RL培训选项(GydF4y2Ba......GydF4y2Ba“MaxEpisodes”GydF4y2Ba,10000,GydF4y2Ba......GydF4y2Ba“MaxStepsPerEpisode”GydF4y2Ba,200,GydF4y2Ba......GydF4y2Ba“ScoreAveragingWindowLength”GydF4y2Ba,200,GydF4y2Ba......GydF4y2Ba“情节”GydF4y2Ba,GydF4y2Ba'培训 - 进步'GydF4y2Ba,GydF4y2Ba......GydF4y2Ba“停止培训标准”GydF4y2Ba,GydF4y2Ba“AverageReward”GydF4y2Ba,GydF4y2Ba......GydF4y2Ba'stoptriningvalue'GydF4y2Ba,80);GydF4y2Ba

训练代理人使用GydF4y2Ba火车GydF4y2Ba函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理GydF4y2Ba溺爱GydF4y2Ba到GydF4y2Ba错误的GydF4y2Ba.训练代理人,套装GydF4y2Ba溺爱GydF4y2Ba到GydF4y2Ba真的GydF4y2Ba.GydF4y2Ba

dotraining = false;GydF4y2Ba如果GydF4y2BadoTraining trainingStats=列车(代理人、环境、列车员);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 m(位置)和+/-10度(方向)的规定误差公差范围内达到目标姿态。GydF4y2Ba

要查看自我车辆位置和方向,打开自我车辆姿势范围。GydF4y2Ba

另见GydF4y2Ba

相关话题GydF4y2Ba