该示例演示了自动搜索和停车任务的混合控制器的设计。该混合控制器使用模型预测控制(MPC)跟踪停车场中的参考路径,并使用经过训练的强化学习(RL)代理执行停车操作。GydF4y2Ba
本例中的自动停车算法执行一系列动作,同时感知并避开狭窄空间中的障碍物。它在自适应MPC控制器和RL代理之间切换,以完成驻车操纵。MPC控制器沿参考路径以恒定速度移动车辆,同时算法搜索空停车位。当找到一个停车点时,RL代理接管并执行预训练停车操作。管制员可以事先了解环境(停车场),包括空位和停放车辆的位置。GydF4y2Ba
停车场由GydF4y2Ba停车场GydF4y2Ba
类,它存储有关ego车辆、空停车位和静态障碍物(停放的车辆)的信息。每个停车位都有一个唯一的索引号和一个指示灯,指示灯为绿色(空闲)或红色(已占用)。停放的车辆以黑色表示。GydF4y2Ba
创建一个GydF4y2Ba停车场GydF4y2Ba
在位置7处具有自由点的对象。GydF4y2Ba
freeSpotIdx=7;map=ParkingLot(freeSpotIdx);GydF4y2Ba
指定初始姿势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
安装在ego车辆上的摄像头的视野由下图中绿色阴影区域表示。摄像头有一个视野GydF4y2Ba 以GydF4y2Ba 和最大测量深度GydF4y2Ba 10米。GydF4y2Ba
当ego车辆向前移动时,摄像头模块感测视野内的停车点,并确定停车点是否空闲或有人占用。为简单起见,此操作使用停车点位置和当前车辆姿势之间的几何关系来实现。如果GydF4y2Ba 和GydF4y2Ba 哪里GydF4y2Ba 是到停车位的距离,以及GydF4y2Ba 是与停车位的角度。GydF4y2Ba
强化学习代理使用激光雷达传感器读数确定ego车辆与环境中其他车辆的接近程度。本例中的激光雷达传感器也使用几何关系建模。激光雷达距离沿12条直线段测量,该直线段从ego车辆中心径向伸出。当激光雷达直线与障碍物相交时,返回障碍物与车辆的距离。沿任何线段的最大可测量激光雷达距离为6 m。GydF4y2Ba
泊车代客泊车模型,包括控制器、ego车辆、传感器和停车场,在Simulink®中实现。万博1manbetxGydF4y2Ba
加载自动驻车代客泊车参数。GydF4y2Ba
自动标售增值图GydF4y2Ba
打开Simulin万博1manbetxk模型。GydF4y2Ba
mdl=GydF4y2Ba“自动销售代客泊车”GydF4y2Ba; 开放式系统(mdl)GydF4y2Ba
该模型中的ego车辆动力学由带有两个输入的单轨自行车模型表示:车速GydF4y2Ba (m/s)和转向角GydF4y2Ba (弧度)。MPC和RL控制器位于启用的子系统块内,该子系统块由表示车辆是否必须搜索空位或执行停车操作的信号激活。启用信号由车辆模式子系统内的摄像头算法确定。最初,车辆处于GydF4y2Ba搜索GydF4y2Ba模式,MPC控制器跟踪参考路径。当找到一个空闲点时,GydF4y2Ba公园GydF4y2Ba模式被激活,RL代理执行驻车操纵。GydF4y2Ba
使用创建用于参考轨迹跟踪的自适应MPC控制器对象GydF4y2Ba创建MPC标记GydF4y2Ba
剧本有关自适应MPC的详细信息,请参阅GydF4y2Ba自适应MPCGydF4y2Ba(模型预测控制工具箱)GydF4y2Ba.GydF4y2Ba
创建MPC标记GydF4y2Ba
培训RL代理的环境为下图中红色阴影区域。由于停车场的对称性,该区域内的培训足以使策略在对观测值应用适当的坐标变换后调整到其他区域。使用该较小的培训区域可显著降低tr与整个停车场的培训相比,培训时间更长。GydF4y2Ba
对于这种环境:GydF4y2Ba
训练区域为22.5 m x 20 m的空间,目标点位于其水平中心。GydF4y2Ba
观测值是位置误差GydF4y2Ba 和GydF4y2Ba 相对于目标姿态,ego车辆的真实航向角的正弦和余弦GydF4y2Ba ,以及激光雷达传感器读数。GydF4y2Ba
停车时的车速为恒定的2 m/s。GydF4y2Ba
动作信号是离散的转向角,范围在+/-45度之间,步幅为15度。GydF4y2Ba
如果目标姿态的误差在+/-0.75 m(位置)和+/-10度(方向)的规定公差范围内,则认为车辆已停放。GydF4y2Ba
如果ego车辆超出训练区域的边界、与障碍物碰撞或成功停车,则该事件终止。GydF4y2Ba
奖赏GydF4y2Ba 当时提供GydF4y2BaTGydF4y2Ba,是:GydF4y2Ba
在这里GydF4y2Ba ,GydF4y2Ba 和GydF4y2Ba 是ego车辆相对于目标姿态的位置和航向角误差,以及GydF4y2Ba 是转向角。GydF4y2Ba (0或1)表示车辆是否已驻车且GydF4y2Ba (0或1)表示车辆当时是否与障碍物碰撞GydF4y2Ba .GydF4y2Ba
车辆姿态的坐标变换GydF4y2Ba 不同停车位位置的观察结果如下:GydF4y2Ba
1-14:无转换GydF4y2Ba
15-22:GydF4y2Ba
23-36:GydF4y2Ba
37-40:GydF4y2Ba
41-52:GydF4y2Ba
53-64: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
本例中的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
在本例中,您最多为代理培训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
freeSpotIdx=7;GydF4y2Ba%自由点位置GydF4y2Basim(mdl);GydF4y2Ba
车辆在+/-0.75 m(位置)和+/-10度(方向)的规定误差公差范围内达到目标姿态。GydF4y2Ba
要查看ego车辆位置和方向,请打开ego车辆姿势范围。GydF4y2Ba