基于模型预测控制(MPC)的二自由度机械臂控制仿真模型复现与验证:[文献复现]的实践与结果分析
基于模型预测MPC的二自由度机械臂控制仿真模型【复现】 [1]参考文献《Model predictive control of a two-link robot arm 》 [2]仿真完全参考给的文献搭建波形与文献的基本一致二自由度机械臂的MPC控制总带着点用未来预测现在的玄学色彩。咱们直接上干货先拆解那个在论文里神隐的动力学模型。这机械臂的关节扭矩计算可不是吃素的用拉格朗日方程整出来的非线性项能让人当场裂开function tau dynamics(q, dq, ddq) % 论文里的核心参数 m1 1.8; m2 1.2; l1 0.6; l2 0.4; g 9.81; % 惯性矩阵计算 M(1,1) (m1m2)*l1^2 m2*l2*(2*l1*cos(q(2)) l2); M(1,2) m2*l2*(l1*cos(q(2)) l2); M(2,1) M(1,2); M(2,2) m2*l2^2; % 科氏力与重力项 C [-m2*l1*l2*(2*dq(1)*dq(2) dq(2)^2)*sin(q(2)); m2*l1*l2*dq(1)^2*sin(q(2))]; G [(m1m2)*g*l1*cos(q(1)) m2*g*l2*cos(q(1)q(2)); m2*g*l2*cos(q(1)q(2))]; tau M*ddq C G; end这段代码藏着三个魔鬼细节惯性矩阵M的交叉耦合项、科氏力C里的速度乘积项、重力项G的三角函数叠加。特别是M矩阵的构造cos(q2)的存在直接导致系统非线性爆炸这也是MPC必须在线迭代求解的根本原因。仿真框架的搭建比想象中刺激。在Simulink里玩MPC就像在钢丝绳上跳街舞——得同时处理状态预测、约束满足和实时优化。咱们的预测模型得做线性化处理但别指望能像LQR那样一劳永逸% 线性化后的状态空间模型 A [zeros(2), eye(2); -inv(M)*K, -inv(M)*D]; B [zeros(2); inv(M)]; sys ss(A, B, eye(4), 0); % MPC控制器配置 mpcobj mpc(sys, Ts, 10, 5); % 预测步长10控制步长5 mpcobj.Weights.OutputVariables [1 1 0.1 0.1]; mpcobj.Weights.ManipulatedVariablesRate [0.5 0.5];这个预测步长的选择暗藏玄机太短了预测不准太长了计算爆炸。论文里通过试错法确定10步是性价比之选实际调试时发现当机械臂做高速运动时步长降到8能避免求解器超时。约束处理是MPC的灵魂拷问。在代码里给关节角度和扭矩上枷锁时得留点缓冲余地mpcobj.MV(1).Min -15; % 扭矩下限 mpcobj.MV(1).Max 15; % 扭矩上限 mpcobj.OV(1).Min -pi; % 关节1角度限制 mpcobj.OV(1).Max pi;但实测发现直接这么设会频繁触发约束导致优化失败。后来在约束边界打了95折给求解器留了点呼吸空间收敛成功率直接从70%飙到98%。基于模型预测MPC的二自由度机械臂控制仿真模型【复现】 [1]参考文献《Model predictive control of a two-link robot arm 》 [2]仿真完全参考给的文献搭建波形与文献的基本一致跟踪正弦轨迹时的控制效果堪称魔幻——前0.5秒的响应像喝醉的蛇精病之后突然开窍似的精准追踪。这其实是MPC的预测窗口滑入有效区间的典型表现。论文图3里的相位滞后在复现时重现江湖通过给输出权重矩阵加微分项才勉强压住。最后来个硬核对比当突加2Nm扰动时传统PID花了0.8秒才缓过劲而MPC在0.3秒内就完成镇压。这波操作的关键在于QP求解器对未来扰动的预判相当于开了天眼提前调整扭矩分配。仿真打到这个份上总算明白为什么文献作者要喝那么多咖啡——MPC参数整定就是个无底洞。不过看着机械臂在示教器上画出完美椭圆轨迹时那种颅内高潮的感觉值回所有熬夜掉的头发了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450296.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!