主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

モバイルロボットの強化学習を使用した障害物の回避

この例では、深决定性策略梯度(DDPG)ベースの強化学習を使用して,モバイルロボットが障害物を回避する手法を開発します。DDPGアルゴリズムの簡単な概要については,深度确定性策略梯度代理(强化学习工具箱)を参照してください。

このシナリオ例では,マップ内で障害物を検出する距離センサーの読み取り値を指定して,障害物を回避するようにモバイルロボットに学習させます。強化学習アルゴリズムの目的は,障害物との衝突を回避するためにロボットが使用するべき制御(線形速度と角速度)について学習することです。この例では,既知の環境の占有マップを使用して,距離センサーの読み取り値の生成,障害物の検出,およびロボットに起こりうる衝突のチェックを行います。距離センサーの読み取り値はDDPGエージェントの観測値であり,線形速度と角速度の制御はアクションです。

マップの読み込み

ロボットの環境を表すマップ行列simpleMapを読み込みます。

负载exampleMapssimpleMap负载exampleHelperOfficeAreaMapoffice_area_mapmapMatrix = simpleMap;mapScale = 1;

距離センサーのパラメーター

次に,ノイズを含む距離センサーをシミュレートするrangeSensorオブジェクトを設定します。距離センサーの読み取り値は,エージェントによる観測値と見なされます。距離の読み取り値の角度位置,最大距離,およびノイズのパラメーターを定義します。

扫描角度= [-3*pi/8: pi/8:3*pi/8];maxRange = 12;lidarNoiseVariance = 0.1 ^ 2;lidarNoiseSeeds =兰迪(intmax、大小(scanAngles));

ロボットのパラメーター

エージェントのアクションは2次元ベクトル 一个 v ω です。ここで v ω は,ロボットの線形速度と角速度です。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”“视图”“二维”);淡定;持有

Figure simpleMap包含一个坐标轴。以二进制占用网格为标题的坐标轴包含5个类型为patch、line、image的对象。

環境インターフェイス

アクションを実行して観測信号と報酬信号を与える環境モデルを作成します。提供されているモデル例の名前交货ampleHelperAvoidObstaclesMobileRobot,シミュレーション時間のパラメーター,およびエージェントのブロック名を指定します。

mdl =“exampleHelperAvoidObstaclesMobileRobot”;Tfinal = 100;sampleTime = 0.1;agentBlk = mdl +“/代理”

モデルを開きます。

open_system (mdl)

モデルには环境ブロックおよび代理ブロックが含まれています。代理ブロックはまだ定義されていません。

环境子系统ブロック内には,ロボットとセンサーのデータをシミュレートするモデルが表示されます。サブシステムはアクションを受け入れ,距離センサーの読み取り値に基づいて観測信号を生成し,障害物からの距離およびアクションコマンドの出力に基づいて報酬を計算します。

open_system (mdl +“/环境”

rlNumericSpecオブジェクトを使用し,距離センサーの角度位置ごとに十分な要素を使用して距離の読み取り値の下限と上限を指定することにより,観測パラメーターobsInfoを定義します。

obsInfo = rlNumericSpec([nummel (scanAngles) 1],...“LowerLimit”0(元素个数(scanAngles), 1),...“UpperLimit”的(元素个数(scanAngles), 1) * maxRange);numObservations = obsInfo.Dimension (1);

アクションパラメーターactInfoを定義します。アクションは,制御コマンドベクトル 一个 v ω - 1 1 に正規化したものです。

numActions = 2;actInfo = rlNumericSpec([numActions 1],...“LowerLimit”, 1...“UpperLimit”1);

rl金宝appSimulinkEnv(强化学习工具箱)を使用して,環境インターフェイスオブジェクトを作成します。モデル,エージェントブロック名,観測パラメーター,アクションパラメーターを指定します。exampleHelperRLAvoidObstaclesResetFcnを使用して,シミュレーションのリセット関数を設定します。この関数は,障害物の回避を開始するためにロボットを新しいランダムな位置に配置することにより,シミュレーションを再開します。

env = rl金宝appSimulinkEnv (mdl agentBlk、obsInfo actInfo);env。ResetFcn = @(在)exampleHelperRLAvoidObstaclesResetFcn (scanAngles, maxRange mapMatrix);env。UseFastRestart =“关闭”

学習用の仿金宝app真软件®環境を設定するもう1つの例については,创建Simul金宝appink环境和培训代理(强化学习工具箱)を参照してください。

DDPGエージェント

DDPGエージェントは,観測値とアクションを与えられると,クリティック値の関数表現を使用して長期の報酬を概算します。クリティックを作成するには,まつず2の入力(観測値とアクション),および1つの出力をもつ深層ニューラルネットワークを作成します。深層ニューラルネットワーク値の関数表現を作成する場合の詳細については,创建策略和价值功能表示(强化学习工具箱)を参照してください。

statePath = [featureInputLayer(numObservations,“归一化”“没有”“名称”“状态”) fullyConnectedLayer (50,“名称”“CriticStateFC1”) reluLayer (“名称”“CriticRelu1”) fullyConnectedLayer (25,“名称”“CriticStateFC2”));actionPath = [featureInputLayer(numActions,“归一化”“没有”“名称”“行动”) fullyConnectedLayer (25,“名称”“CriticActionFC1”));commonPath =[附加路径]“名称”“添加”) 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”);

次に,rlRepresentationOptions(强化学习工具箱)を使用してクリティック表現のオプションを指定します。

最後に,指定した深層ニューラルネットワークとオプションを使用してクリティック表現を作成します。クリティックに関するアクションと観測値の仕様も指定しなければなりません。これは環境インターフェイスから取得します。詳細については,rlQValueRepresentation(强化学习工具箱)を参照してください。

criticOpts = rlRepresentationOptions (“LearnRate”1 e - 3,“L2RegularizationFactor”1的军医,“GradientThreshold”1);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”}, criticOpts);

DDPGエージェントは,観測値を与えられると,アクター表現を使用して,実行するアクションを決定します。アクターを作成するには,まつず1の入力(観測値),および1つの出力(アクション)をもつ深層ニューラルネットワークを作成します。

最後に,クリティックと同様の方法でアクターを作成します。詳細については,rlDeterministicActorRepresentation(强化学习工具箱)を参照してください。

actorNetwork = [featureInputLayer(numobobservations,“归一化”“没有”“名称”“状态”) fullyConnectedLayer (50,“名称”“actorFC1”) reluLayer (“名称”“actorReLU1”) fullyConnectedLayer (50,“名称”“actorFC2”) reluLayer (“名称”“actorReLU2”) fullyConnectedLayer (2“名称”“actorFC3”) tanhLayer (“名称”“行动”));actorOptions = rlRepresentationOptions (“LearnRate”1的军医,“L2RegularizationFactor”1的军医,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”}, actorOptions);

DDPGエージェントオブジェクトの作成

エージェントのオプションを指定します。

agentOpts = rlDDPGAgentOptions (...“SampleTime”sampleTime,...“TargetSmoothFactor”1 e - 3,...“DiscountFactor”, 0.995,...“MiniBatchSize”, 128,...“ExperienceBufferLength”1 e6);agentOpts.NoiseOptions.Variance = 0.1;agentOpts.NoiseOptions.VarianceDecayRate = 1 e-5;

rlDDPGAgentオブジェクトを作成します。変数obstacleAvoidanceAgentは,代理ブロック用のモデルで使用されます。

obstacleAvoidanceAgent = rlDDPGAgent(演员、评论家、agentOpts);open_system (mdl +“/代理”

報酬

エージェントの報酬関数は以下のようにモデル化されます。

エージェントには最も近い障害物を回避するための報酬が与えられ,これによって最悪のシナリオが最小限に抑えられます。さらに,エージェントには,線形速度が高速の場合は正の報酬が与えられ,角速度が高速の場合は負の報酬が与えられます。この報酬手法により,エージェントが円を描くように移動する動作が抑制されます。報酬を調整することが、エージェントに適切に学習させる上で重要であるため、報酬はアプリケーションによって異なります。

エージェントの学習

エージェントに学習させるには,まず学習オプションを指定します。この例では,以下のオプションを使用します。

  • 最大10000個のエピソードについて学習させ,各エピソードは最大maxStepsタイムステップ分継続します。

  • (事件管理器)ダイアログボックスに学習の進行状況を表示し(情节オプションを設定),コマンドライン表示を有効にします(详细的オプションを真正に設定)。

  • 50個の連続するエピソードにわたってエージェントの受け取る平均累積報酬が400を超えた場合は,学習を停止します。

詳細については,rlTrainingOptions(强化学习工具箱)を参照してください。

maxEpisodes = 10000;maxSteps =装天花板(Tfinal / sampleTime);trainOpts = rlTrainingOptions (...“MaxEpisodes”maxEpisodes,...“MaxStepsPerEpisode”maxSteps,...“ScoreAveragingWindowLength”, 50岁,...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, 400,...“详细”,真的,...“阴谋”“训练进步”);

関数火车(强化学习工具箱)を使用してエージェントに学習させます。学習は計算量の多いプロセスであり,完了するまで数分間かかります。この例の実行中に時間を節約するには,doTrainingに設定することにより,事前学習済みのエージェントを読み込みます。自分でエージェントに学習させるには,doTraining真正的に設定します。

doTraining = false;%切换此为真训练。如果doTraining培训代理商。env, trainingStats =火车(obstacleAvoidanceAgent trainOpts);其他的%为示例加载预训练的代理。负载exampleHelperAvoidObstaclesAgentobstacleAvoidanceAgent结束

强化学习情景管理器を使用すると,学習の進行状況をエピソード単位で追跡できます。エピソード数の増加に伴って,報酬値の増加を確認する必要があります。

シミュレーション

学習済みのエージェントを使用して,障害物を回避しながらマップ内を走行するロボットをシミュレートします。

= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);

可視化

距離センサーの読み取り値を使用して,ロボットが環境内を走行するシミュレーションを可視化するには,補助関数exampleHelperAvoidObstaclesPosePlotを使用します。

我= 1:5:大小(。范围,3)u = out。构成(我:);r =。范围(:,:我);exampleHelperAvoidObstaclesPosePlot(u, mapMatrix, mapScale, r, scanAngles, ax);结束

Figure simpleMap包含一个坐标轴。以“二元占据网格”为标题的坐标轴包含patch、line、image等6个对象。

拡張性

このエージェントを使用して,別のマップでの走行をシミュレートすることができます。オフィス環境の激光雷达スキャンから生成された別のマップを,同じ学習済みモデルと共に使用します。このマップは,学習後に学習済みモデルを適用するという,より現実的なシナリオを表しています。

マップの変更

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”“视图”“二维”);淡定;持有

图office_area_map包含坐标轴。以二进制占用网格为标题的坐标轴包含5个类型为patch、line、image的对象。

シミュレーション

= sim卡(“exampleHelperAvoidObstaclesMobileRobot.slx”);

可視化

我= 1:5:大小(。范围,3)u = out。构成(我:);r =。范围(:,:我);exampleHelperAvoidObstaclesPosePlot(u, mapMatrix, mapScale, r, scanAngles, ax);结束

图office_area_map包含坐标轴。以“二元占据网格”为标题的坐标轴包含patch、line、image等6个对象。