主要内容gydF4y2Ba

火车PPO代理自动代客停车gydF4y2Ba

这个案例展示了混合控制器的设计一个自动搜索和停车的任务。混合控制器使用模型预测控制(MPC)跟随参考路径在一个停车场和一个训练有素的强化学习(RL)代理执行停车操作。gydF4y2Ba

自动停车算法在本例中执行的一系列动作,同时传感和避免在狭小空间障碍。之间切换自适应MPC控制器和RL代理完成停车操作。MPC控制器车辆在一个恒定的速度移动沿着参考路径,算法搜索一个空的停车位。当找到现货,RL代理接管和执行pretrained停车操作。环境的先验知识(停车场),包括空点和停放车辆的位置提供给控制器。gydF4y2Ba

停车场gydF4y2Ba

所代表的停车场gydF4y2Ba停车场gydF4y2Ba类,它存储的信息自我车,空的停车位,和静态障碍(停放的汽车)。每个停车位都有一个唯一的索引号和一个指示灯是绿色(免费)或红色(占用)。停放车辆用黑色表示。gydF4y2Ba

创建一个gydF4y2Ba停车场gydF4y2Ba对象与自由点位置7。gydF4y2Ba

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

图汽车停车员包含一个坐标轴对象。坐标轴对象包含272个对象类型的矩形,线,文本、多边形。gydF4y2Ba

指定一个初始姿势gydF4y2Ba (gydF4y2Ba XgydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba YgydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba θgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba 自我的工具。确定目标构成基于第一个可用的免费停车场的车辆导航。gydF4y2Ba

egoInitialPose =[0] 20日15日;gydF4y2Ba

计算的目标造成车辆使用gydF4y2BacreateTargetPosegydF4y2Ba函数。目标构成对应的位置gydF4y2BafreeSpotIdxgydF4y2Ba。gydF4y2Ba

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

传感器模块gydF4y2Ba

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

相机gydF4y2Ba

的视场相机安装在自我车辆由阴影在绿色区域表示如下图所示。相机的视野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

强化学习代理使用激光雷达传感器读数来确定自我的邻近车辆与其他车辆的环境。激光雷达传感器在这个例子也是通过几何关系进行建模。激光雷达测量距离12线段,径向摆脱自我中心的车辆。当激光线相交一个障碍,它返回从车辆的距离障碍。任何线段的最大可测量的激光雷达距离是6米。gydF4y2Ba

汽车停车员模型gydF4y2Ba

代客停车模式,包括控制器、自我汽车,传感器,和停车场,在仿真软件中实现®。金宝appgydF4y2Ba

负载自动停车员参数。gydF4y2Ba

autoParkingValetParamsgydF4y2Ba

打开仿真软件模型。金宝appgydF4y2Ba

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

自我车辆动力学在这个模型由一个单向的自行车模型有两个输入:车辆速度gydF4y2Ba vgydF4y2Ba (米/秒)和转向角gydF4y2Ba δgydF4y2Ba (弧度)。MPC和RL控制器放置在启用子系统模块所激活的信号代表车辆是否寻找一个空的位置或执行停车操作。使信号是由相机算法在车辆模式子系统。最初,该车辆gydF4y2Ba搜索gydF4y2Ba模式和MPC控制器跟踪参考路径。当找到免费的现货,gydF4y2Ba公园gydF4y2Ba模式被激活和RL代理执行停车操作。gydF4y2Ba

自适应模型预测控制器gydF4y2Ba

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

createMPCForParkinggydF4y2Ba

强化学习环境gydF4y2Ba

环境培训RL代理是下图中红色阴影区域。由于对称性在停车场,培训在这个地区是充分的政策调整其他地区应用适当的坐标转换后观察。使用这个小培训地区相比,极大地减少了培训时间培训在整个停车场。gydF4y2Ba

对于这个环境:gydF4y2Ba

  • 培训是22.5 m x 20 m区域在水平中心与目标点。gydF4y2Ba

  • 观测位置错误gydF4y2Ba XgydF4y2Ba egydF4y2Ba 和gydF4y2Ba YgydF4y2Ba egydF4y2Ba 自我的工具对目标造成,真正的航向角的正弦和余弦gydF4y2Ba θgydF4y2Ba 和激光雷达传感器读数。gydF4y2Ba

  • 在停车车辆的速度是一个常数2 m / s。gydF4y2Ba

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

  • 汽车是停如果错误对目标造成内指定公差+ / - 0.75(位置)和+ / -10度(方向)。gydF4y2Ba

  • 这一事件终止如果自我界限的车辆外出培训,成功与障碍物碰撞,或者公园。gydF4y2Ba

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

rgydF4y2Ba tgydF4y2Ba =gydF4y2Ba 2gydF4y2Ba egydF4y2Ba - - - - - -gydF4y2Ba (gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 05年gydF4y2Ba XgydF4y2Ba egydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 04gydF4y2Ba YgydF4y2Ba egydF4y2Ba 2gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 5gydF4y2Ba egydF4y2Ba - - - - - -gydF4y2Ba 40gydF4y2Ba θgydF4y2Ba egydF4y2Ba 2gydF4y2Ba - - - - - -gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 05年gydF4y2Ba δ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 3gydF4y2Ba π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;discreteSteerAngles = -steerMax:函数(15):steerMax;actionInfo = rlFiniteSetSpec (num2cell (discreteSteerAngles));actionInfo。Name =gydF4y2Ba“行动”gydF4y2Ba;numActions =元素个数(actionInfo.Elements);gydF4y2Ba

创建仿真软件环境界面,金宝appRL代理指定路径。gydF4y2Ba

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

指定一个重置功能训练。的gydF4y2BaautoParkingValetResetFcngydF4y2Ba函数重置的初始姿势自我车辆随机值在每集的开始。gydF4y2Ba

env。ResetFcn = @autoParkingValetResetFcn;gydF4y2Ba

创造仿真软件环境的更多信息,请参阅金宝appgydF4y2Barl金宝appSimulinkEnvgydF4y2Ba。gydF4y2Ba

创建代理gydF4y2Ba

RL代理在本例中是一个近端政策优化(PPO)代理一个离散的行动空间。PPO代理依靠演员和评论家表示学习最优政策。代理维护深层神经网络函数接近者为演员和评论家。更多地了解PPO代理,看看gydF4y2Ba近端政策优化代理gydF4y2Ba。gydF4y2Ba

再现性的随机种子生成器。gydF4y2Ba

rng (0)gydF4y2Ba

创建评论家表示,首先创建一个深层神经网络具有16个输入和一个输出。评论家网络状态值的输出函数为特定的观察。gydF4y2Ba

criticNetwork = [featureInputLayer numObservations,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));criticNetwork = dlnetwork (criticNetwork);gydF4y2Ba

创建的评论家PPO代理。有关更多信息,请参见gydF4y2BarlValueFunctiongydF4y2Ba和gydF4y2BarlOptimizerOptions。gydF4y2Ba

criticOptions = rlOptimizerOptions (gydF4y2Ba“LearnRate”gydF4y2Ba1 e - 3,gydF4y2Ba“GradientThreshold”gydF4y2Ba1);评论家= rlValueFunction (criticNetwork observationInfo);gydF4y2Ba

演员网络的输出的概率采取每个可能转向行动当车辆处于某种状态。创建一个演员深层神经网络。gydF4y2Ba

actorNetwork = [featureInputLayer numObservations,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));actorNetwork = dlnetwork (actorNetwork);gydF4y2Ba

创建一个离散分类演员PPO的代理。有关更多信息,请参见gydF4y2BarlDiscreteCategoricalActorgydF4y2Ba。gydF4y2Ba

actorOptions = rlOptimizerOptions (gydF4y2Ba“LearnRate”gydF4y2Ba2的军医,gydF4y2Ba“GradientThreshold”gydF4y2Ba1);演员= rlDiscreteCategoricalActor (actorNetwork observationInfo actionInfo);gydF4y2Ba

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

agentOpts = rlPPOAgentOptions (gydF4y2Ba…gydF4y2Ba“SampleTime”gydF4y2BaTs,gydF4y2Ba…gydF4y2Ba“ActorOptimizerOptions”gydF4y2BaactorOptions,gydF4y2Ba…gydF4y2Ba“CriticOptimizerOptions”gydF4y2BacriticOptions,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

培训期间,代理收集经验,直到达到经验地平线200步或集64年终止,然后从mini-batches火车经历了三个时代。0.2提高培训的目标函数剪辑因素稳定性和折现系数值0.998鼓励长期回报。在评论家输出方差减少广义优势估计方法GAE因子为0.95。gydF4y2Ba

火车代理gydF4y2Ba

对于本例,您培训代理最多10000集,每集与持久的最多200时间步。训练终止当事件的最大数量达到或超过100集的平均回报超过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函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置gydF4y2BadoTraininggydF4y2Ba来gydF4y2Ba假gydF4y2Ba。训练自己代理,集gydF4y2BadoTraininggydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba。gydF4y2Ba

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

模拟剂gydF4y2Ba

模拟模型的汽车公园免费停车位。模拟车辆在不同的位置停车,改变自由点位置在下面的代码。gydF4y2Ba

freeSpotIdx = 7;gydF4y2Ba%免费点位置gydF4y2Basim (mdl);gydF4y2Ba

图汽车停车员包含一个坐标轴对象。坐标轴对象包含296个对象类型的矩形,线,文本、多边形。gydF4y2Ba

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

把自我车辆位置和姿态,开放自我车辆构成范围。gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba