主要内容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 对于ego车辆。目标姿势根据车辆在停车场导航时的第一个可用自由点确定。GydF4y2Ba

egoInitialPose=[20,15,0];GydF4y2Ba

使用GydF4y2Ba创建目标姿势GydF4y2Ba功能。目标姿势对应于中的位置GydF4y2Ba自由基GydF4y2Ba.GydF4y2Ba

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

传感器模块GydF4y2Ba

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

照相机GydF4y2Ba

安装在ego车辆上的摄像头的视野由下图中绿色阴影区域表示。摄像头有一个视野GydF4y2Ba φGydF4y2Ba 以GydF4y2Ba ±GydF4y2Ba 60GydF4y2Ba 度GydF4y2Ba 和最大测量深度GydF4y2Ba DGydF4y2Ba 最大值GydF4y2Ba 10米。GydF4y2Ba

当ego车辆向前移动时,摄像头模块感测视野内的停车点,并确定停车点是否空闲或有人占用。为简单起见,此操作使用停车点位置和当前车辆姿势之间的几何关系来实现。如果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条直线段测量,该直线段从ego车辆中心径向伸出。当激光雷达直线与障碍物相交时,返回障碍物与车辆的距离。沿任何线段的最大可测量激光雷达距离为6 m。GydF4y2Ba

自动泊车代客泊车模式GydF4y2Ba

泊车代客泊车模型,包括控制器、ego车辆、传感器和停车场,在Simulink®中实现。万博1manbetxGydF4y2Ba

加载自动驻车代客泊车参数。GydF4y2Ba

自动标售增值图GydF4y2Ba

打开Simulin万博1manbetxk模型。GydF4y2Ba

mdl=GydF4y2Ba“自动销售代客泊车”GydF4y2Ba; 开放式系统(mdl)GydF4y2Ba

该模型中的ego车辆动力学由带有两个输入的单轨自行车模型表示:车速GydF4y2Ba vGydF4y2Ba (m/s)和转向角GydF4y2Ba δGydF4y2Ba (弧度)。MPC和RL控制器位于启用的子系统块内,该子系统块由表示车辆是否必须搜索空位或执行停车操作的信号激活。启用信号由车辆模式子系统内的摄像头算法确定。最初,车辆处于GydF4y2Ba搜索GydF4y2Ba模式,MPC控制器跟踪参考路径。当找到一个空闲点时,GydF4y2Ba公园GydF4y2Ba模式被激活,RL代理执行驻车操纵。GydF4y2Ba

自适应模型预测控制器GydF4y2Ba

使用创建用于参考轨迹跟踪的自适应MPC控制器对象GydF4y2Ba创建MPC标记GydF4y2Ba剧本有关自适应MPC的详细信息,请参阅GydF4y2Ba自适应MPCGydF4y2Ba(模型预测控制工具箱)GydF4y2Ba.GydF4y2Ba

创建MPC标记GydF4y2Ba

强化学习环境GydF4y2Ba

培训RL代理的环境为下图中红色阴影区域。由于停车场的对称性,该区域内的培训足以使策略在对观测值应用适当的坐标变换后调整到其他区域。使用该较小的培训区域可显著降低tr与整个停车场的培训相比,培训时间更长。GydF4y2Ba

对于这种环境:GydF4y2Ba

  • 训练区域为22.5 m x 20 m的空间,目标点位于其水平中心。GydF4y2Ba

  • 观测值是位置误差GydF4y2Ba XGydF4y2Ba EGydF4y2Ba 和GydF4y2Ba YGydF4y2Ba EGydF4y2Ba 相对于目标姿态,ego车辆的真实航向角的正弦和余弦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 05GydF4y2Ba XGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba +GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 04GydF4y2Ba YGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba )GydF4y2Ba +GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 5.GydF4y2Ba EGydF4y2Ba -GydF4y2Ba 40GydF4y2Ba θGydF4y2Ba EGydF4y2Ba 2.GydF4y2Ba -GydF4y2Ba 0GydF4y2Ba .GydF4y2Ba 05GydF4y2Ba δGydF4y2Ba 2.GydF4y2Ba +GydF4y2Ba 100GydF4y2Ba FGydF4y2Ba TGydF4y2Ba -GydF4y2Ba 50GydF4y2Ba 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 100GydF4y2Ba -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 2.GydF4y2Ba

  • 41-52:GydF4y2Ba XGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 100GydF4y2Ba -GydF4y2Ba XGydF4y2Ba ,GydF4y2Ba YGydF4y2Ba ‾GydF4y2Ba =GydF4y2Ba 30GydF4y2Ba -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=pi/4;DiscretesteRanges=-steerMax:deg2rad(15):steerMax;actionInfo=rlFiniteSetSpec(num2单元(DiscretesteRanges));actionInfo.Name=GydF4y2Ba“行动”GydF4y2Ba;numActions=numel(actionInfo.Elements);GydF4y2Ba

创建Simulink环万博1manbetx境接口,指定RL代理块的路径。GydF4y2Ba

blk=[mdlGydF4y2Ba“/RL控制器/RL代理”GydF4y2Ba];env=rlSim万博1manbetxulinkEnv(mdl、blk、observationInfo、actionInfo);GydF4y2Ba

为培训指定重置功能。这个GydF4y2Ba自动标售ValetResetFCNGydF4y2Ba该功能在每集开始时将ego车辆的初始姿势重置为随机值。GydF4y2Ba

env.ResetFcn=@automarkingvaletresetfcn;GydF4y2Ba

有关创建Simulink环境的详细信息,请参见万博1manbetxGydF4y2Barl万博1manbetxSimulinkEnvGydF4y2Ba.GydF4y2Ba

创建代理GydF4y2Ba

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

将随机种子生成器设置为再现性。GydF4y2Ba

rng(0)GydF4y2Ba

要创建批评家表示,首先创建一个具有16个输入和一个输出的深度神经网络。批评家网络的输出是特定观测的状态值函数。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代理创建评论家。有关详细信息,请参阅GydF4y2BarlValueRepresentationGydF4y2Ba和GydF4y2BarlRepresentationOptionsGydF4y2Ba.GydF4y2Ba

临界点=rlRepresentationOptions(GydF4y2Ba“LearnRate”GydF4y2Ba,1e-3,GydF4y2Ba“梯度阈值”GydF4y2Ba,1);临界=rlValueRepresentation(临界网络、观测信息、,GydF4y2Ba...GydF4y2Ba“观察”GydF4y2Ba,{GydF4y2Ba“观察”GydF4y2Ba},批评);GydF4y2Ba

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

actorNetwork=[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)完全连接层(numActions,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“出去”GydF4y2Ba)软MaxLayer(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“actionProb”GydF4y2Ba)];GydF4y2Ba

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

ActorProptions=rlRepresentationOptions(GydF4y2Ba“LearnRate”GydF4y2Ba,2e-4,GydF4y2Ba“梯度阈值”GydF4y2Ba,1);actor=rl随机因素表示(actorNetwork,observationInfo,actionInfo,GydF4y2Ba...GydF4y2Ba“观察”GydF4y2Ba,{GydF4y2Ba“观察”GydF4y2Ba},动植物);GydF4y2Ba

指定代理选项并创建PPO代理。有关PPO代理选项的详细信息,请参阅GydF4y2BarlPPOAgentOptionsGydF4y2Ba.GydF4y2Ba

agentOpts=rlPPOAgentOptions(GydF4y2Ba...GydF4y2Ba“采样时间”GydF4y2Ba,Ts,GydF4y2Ba...GydF4y2Ba“体验地平线”GydF4y2Ba,200,GydF4y2Ba...GydF4y2Ba“ClipFactor”GydF4y2Ba,0.2,GydF4y2Ba...GydF4y2Ba“无熵重量”GydF4y2Ba,0.01,GydF4y2Ba...GydF4y2Ba“MiniBatchSize”GydF4y2Ba,64,GydF4y2Ba...GydF4y2Ba“努梅波奇”GydF4y2Ba3.GydF4y2Ba...GydF4y2Ba“优势估计法”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“最大集”GydF4y2Ba,10000,GydF4y2Ba...GydF4y2Ba“MaxStepsPerEpisode”GydF4y2Ba,200,GydF4y2Ba...GydF4y2Ba“ScoreAveragingWindowLength”GydF4y2Ba,200,GydF4y2Ba...GydF4y2Ba“情节”GydF4y2Ba,GydF4y2Ba“培训进度”GydF4y2Ba,GydF4y2Ba...GydF4y2Ba“停止培训标准”GydF4y2Ba,GydF4y2Ba“平均向上”GydF4y2Ba,GydF4y2Ba...GydF4y2Ba“停止训练值”GydF4y2Ba,80);GydF4y2Ba

使用GydF4y2Ba火车GydF4y2Ba函数。培训此代理是一个计算密集型过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置GydF4y2Ba溺爱GydF4y2Ba到GydF4y2Ba错误的GydF4y2Ba. 要亲自训练特工,设置GydF4y2Ba溺爱GydF4y2Ba到GydF4y2Ba符合事实的GydF4y2Ba.GydF4y2Ba

doTraining=false;GydF4y2Ba如果GydF4y2BadoTraining trainingStats=列车(代理人、环境、列车员);GydF4y2Ba其他的GydF4y2Ba装载(GydF4y2Ba“rlautomarkingvaletagent.mat”GydF4y2Ba,GydF4y2Ba“代理人”GydF4y2Ba);GydF4y2Ba终止GydF4y2Ba

模拟代理GydF4y2Ba

模拟模型以将车辆停放在免费停车位。要模拟车辆在不同位置的停车,请在以下代码中更改免费停车位位置。GydF4y2Ba

freeSpotIdx=7;GydF4y2Ba%自由点位置GydF4y2Basim(mdl);GydF4y2Ba

Figure Auto Parking Valet包含一个axes对象。axes对象包含296个矩形、直线、文本和多边形类型的对象。GydF4y2Ba

车辆在+/-0.75 m(位置)和+/-10度(方向)的规定误差公差范围内达到目标姿态。GydF4y2Ba

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

另见GydF4y2Ba

相关话题GydF4y2Ba