5-顶刊复现:基于Lyapunov的MPC方法与水下机器人AUV路径跟踪trajectory ...
5-顶刊复现基于Lyapunov的模型预测控制MPC方法用于控制水下机器人AUV的路径跟踪问题trajectory tracking 具体的方法和建模过程可以参考文献。 本代码包括水下机器人的fossen动力学模型matlab的优化算法求解器还包括非线性反步法backstepping 的对比代码非常划算两种对比都有。水下机器人轨迹跟踪这事儿说简单就是让铁疙瘩按预定路线游但真动起手来水面下的洋流干扰、模型非线性、执行器饱和这些坑能让人掉层皮。今天咱们扒拉扒拉基于Lyapunov的模型预测控制LMPC这个路子顺便拿经典的反步法当对照组。先看Fossen老爷子那套动力学模型核心代码长这样function dx auv_model(t,x,u) M [200 0; 0 250]; % 惯性矩阵 D [40 0; 0 45]; % 阻尼矩阵 eta x(1:3); % 位置/姿态 nu x(4:6); % 线/角速度 R [cos(eta(3)) -sin(eta(3)) 0; sin(eta(3)) cos(eta(3)) 0; 0 0 1]; % 旋转矩阵 dx(1:3,1) R*nu; dx(4:6,1) inv(M)*(-D*nu u); end这里有个细节容易踩雷——旋转矩阵R的三阶单位项要是改成1姿态耦合会出幺蛾子。实际调试时发现当横滚角超过60度时用欧拉角描述姿态得注意奇异性问题。LMPC的核心在于把Lyapunov函数揉进目标函数里。看这段优化问题的设置cvx_begin variables U(Nc,2) % 控制序列 V 0; x_pred x_current; for k 1:Np x_pred dyn_model(x_pred, U(k,:)); V V x_pred*Q*x_pred U(k,:)*R*U(k,:); % 传统MPC目标 V V gamma*(x_pred*P*x_pred)^2; % Lyapunov项 end minimize(V) subject to -50 U 50; % 推力约束 cvx_end那个gamma参数是个调参玄学点太大会导致优化器抽风太小又起不到稳定作用。实测中发现用自适应调整策略当跟踪误差超过阈值时gamma按指数增长效果比固定值好使。5-顶刊复现基于Lyapunov的模型预测控制MPC方法用于控制水下机器人AUV的路径跟踪问题trajectory tracking 具体的方法和建模过程可以参考文献。 本代码包括水下机器人的fossen动力学模型matlab的优化算法求解器还包括非线性反步法backstepping 的对比代码非常划算两种对比都有。反观反步法的实现核心就暴力多了function u backstepping(x_des, x_current) k1 diag([0.8, 0.8, 1.2]); k2 diag([1.5, 1.5, 2.0]); z1 x_current(1:3) - x_des(1:3); z2 x_current(4:6) - (-k1*z1 x_des(4:6)); u -k2*z2 - z1 D*nu_current; % 控制律 end这种方法的优势在代码量上碾压——不到十行搞定控制律。但遇到输入饱和时容易翻车比如当所需推力超过推进器上限时会出现积分饱和现象。这时候得加个抗饱和补偿像这样在推力输出后加个钳位u_sat min(max(u, -50), 50); integral_term integral_term (u - u_sat)*0.1; % 抗饱和补偿对比实验里有个有意思的现象在平静水域反步法的跟踪误差居然比LMPC小3%左右但一旦加入横向扰流LMPC的鲁棒性就体现出来了。图1的误差曲线显示反步法在t12s时出现明显超调而LMPC像抹了油似的平滑过渡。不过LMPC也不是银弹计算耗时比反步法高了两个数量级。在NMPC的预测时域设为5步时单步求解时间达到120ms这对AUV的嵌入式系统是个挑战。这时候需要上点trick——用上一时刻的最优解作为当前优化的初始猜测实测能减少约40%的计算时间。最后给个选型建议要是跑定点考察任务反步法加个前馈补偿够用但要是搞复杂路径跟踪比如螺旋下潜还是得咬牙上MPC。毕竟看着控制台里三维轨迹和设定路径严丝合缝重合的时候那感觉——比喝冰阔落还爽
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434646.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!