💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
摘要:
该通信提出了一个系统的自适应滑模控制器设计,用于具有不确定参数的非线性系统的鲁棒控制。开发了一种无需高频切换的适应调整方法,以处理未知但有界的不确定性。跟踪性能有保证。通过使用李雅普诺夫理论证明了系统的鲁棒性和稳定性。不确定性的上限不需要提前知道。因此,所提出的方法可以有效地实施。实验结果证明了所提出的控制方法的有效性。
滑模控制(SMC)因其在匹配条件下对参数变化和外部干扰的鲁棒性而备受关注–。控制系统的鲁棒性非常重要,因为在实际应用中存在各种不确定性。例如,机器人的动力学是非线性的、耦合的,并且是时变的。这些非线性系统存在结构化或非结构化的不确定性和外部干扰,例如负载变化。因此,开发简单且鲁棒的控制器以应对不确定系统具有重要意义。
一般来说,滑模控制需要一个适当的控制律,使得滑模在有限时间内达到。系统轨迹会向滑模面移动并停留在其上。传统的滑模控制采用大增益的控制律,这会导致在滑模阶段出现不希望的抖动现象。控制输入的抖动是不希望的,因为它可能会激发高频动态并导致不稳定。为了消除抖动,通常采用边界层技术,并且已经开发了许多自适应方法来调整控制器增益–。通过这些方法,系统性能得到了比较满意的改进。在和中,当控制律中使用多个参数自适应时,系统性能令人满意。另一种有趣的方法为离散非线性系统生成低抖动的控制信号。近年来,智能控制器被提出与滑模控制相结合。例如,提出了模糊神经网络和自适应模糊滑模控制器以减少控制抖动。在中研究了一种模糊控制器,它可以在不产生高频抖动的情况下模拟滑模控制的动作。最近,一些复杂的控制结构被提出,例如用于机器人操作的模糊监督滑模结合神经网络控制,以及将循环小脑模型语言控制器应用于自适应模糊滑模控制器的最新工作。然而,上述所有文献都没有解决不确定输入系数矩阵的问题,也没有保证跟踪性能。另一项最近的工作在中提出了结合模糊滑模控制方法、自适应调整规则和边界层技术的方法,但其对不确定性的假设很难应用。
在本文中,提出了一种系统且简单的带有自适应调整的滑模控制(ASMC)。进一步处理了未知的系统和输入系数矩阵。基于李雅普诺夫理论,保证了系统轨迹接近滑模面。只需要一个自适应增益参数。控制系统的稳定性和鲁棒性得到了证明,跟踪性能也得到了保证。所提出的方法相对简单且有效。通过计算机仿真和实验结果展示了其鲁棒性和令人满意的性能。
结论
本文提出了一种针对一类不确定非线性系统的有效自适应滑模控制(ASMC)方法。该方法仅需要一个自适应增益参数。不仅控制系统对参数变化和外部干扰具有鲁棒性,而且跟踪能力也得到了保证。特别值得一提的是,该方法不需要系统不确定性的上界信息。因此,所提出的方法可以有效地实现。在应用该方法时,自适应增益参数的初始设置应小于系统不确定性的上界。然而,这并不是该方法的真正限制,因为可以选择一个足够小的数值。为了安全起见,建议对控制输入设置一个限幅器,以避免自适应增益参数意外无限制地增加。
📚2 运行结果
部分代码:
%% What happens if I use large weights? Or increased control cost near end
inp = DDPInput([3,3,3]);
inp.ddp = true;
inp.ut_scale = 9;
sol = entry_stochastic_gains_params(inp);
save('HighControlWeight.mat','sol')
sols{4} = sol;
inp.guess = sol.u;
for i = 0:2
inp.weights(1) = i;
sols{i+1} = entry_stochastic_gains_params(inp);
end
save('HighControlWeights.mat','sols')
%%
inp = DDPInput([1,1,0.2]);
inp.horizon = 250;
% inp.guess = ones(1,inp.horizon)*0.8;
% inp.guess(linspace(5505,460,inp.horizon) > 3000) = 0.2;
% Optimize gains for the new initial state/cov
inp.ut_scale = [0, 5, 10];
inp.terminal_plots = true;
sol_gains = FixedGainOpt(inp);
inp.ut_scale = 15;
inp.gains = sol_gains.input.gains;
sol = entry_stochastic_gains_params(inp);
inp.ut_scale = [0, 5, 10];
inp.terminal_plots = false;
inp.guess = sol.u;
sol_est = FixedGainOpt(inp, false);
sol_opt = FixedGainOpt(inp);
sols = {sol, sol_est, sol_opt};
save('MSLDetailedExample.mat', 'sols')
%% Use this block to re-optimize a solution in 'sol'
inp = DDPInput([1,1,0.2]);
inp.ut_scale = [0, 5, 10];
inp.horizon = 250;
inp.terminal_plots = false;
inp.guess = sol.u;
sol_opt = FixedGainOpt(inp);
%% Estimate the open loop dispersions for the heavy vehicle, guess traj
inp = DDPInput([0,0,0]);
inp.ut_scale = [0, 5, 10];
inp.ut_scale = 15;
inp.horizon = 250;
inp.gains = [0,0,0];
inp.terminal_plots = true;
sol = FixedGainOpt(inp, 0);
% SolutionPlots(sol)
% SolutionPlots(sol,'HeavyOpenLoop')
%% Call the Fixed GainOpt function with K=0 and K=input.gains
% sweep over alpha maybe? need to save one of each for use in python
% technically, for the closed loop especially, the linearization should use
% the nominal trajectory as the reference, set the weights on all other
% sigma points to zero
clear; clc
inp = DDPInput([0,0,0]);
inp.ut_scale = 12;
inp.horizon = 250;
inp.lod = 0.24;
sol = FixedGainOpt(inp);
% save('UTExample_ClosedLoop', 'sol')
% inp.gains = [0,0,0]';
% sol = FixedGainOpt(inp);
% save('UTExample_OpenLoop', 'sol')
%% Gather convergence data for three solutions, param unc only
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、文章下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取