使用Passivity-Based非线性MPC控制机器人的机械手
这个例子展示了如何设计一个passivity-based控制器对于机器人机械手使用非线性模型预测控制(MPC)。
概述
双连杆机器人机械手的动力学可以编写如下[1]。
在这里, , , 2×1向量代表关节角,速度和加速度。转矩控制输入向量 。
是机械惯性矩阵。
是科里奥利矩阵。
是重力向量。
这些机器人动力学中实现manipulatorStateFcn.m
。
控制目标是选择转矩 这样的关节角 跟踪所需的参考 。执行闭环稳定,控制器包括一个被动约束[2]。
被动约束
首先定义被动约束,跟踪误差向量定义为关节角之间的差异和所需的参考角度。
为了达到良好的跟踪性能,考虑存储功能 ,在那里 。求导 获得的关系 ,在那里
。
因此,该系统是被动的
来
。被动输入之间的关系
和转矩
helper函数描述的吗getPassivityInput.m
。
执行闭环稳定,定义被动约束如下[2]。
与 。
对于一个非线性MPC控制器,您定义被动约束通过设置被动
非线性MPC对象的属性。
设计非线性MPC控制器
创建一个非线性MPC对象有四个,四个输出,和两个输入。
nlobj = nlmpc (4 4 2);
在标准成本函数、零重量默认应用到一个或多个ov因为有MVs比ov少。
指定使用机器人动力学函数预测模型状态函数。
nlobj.Model。StateFcn =“manipulatorStateFcn”;
指定一个样本的时间0.1
秒,使用默认的预测和控制的视野。
nlobj。Ts = 0.1;
非线性MPC的违约成本函数是一个标准的二次成本函数,适合参考跟踪。在这个例子中,我们的目标是前两个州跟随给定的参考轨迹。因此,为前两个输出变量指定非零调整权重。
nlobj.Weights。OutputVariables = (2 1 0 0);nlobj.Weights。ManipulatedVariablesRate = [0 0];
指定的字段非线性MPC的被动属性对象。
nlobj.Passivity。EnforceConstraint = true;nlobj.Passivity。InputFcn =“getPassivityInput”;nlobj.Passivity。OutputFcn =“getPassivityOutput”;
闭环仿真
指定状态的初始条件。
x0 = [2; 1; 1; 1];
打开仿真软件模型。金宝app
mdl =“manipulatorNLMPC”;open_system (mdl)
运行模型。
sim (mdl);
查看机械手。关节角达到和保持在目标价值1。
open_system (mdl +“/机械手/国家”)
将非线性MPC控制器的性能没有被动约束,把被动约束从控制器。
nlobj.Passivity。EnforceConstraint = false;
运行仿真。
sim (mdl);
没有被动约束,闭环系统变得不稳定的控制器的设计参数。
引用
[1]Hatanaka武,Nikhil Chopra Masayuki Fujita,和马克•Spong (george w . bush)。Passivity-Based控制和评估网络机器人。通信与控制工程。可汗:施普林格国际出版,2015年。https://doi.org/10.1007/978 - 3 - 319 - 15171 - 7。
[2]废料,托拜厄斯,基督教Ebenbauer和弗兰克Allgower。“非线性模型预测控制:passivity-based方法。”In评估和非线性模型预测控制的发展方向由Findeisen编辑,罗尔夫,弗兰克Allgö回答,和洛伦茨t . Biegler, 151 - 162;纽约:施普林格,2007年。