此示例使用基于深度确定性策略梯度(DDPG)的强化学习为移动机器人开发一种避开障碍物的策略。有关DDPG算法的简要概述,请参阅深度确定性策略梯度代理(强化学习工具箱).
这个示例场景训练一个移动机器人避开给定的距离传感器读数,该读数可以检测地图上的障碍物。强化学习算法的目标是学习机器人应该使用哪些控制(线速度和角速度)来避免撞到障碍物。这个例子使用一个已知环境的占用地图来生成距离传感器读数,探测障碍物,并检查机器人可能造成的碰撞。距离传感器读数是DDPG剂的观测值,线性和角速度控制是动作。
加载一个映射矩阵,单纯形映射
,表示机器人的环境。
负载示例地图单纯形映射负载示例HelperOfficeAreamap办公区地图mapMatrix=simpleMap;mapScale=1;
接下来,建立一个范围传感器
对象,它模拟一个噪声距离传感器。距离传感器的读数被代理视为观测值。定义量程读数的角度位置、最大量程和噪声参数。
扫描角度= [-3*pi/8: pi/8:3*pi/8];maxRange = 12;lidarNoiseVariance = 0.1 ^ 2;lidarNoiseSeeds =兰迪(intmax、大小(scanAngles));
代理的作用是一个二维矢量
在哪里
和
是我们机器人的线速度和角速度。DDPG代理使用角速度和线速度的标准化输入,这意味着代理的动作是-1和1之间的标量,它乘以maxLinSpeed
和最大速度
获取实际控制的参数。指定此最大线速度和角速度。
另外,将机器人的初始位置指定为(x yθ)
.
%最大速度参数maxLinSpeed = 0.3;maxAngSpeed = 0.3;%机器人的初始姿态initX = 17;initY = 15;initTheta =π/ 2;
要可视化机器人的动作,创建一个图形。首先显示占用地图并绘制机器人的初始位置。
图(“姓名”,“simpleMap”);套(图,“可见”,“上”);ax=轴(图);显示(二进制职业映射(mapMatrix),“父”等一下在plotTransforms([initX,initY,0],eul2quat([initTheta,0,0]),“MeshFilePath”,“地面车辆.stl”,“视图”,“2D”)等关
创建一个采取行动的环境模型,并给出观察和奖励信号AmplehlPeravoidObstacleSmobileRobot
、模拟时间参数和代理程序块名称。
mdl =“示例HelperAvoidObstacleSmobileRobot”;Tfinal=100;sampleTime=0.1;agentBlk=mdl+“/代理”;
打开模型。
open_system (mdl)
模型包含环境
和代理人
街区代理人
块尚未定义。
内部环境
在子系统块中,您应该看到一个用于模拟机器人和传感器数据的模型。子系统采取行动,根据距离传感器读数生成观察信号,并根据与障碍物的距离和行动命令的努力计算奖励。
open_system (mdl +“/环境”)
定义参数,观察obsInfo
,使用rlNumericSpec
对象并给出量程读数的下限和上限,量程传感器中每个角度位置都有足够的元件。
obsInfo = rlNumericSpec([nummel (scanAngles) 1],...“LowerLimit”,零(numel(扫描角度),1),...“上限”,一个(numel(扫描角度),1)*最大范围;numObservations=obsInfo.Dimension(1);
定义操作参数,actInfo
.该动作是控制命令向量,
,标准化为
.
numActions = 2;actInfo = rlNumericSpec([numActions 1],...“LowerLimit”,-1,...“上限”1);
使用rl金宝appSimulinkEnv
(强化学习工具箱).指定模型、代理块名称、观测参数和动作参数。设置模拟使用的复位功能示例helperrlavoidobstaclesresetfcn
.该函数通过将机器人放置在一个新的随机位置开始躲避障碍物来重新启动模拟。
env=rlSi金宝appmulinkEnv(mdl、agentBlk、obsInfo、actInfo);env.ResetFcn=@(in)示例HelperrLavoidobstaclesresetfcn(in、扫描角度、maxRange、mapMatrix);env.UseFastRestart=“关闭”;
有关为培训设置Simulink®环境的另一个示例,请参阅金宝app创建Simul金宝appink环境并训练Agent(强化学习工具箱).
DDPG代理使用批判价值函数表示来近似给定观察和行动的长期奖励。要创建批评家,首先要创建一个深度神经网络,它有两个输入,一个是观察和行动,一个是输出。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示(强化学习工具箱).
statePath=[featureInputLayer(numObservations,“正常化”,“没有”,“姓名”,“状态”)完全连接层(50,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”) fullyConnectedLayer (25,“姓名”,“CriticStateFC2”)]; actionPath=[featureInputLayer(numActions,“正常化”,“没有”,“姓名”,“行动”) fullyConnectedLayer (25,“姓名”,“CriticActionFC1”)]; commonPath=[additionLayer(2,“姓名”,“添加”)雷卢耶(“姓名”,“CriticCommonRelu”) fullyConnectedLayer (1,“姓名”,“CriticOutput”)];criticNetwork=layerGraph();criticNetwork=addLayers(criticNetwork,statePath);criticNetwork=addLayers(criticNetwork,actionPath);criticNetwork=addLayers(criticNetwork,commonPath);criticNetwork=connectLayers(criticNetwork,“CriticStateFC2”,“添加/in1”);临界网络=连接层(临界网络,“CriticActionFC1”,“添加/in2”);
接下来,使用指定批评家表示的选项rlRepresentationOptions
(强化学习工具箱).
最后,使用指定的深度神经网络和选项创建评论表示。您还必须为评论家指定操作和观察规范,这是从环境接口获得的。有关更多信息,请参见rlQValueRepresentation
(强化学习工具箱).
criticOpts=rlRepresentationOptions(“学习率”1 e - 3,“L2RegularizationFactor”1的军医,“梯度阈值”,1);评论家=rlQValueRepresentation(关键网络、obsInfo、actInfo、,“观察”,{“国家”},“行动”,{“行动”},批判者);
DDPG代理使用参与者表示来决定对给定的观察采取什么行动。要创建参与者,首先创建一个深度神经网络,有一个输入,一个观察,和一个输出,一个动作。
最后,以与批评家类似的方式构造参与者。有关更多信息,请参阅rlDeterministicActorRepresentation
(强化学习工具箱).
actorNetwork=[featureInputLayer(numObservations,“正常化”,“没有”,“姓名”,“状态”)完全连接层(50,“姓名”,“actorFC1”)雷卢耶(“姓名”,“actorReLU1”)完全连接层(50,“姓名”,“actorFC2”)雷卢耶(“姓名”,“actorReLU2”) fullyConnectedLayer (2“姓名”,“actorFC3”)坦莱尔(“姓名”,“行动”)]; ActorProptions=rlRepresentationOptions(“学习率”1的军医,“L2RegularizationFactor”1的军医,“梯度阈值”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“国家”},“行动”,{“行动”},动植物);
指定代理选项。
agentOpts=rlDDPGAgentOptions(...“采样时间”,样本时间,...“目标平滑因子”1 e - 3,...“折扣因素”,0.995,...“最小批量大小”,128,...“经验缓冲长度”,1e6);agentOpts.NoiseOptions.Variance=0.1;agentOpts.NoiseOptions.VarianceDecayRate=1e-5;
创建rlDDPGAgent
反对obstacleAvoidanceAgent
变量在模型中用于代理人
块
obstacleAvoidanceAgent = rlDDPGAgent(演员、评论家、agentOpts);open_system (mdl +“/代理”)
代理的奖励函数建模如图所示。
奖励代理以避免最近的障碍物,这将最大限度地减少最坏情况。此外,对于更高的线性速度,代理将获得正奖励,对于更高的角速度,代理将获得负奖励。这种奖励策略会阻止代理绕圈的行为。调整奖励是正确选择的关键如果你是一个代理,那么你的奖励会根据你的申请而有所不同。
要培训代理,请首先指定培训选项。对于本例,请使用以下选项:
最多为10000
每集最多持续一集最大步骤
时间步长。
在“插曲管理器”对话框中显示培训进度(设置情节
选项)并启用命令行显示(设置冗长的
选项设置为true)。
当经纪人在连续50次的训练中获得平均超过400的累计奖励时,停止训练。
有关更多信息,请参见RL培训选项
(强化学习工具箱).
MaxSpides=10000;maxSteps=ceil(Tfinal/sampleTime);trainOpts=rlTrainingOptions(...“最大集”maxEpisodes,...“MaxStepsPerEpisode”,maxSteps,...“ScoreAveragingWindowLength”,50,...“停止培训标准”,“平均向上”,...“StopTrainingValue”,400,...“冗长”符合事实的...“情节”,“训练进步”);
使用火车
(强化学习工具箱)培训是一个计算密集型的过程,需要几分钟才能完成。为了在运行此示例时节省时间,请通过设置溺爱
来错误的
.要亲自培训特工,请设置溺爱
来真正的
.
doTraining = false;%切换此为真训练。如果溺爱培训代理商。trainingStats=列车(障碍物解除代理、环境、列车选择);其他的%为示例加载预训练的代理。负载示例HelperAvoidObstaclesAgentobstacleAvoidanceAgent终止
这个强化学习事件管理器可以用来跟踪按章节划分的训练进度。随着章节数量的增加,你希望看到奖励价值的增加。
使用训练过的agent模拟机器人在地图中行驶和躲避障碍物。
= sim卡(“示例HelperAvoidObstacleSmobileRobot.slx”);
要可视化模拟机器人在周围环境中驾驶的距离传感器读数,使用助手,示例HelperAvoidobstaclesPosePlot
.
对于i=1:5:size(out.range,3)u=out.pose(i,:);r=out.range(:,:,i);示例HelperAvoidObstacleSposePlot(u,mapMatrix,mapScale,r,scanAngles,ax);终止
现在,您可以使用此代理在不同的地图中模拟驾驶。从办公环境的激光雷达扫描生成的另一张地图与同一个经过培训的模型一起使用。此地图代表了在培训后应用经过培训的模型的更现实的场景。
mapMatrix=office\u area\u map.OccupencyMatrix>0.5;mapScale=10;initX=20;initY=30;initTheta=0;fig=figure(“姓名”,“办公区地图”);套(图,“可见”,“上”);ax =轴(图);显示(binaryOccupancyMap (mapMatrix mapScale),“父”等一下在plotTransforms([initX,initY,0],eul2quat([initTheta,0,0]),“MeshFilePath”,“地面车辆.stl”,“视图”,“2D”)等关
= sim卡(“示例HelperAvoidObstacleSmobileRobot.slx”);
对于i=1:5:size(out.range,3)u=out.pose(i,:);r=out.range(:,:,i);示例HelperAvoidObstacleSposePlot(u,mapMatrix,mapScale,r,scanAngles,ax);终止