基于DDPG Agent的四足机器人运动
这个例子展示了如何使用深度确定性策略梯度(DDPG)代理训练一个四足机器人行走。本例中的机器人使用Simscape™Multibody™建模。有关DDPG代理的更多信息,请参见双延迟深度确定性策略梯度代理.
将必要的参数加载到MATLAB®的基本工作空间中。
initializeRobotParameters
四足机器人模型
本例的环境是一个四足机器人,训练目标是用最小的控制力使机器人沿直线行走。
该机器人使用Simscape Multibody和Simscape多体接触力库.主要的结构部件是四条腿和一个躯干。腿通过转动关节与躯干相连。由RL Agent块提供的动作值被缩放并转换为关节扭矩值。这些关节扭矩值被转动关节用来计算运动。
打开模型。
mdl =“rlQuadrupedRobot”;open_system (mdl)
警告:未识别的函数或变量'CloneDetectionUI.internal.CloneDetectionPerspective.register'。
观察
机器人环境为代理提供了44个观测值,每个观测值都在-1到1之间标准化。这些观察结果是:
躯干重心的Y(垂直)和Z(侧向)位置
代表躯干方向的四元数
躯干在重心处的X(向前),Y(垂直)和Z(横向)速度
躯干的滚动,俯仰和偏航速率
每条腿臀部和膝关节的角度位置和速度
每条腿与地面接触的法力和摩擦力
前一个时间步长的动作值(每个关节的扭矩)
对于所有四条腿,髋关节和膝关节角度的初始值分别设置为-0.8234和1.6468 rad。关节的中性位置为0弧度。当腿被拉伸到最大并垂直于地面时,腿处于中性位置。
行动
代理生成8个在-1到1之间标准化的操作。在乘以一个比例因子后,这些对应于转动关节的八个关节扭矩信号。每个关节的扭矩范围为+/ - 10n·m。
奖励
在训练过程中的每个时间步骤中,向代理提供以下奖励。这个奖励函数通过为正向的前进速度提供正向的奖励来鼓励代理前进。它还通过提供恒定的奖励( )。奖励函数中的其余条款是阻止不希望的状态的惩罚,例如从所需的高度和方向的大偏差或使用过多的关节扭矩。
在哪里
是躯干质心在x方向上的速度。
而且 分别为环境的采样时间和最终模拟时间。
是躯干质心与期望高度0.75 m的缩放高度误差。
是躯干的俯仰角。
关节的动作值是多少 从之前的时间步长。
集终止
在训练或模拟过程中,如果出现下列任何一种情况,本集将终止。
躯干重心离地面的高度低于0.5米(下降)。
躯干的头部或尾部在地面以下。
任何膝关节都在地面以下。
滚转、俯仰或偏航角是在边界外(分别为+/ - 0.1745、+/ - 0.1745和+/ - 0.3491 rad)。
创建环境界面
为观测集指定参数。
numObs = 44;obsInfo = rlNumericSpec([numObs 1]);obsInfo。Name =“观察”;
为动作集指定参数。
numAct = 8;actInfo = rlNumericSpec([numAct 1],“LowerLimit”, 1“UpperLimit”1);actInfo。Name =“扭矩”;
使用强化学习模型创建环境。
BLK = [mdl,' / RL代理'];env = rl金宝appSimulinkEnv(mdl,blk,obsInfo,actInfo);
在训练过程中,复位函数将初始关节角度和角速度引入随机偏差。
env。ResetFcn = @quadrupedResetFcn;
创建DDPG代理
DDPG代理通过使用临界值函数表示来近似给定观察和操作的长期奖励。代理还使用参与者表示,根据观察结果决定采取何种操作。这个例子中的演员和评论家网络是受到[2]的启发。
有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示.有关为DDPG代理创建神经网络的示例,请参见训练DDPG Agent控制双积分系统.
方法在MATLAB工作区中创建网络createNetworks
helper函数。
createNetworks
,还可以交互式地创建演员和评论家网络深度网络设计器应用程序。
查看关键网络配置。
情节(criticNetwork)
使用指定代理选项rlDDPGAgentOptions
.
agentOptions = rlDDPGAgentOptions;agentOptions。SampleTime = Ts;agentOptions。折扣因子= 0.99;agentOptions。MiniBatchSize = 250;agentOptions。ExperienceBufferLength = 1e6;agentOptions。TargetSmoothFactor = 1e-3; agentOptions.NoiseOptions.MeanAttractionConstant = 0.15; agentOptions.NoiseOptions.Variance = 0.1;
创建rlDDPGAgent
对象用于代理。
agent = rlDDPGAgent(actor,批评家,agentOptions);
指定培训项目
要培训代理,首先指定以下培训选项:
每个训练集最多运行10,000集,每个训练集最长持续时间
maxSteps
时间的步骤。在“事件管理器”对话框中显示培训进度
情节
选项)并禁用命令行显示(设置详细的
选项)。当代理在连续250集中获得的平均累积奖励大于190时停止训练。
当累积奖励大于200时,为每一集保存一个代理副本。
maxEpisodes = 10000;maxSteps = floor(Tf/Ts);trainOpts = rlTrainingOptions(...“MaxEpisodes”maxEpisodes,...“MaxStepsPerEpisode”maxSteps,...“ScoreAveragingWindowLength”, 250,...“详细”,真的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“AverageReward”,...“StopTrainingValue”, 190,...“SaveAgentCriteria”,“EpisodeReward”,...“SaveAgentValue”, 200);
要并行地训练代理,请指定以下训练选项。并行训练需要并行计算工具箱™软件。如果没有安装并行计算工具箱™软件,请设置UseParallel
来假
.
设置
UseParallel
t选项街
.并行异步地训练代理。
每隔32步,每个worker向主机发送经验。
DDPG代理要求工人发送
“经验”
给主人。
trainOpts。UseParallel = true;trainOpts.ParallelizationOptions.Mode =“异步”;trainoptions . parallelizationoptions . stepsuntildataissent = 32;trainOpts.ParallelizationOptions.DataToSendFromWorkers =“经验”;
火车代理
培训代理使用火车
函数。由于机器人模型的复杂性,这个过程需要大量的计算,需要几个小时才能完成。为了在运行此示例时节省时间,请通过设置加载预训练的代理doTraining
来假
.要亲自训练特工,请设置doTraining
来真正的
.由于并行训练的随机性,您可以从下面的图中预期不同的训练结果。
doTraining = false;如果doTraining培训代理。trainingStats = train(agent,env,trainOpts);其他的为示例加载预训练的代理。负载(“rlQuadrupedAgent.mat”,“代理”)结束
模拟训练代理
固定随机生成器种子的再现性。
rng (0)
为了验证经过训练的智能体的性能,需要在机器人环境中进行仿真。有关代理模拟的详细信息,请参见rlSimulationOptions
而且sim卡
.
simOptions = rlSimulationOptions(“MaxSteps”, maxSteps);experience = sim(env,agent,simOptions);
有关如何训练DDPG代理行走在Simscape™Multibody™中建模的双足机器人和人形步行者的示例,请参见使用强化学习代理训练双足机器人行走而且训练人形步行者(Simscape多体),分别。
参考文献
Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tassa,等。“丰富环境中运动行为的出现”。ArXiv: 1707.02286 (Cs)2017年7月10日。https://arxiv.org/abs/1707.02286.
利利克拉普、蒂莫西·P.、乔纳森·j·亨特、亚历山大·普里策尔、尼古拉斯·赫斯、汤姆·埃雷兹、尤瓦尔·塔萨、大卫·西尔弗和达安·威尔斯特拉。“深度强化学习的持续控制”。ArXiv:1509.02971 [Cs, Stat]2019年7月5日。https://arxiv.org/abs/1509.02971.