避免使用强化学习移动机器人障碍
这个示例使用深决定性策略梯度(DDPG)基于强化学习制定一项战略,移动机器人,以避免障碍。DDPG算法的简要总结,请参阅深决定性策略梯度(DDPG)代理(强化学习工具箱)。
这个示例场景列车移动机器人避障传感器读数范围,检测障碍地图。强化学习算法的目标是了解控制(线速度和角速度),机器人应该使用避免碰撞的障碍。这个示例使用一个占用一个已知的地图环境生成范围传感器读数,侦测障碍物,并检查机器人的碰撞会使。传感器读数的观测范围DDPG代理,和线速度和角速度控制行动。
加载地图
加载一个映射矩阵,simpleMap
为机器人,这代表了环境。
负载exampleMapssimpleMap负载exampleHelperOfficeAreaMapoffice_area_mapmapMatrix = simpleMap;mapScale = 1;
传感器参数范围
接下来,设置一个rangeSensor
对象,模拟一个嘈杂的传感器。传感器读数范围被认为是观测的代理。定义的角位置读数范围,最大范围,噪声参数。
scanAngles =[3 *π/ 8:π/八3 *π/ 8];maxRange = 12;lidarNoiseVariance = 0.1 ^ 2;lidarNoiseSeeds =兰迪(intmax、大小(scanAngles));
机器人参数
代理是一个二维向量的作用
在哪里
和
我们的机器人的线速度和角速度。DDPG代理使用规范化输入角和线速度,意义的行动1和1之间的代理是一个标量,乘以maxLinSpeed
和maxAngSpeed
获得实际的控制参数。指定这个最大线速度和角速度。
另外,机器人的初始位置指定为(x yθ)
。
%最高速度参数maxLinSpeed = 0.3;maxAngSpeed = 0.3;%机器人的初始姿势initX = 17;initY = 15;initTheta =π/ 2;
显示地图和机器人的位置
可视化的行动机器人,创建一个图。首先显示占用地图和机器人的初始位置。
无花果=图(“名称”,“simpleMap”);集(图,“可见”,“上”);ax =轴(图);表演(binaryOccupancyMap (mapMatrix),“父”、ax);持有在plotTransforms ([initX initY 0], eul2quat ((initTheta, 0, 0)),“MeshFilePath”,“groundvehicle.stl”,“视图”,“二维”);淡定;持有从
环境界面
创建一个环境模型,采取的措施,并给出了观察和奖励的信号。指定所提供的示例模型名称,例ampleHelperAvoidObstaclesMobileRobot
、仿真时间参数和代理块的名字。
mdl =“exampleHelperAvoidObstaclesMobileRobot”;Tfinal = 100;sampleTime = 0.1;agentBlk = mdl +“/代理”;
打开模型。
open_system (mdl)
该模型包含了环境
和代理
块。的代理
块还没有定义。
在环境
子系统,您应该看到一个模型来模拟机器人和传感器数据。子系统需要在操作,生成基于观测信号传感器读数范围,并计算出奖励基于距离的障碍,和操作的工作命令。
open_system (mdl +“/环境”)
定义参数,观察obsInfo
,使用rlNumericSpec
对象和给予的和上下限范围读数有足够的元素范围中的每个角位置传感器。
obsInfo = rlNumericSpec([元素个数(scanAngles) 1],…“LowerLimit”0(元素个数(scanAngles), 1),…“UpperLimit”的(元素个数(scanAngles), 1) * maxRange);numObservations = obsInfo.Dimension (1);
定义操作参数,actInfo
。行动是控制命令向量,
归一化,
。
numActions = 2;actInfo = rlNumericSpec (numActions [1],…“LowerLimit”,1…“UpperLimit”1);
构建环境界面对象使用rl万博1manbetxSimulinkEnv
(强化学习工具箱)。指定模型,代理块名称,观察参数和操作参数。设置重置函数仿真使用exampleHelperRLAvoidObstaclesResetFcn
。这个函数重新启动仿真通过将机器人在一个新的随机位置开始避免障碍。
env = rl万博1manbetxSimulinkEnv (mdl agentBlk、obsInfo actInfo);env。ResetFcn = @(在)exampleHelperRLAvoidObstaclesResetFcn (scanAngles, maxRange mapMatrix);env。UseFastRestart =“关闭”;
另一个例子,建立了一个仿真软件®环境培训,明白了万博1manbetx创建仿真软件环万博1manbetx境和培训代理(强化学习工具箱)。
DDPG代理
DDPG代理接近长期奖励给观测和操作使用批评价值函数表示。创建评论家,首先创建一个深和两个输入神经网络,观察和行动,和一个输出。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值功能(强化学习工具箱)。
statePath = [featureInputLayer numObservations,“归一化”,“没有”,“名称”,“状态”)fullyConnectedLayer (50,“名称”,“CriticStateFC1”)reluLayer (“名称”,“CriticRelu1”)fullyConnectedLayer (25,“名称”,“CriticStateFC2”));actionPath = [featureInputLayer numActions,“归一化”,“没有”,“名称”,“行动”)fullyConnectedLayer (25,“名称”,“CriticActionFC1”));commonPath = [additionLayer (2,“名称”,“添加”)reluLayer (“名称”,“CriticCommonRelu”)fullyConnectedLayer (1,“名称”,“CriticOutput”));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);criticNetwork = dlnetwork (criticNetwork);
接下来,指定选项评论家优化器使用rlOptimizerOptions
。
最后,创建使用指定的评论家表示深层神经网络和选项。您还必须指定操作和观察的批评家,你从环境中获取接口。有关更多信息,请参见rlQValueFunction
(强化学习工具箱)。
criticOptions = rlOptimizerOptions (“LearnRate”1 e - 3,“L2RegularizationFactor”1的军医,“GradientThreshold”1);评论家= rlQValueFunction (criticNetwork obsInfo actInfo,“ObservationInputNames”,“状态”,“ActionInputNames”,“行动”);
DDPG代理决定哪些操作使用演员表示给定的观测。创建演员,首先创建一个深和一个输入神经网络,观察,和一个输出,行动。
最后,构建演员在类似的方式批评。有关更多信息,请参见rlContinuousDeterministicActor
(强化学习工具箱)。
actorNetwork = [featureInputLayer numObservations,“归一化”,“没有”,“名称”,“状态”)fullyConnectedLayer (50,“名称”,“actorFC1”)reluLayer (“名称”,“actorReLU1”)fullyConnectedLayer (50,“名称”,“actorFC2”)reluLayer (“名称”,“actorReLU2”)fullyConnectedLayer (2“名称”,“actorFC3”)tanhLayer (“名称”,“行动”));actorNetwork = dlnetwork (actorNetwork);actorOptions = rlOptimizerOptions (“LearnRate”1的军医,“L2RegularizationFactor”1的军医,“GradientThreshold”1);演员= rlContinuousDeterministicActor (actorNetwork obsInfo actInfo);
创建DDPG代理对象
指定代理选项。
agentOpts = rlDDPGAgentOptions (…“SampleTime”sampleTime,…“ActorOptimizerOptions”actorOptions,…“CriticOptimizerOptions”criticOptions,…“DiscountFactor”,0.995,…“MiniBatchSize”,128,…“ExperienceBufferLength”1 e6);agentOpts.NoiseOptions。方差= 0.1;agentOpts.NoiseOptions。VarianceDecayRate = 1 e-5;
创建rlDDPGAgent
对象。的obstacleAvoidanceAgent
变量在模型中使用代理
块。
obstacleAvoidanceAgent = rlDDPGAgent(演员、评论家、agentOpts);open_system (mdl +“/代理”)
奖励
代理人的报酬函数建模如图所示。
代理是奖励,以避免最近的障碍,最大限度地减少最坏的情况。此外,代理给出积极的奖励高线性速度,并给出了负奖励高的角速率。这个奖励策略阻止进入圈子的代理的行为。优化你的奖励是正确的关键训练一个代理,所以你的回报取决于您的应用程序。
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项:
训练最多
10000年
集,每集持久的最多maxSteps
时间的步骤。在事件管理器对话框显示培训进展(设置
情节
在命令行选项),使显示器(设置详细的
选项为true)。停止训练当代理接收到平均累积奖励大于400五十多个连续集。
有关更多信息,请参见rlTrainingOptions
(强化学习工具箱)。
maxEpisodes = 10000;maxSteps =装天花板(Tfinal / sampleTime);trainOpts = rlTrainingOptions (…“MaxEpisodes”maxEpisodes,…“MaxStepsPerEpisode”maxSteps,…“ScoreAveragingWindowLength”,50岁,…“StopTrainingCriteria”,“AverageReward”,…“StopTrainingValue”,400,…“详细”,真的,…“阴谋”,“训练进步”);
火车代理使用火车
(强化学习工具箱)函数。培训是一个过程,需要几分钟才能完成的计算强度。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;%切换这真正的训练。如果doTraining%培训代理。env, trainingStats =火车(obstacleAvoidanceAgent trainOpts);其他的%负载pretrained代理的例子。负载exampleHelperAvoidObstaclesAgentobstacleAvoidanceAgent结束
的强化学习集管理器可以用来追踪episode-wise培训进展。随着事件数量的增加,你想看奖励值的增加。
模拟
使用代理来模拟训练机器人在地图上开车,避免障碍。
= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);
可视化
可视化仿真机器人驾驶的环境传感器读数范围,使用辅助,exampleHelperAvoidObstaclesPosePlot
。
为我= 1:5:尺寸(out.range, 3) u = out.pose(我:);r = out.range(:,:我);exampleHelperAvoidObstaclesPosePlot (u, mapMatrix mapScale, r, scanAngles, ax);结束
可扩展性
您现在可以使用这个代理模拟驾驶在不同的地图。另一个地图生成的激光雷达扫描的办公环境是使用相同的训练模型。这张图代表一个更现实的场景中应用训练模式训练后。
改变地图
mapMatrix = office_area_map。occupancyMatrix > 0.5;mapScale = 10;initX = 20;initY = 30;initTheta = 0;无花果=图(“名称”,“office_area_map”);集(图,“可见”,“上”);ax =轴(图);显示(binaryOccupancyMap (mapMatrix mapScale),“父”、ax);持有在plotTransforms ([initX initY 0], eul2quat ((initTheta, 0, 0)),“MeshFilePath”,“groundvehicle.stl”,“视图”,“二维”);淡定;持有从
模拟
= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);
可视化
为我= 1:5:尺寸(out.range, 3) u = out.pose(我:);r = out.range(:,:我);exampleHelperAvoidObstaclesPosePlot (u, mapMatrix mapScale, r, scanAngles, ax);结束