为飞行机器人模仿非线性MPC控制器
这个例子展示了如何训练、验证和测试一个深层神经网络(款),模仿的行为一个飞行机器人的非线性模型预测控制器。然后比较深的行为与原来的神经网络控制器。深层神经网络训练,这个示例使用的数据聚合(匕首)方法[1]。
非线性模型预测控制(NLMPC)解决了约束非线性优化问题实时的基于植物的当前状态。有关NLMPC的更多信息,请参阅非线性MPC(模型预测控制工具箱)。
自从NLMPC解决优化问题的一种开环的方式,有可能取代培训款控制器。这样做是一个很好的选择,因为评估一个款可以更加实时计算效率比解决非线性优化问题。
如果训练相当接近款控制器行为,您可以部署的网络控制应用程序。您还可以使用网络作为训练演员的温暖的起点的强化学习代理网络。为例,所以训练的MPC款应用程序,看看火车DDPG代理与Pretrained演员网络。
设计非线性MPC控制器
设计一个非线性MPC控制器的飞行机器人。飞行机器人的动力学是一样的轨迹优化和控制使用非线性MPC的飞行机器人(模型预测控制工具箱)的例子。首先,为控制变量定义的极限,这是机器人推力水平。
umax = 3;
创建非线性MPC控制器对象nlobj
。为了减少命令窗口输出,禁用MPC更新消息。有关更多信息,请参见nlmpc
(模型预测控制工具箱)。
mpcverbosity从;nlobj = createMPCobjImFlyingRobot (umax);
准备输入数据
负载的输入数据DAggerInputDataFileImFlyingRobot.mat
。数据集包含的列:
是沿着x轴机器人的位置。
沿y轴机器人的位置。
是机器人的姿态。
是机器人的速度沿轴。
是机器人的速度沿轴。
是机器人的角速度。
的推力左侧飞行机器人吗
的推力右侧飞行机器人吗
左边是推力计算NLMPC吗
右边是推力计算NLMPC吗
中的数据DAggerInputDataFileImFlyingRobot.mat
是由计算机随机生成的州NLMPC控制动作(
,
,
,
,
,
),和之前的控制动作(
,
)。生成自己的训练数据,使用collectDataImFlyingRobot
函数。
负载输入数据。
文件名=“DAggerInputDataFileImFlyingRobot.mat”;DAggerData =负载(文件名);数据= DAggerData.data;existingData =数据;numCol =大小(数据,2);
创建深层神经网络
创建深层神经网络,训练后模仿NLMPC控制器。网络体系结构使用以下类型的层。
imageInputLayer
神经网络的输入层。fullyConnectedLayer
增加输入权重矩阵,然后添加一个偏差向量。reluLayer
是神经网络的激活函数。tanhLayer
限制范围的价值[1]。scalingLayer
价值尺度范围(3、3)。regressionLayer
定义了损失函数的神经网络。
层的网络定义为一个数组对象。
numObs = numCol-2;numAct = 2;hiddenLayerSize = 256;imitateMPCNetwork = [featureInputLayer (numObs) fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (hiddenLayerSize) reluLayer fullyConnectedLayer (numAct) tanhLayer scalingLayer(规模= umax) regressionLayer);
画出网络。
情节(layerGraph (imitateMPCNetwork))
行为克隆方法
一种方法学习专家使用监督学习策略是克隆方法的行为。这种方法将专家示威(NLMPC控制行动来响应观测)政府行动对和监督学习适用于训练网络。
指定培训选项。
% Intialize验证单元阵列validationCellArray = {0};选择= trainingOptions (“亚当”,…Verbose = false,…情节=“训练进步”,…洗牌=“every-epoch”,…MiniBatchSize = 512,…ValidationData = validationCellArray,…InitialLearnRate = 1 e - 3,…ExecutionEnvironment =“cpu”,…GradientThreshold = 10,…MaxEpochs = 40…);
你可以训练行为克隆神经网络通过遵循下面的步骤
收集数据使用
collectDataImFlyingRobot
函数。火车克隆网络使用的行为
behaviorCloningTrainNetwork
函数。
款使用行为的训练克隆减少之间的差距和NLMPC性能款。然而,克隆神经网络行为未能正确模仿NLMPC控制器的行为在一些随机生成的数据。
训练一个款是一个计算密集型的过程。在这个例子中,为了节省时间,加载一个pretrained神经网络对象。
负载(“behaviorCloningMPCImDNNObject.mat”);
数据聚合方法
改善款的性能,您可以使用交互式演示学习策略的方法。匕首是一个迭代的方法,在这种方法中,款是在闭环运行环境。的专家,在这种情况下,NLMPC控制器,基于美国输出操作访问了款。通过这种方式,更多的培训数据聚合和款是重新训练来提高性能。有关更多信息,请参见[1]。
训练神经网络使用DAggerTrainNetwork
函数。它创造了DAggerImFlyingRobotDNNObj.mat
文件,其中包含以下信息。
DatasetPath:
每次迭代路径相对应的数据集policyObjs:
政策,在每个迭代训练finalData:
总训练数据收集到最后的迭代finalPolicy:
最好的政策在所有收集到的政策
首先,创建和初始化参数进行训练。使用网络训练使用克隆行为(behaviorCloningNNObj.imitateMPCNetObj
)作为匕首训练的起点。
[dataStruct, nlmpcStruct tuningParamsStruct neuralNetStruct] =…loadDAggerParameters (existingData numCol、nlobj umax,…选项,behaviorCloningNNObj.imitateMPCNetObj);
为了节省时间,负载pretrained神经网络通过设置doTraining
来假
。训练自己的匕首,集doTraining
来真正的
。
doTraining = false;如果doTraining匕首= DAggerTrainNetwork (…nlmpcStruct,…dataStruct,…neuralNetStruct,…tuningParamsStruct);其他的负载(“DAggerImFlyingRobotDNNObj.mat”);结束款= DAgger.finalPolicy;
作为替代,你可以训练神经网络修正策略更新规则使用DAggerModifiedTrainNetwork
函数。在这个函数中,每20训练迭代后,款将从过去20迭代最优的配置。与神经网络对象运行这个例子使用修改后的匕首方法,使用DAggerModifiedImFlyingRobotDNNObj.mat
文件。
拿匕首网络训练和NLMPC控制器
比较的性能NLMPC控制器和训练,款运行闭环模拟飞行机器人模型。
设置初始条件的状态飞行机器人( , , , , , )和飞行机器人的控制变量( , )。
x0 = (-1.8200 0.5300 -2.3500 1.1700 -1.0400 0.3100) ';情况= (-2.1800 - -2.6200)';
定义仿真时间,样品时间和数量的模拟步骤。
%的持续时间Tf = 15;%样品时间Ts = nlobj.Ts;%仿真步骤Tsteps = Tf / Ts + 1;
NLMPC控制器的闭环仿真运行。
(xHistoryMPC抽搐,uHistoryMPC] =…simModelMPCImFlyingRobot (x0,情况、nlobj Tf);toc
运行时间是35.993492秒。
运行一个闭环仿真训练的匕首网络。
(xHistoryDNN抽搐,uHistoryDNN] =…simModelDAggerImFlyingRobot (x0,情况,款Ts, Tf);toc
运行时间是2.622887秒。
阴谋的结果,比较NLMPC和训练轨迹款。
plotSimResultsImFlyingRobot (nlobj…xHistoryMPC、uHistoryMPC xHistoryDNN、uHistoryDNN umax, Tf);
匕首神经网络成功地模仿的行为NLMPC控制器。飞行机器人状态和控制行动轨迹控制器和匕首深层神经网络紧密结合。款的闭环仿真时间明显小于NLMPC的控制器。
动画的飞行机器人训练匕首网络
验证的性能训练款,款飞行机器人动画数据闭环模拟。飞行机器人成功降落在原点。
Lx = 5;Ly = 5;为ct = 1: Tsteps x = xHistoryDNN (ct, 1);y = xHistoryDNN (ct, 2);θ= xHistoryDNN (ct, 3);tL = uHistoryDNN (ct, 1);tR = uHistoryDNN (ct, 2);rl.env.viz.plotFlyingRobot (x, y,θ,tL、tR、Lx, Ly);暂停(0.05);结束
%打开MPC的消息mpcverbosity在;
引用
[1]阻塞性睡眠呼吸暂停综合症,孝,乔妮Pajarinen,格哈德•诺伊曼,j . Andrew Bagnell Pieter Abbeel,简·彼得斯。“模仿学习算法的角度”。基金会和机器人技术的趋势7,不。1 - 2 (2018):1 - 179。https://doi.org/10.1561/2300000053。
另请参阅
功能
trainNetwork
|预测
|nlmpcmove
(模型预测控制工具箱)
对象
SeriesNetwork
|nlmpc
(模型预测控制工具箱)
相关的例子
更多关于
- 非线性MPC(模型预测控制工具箱)