【matlab】单摆鲁棒滑模控制matlab实现从简到繁

本文档详述了如何使用matlab实现单摆的鲁棒滑模控制,涵盖从基本模型到不同类型的滑模控制,包括基本滑模控制、终端滑模控制、快速终端滑模控制及非奇异终端滑模控制。提供了完整代码,便于学习和理解鲁棒滑模控制理论。
摘要由CSDN通过智能技术生成

前言

这是前几周现代鲁棒控制课程一位同学的大作业,ppt做的很详细,但是并没有分享代码,我就根据ppt里的单摆模型以及所涉及到的鲁棒滑模控制方法和思路,自己搭了一套仿真程序,非常便捷,需要切换控制方法时只需要把目标代码取消注释,便可以跑出相应结果,便于新手对鲁棒滑膜控制进行学习。

鲁棒滑模控制

知识点部分引用截图:

定义部分

在这里插入图片描述
在这里插入图片描述

基本设计过程

在这里插入图片描述
在这里插入图片描述

仿真

基本模型

在这里插入图片描述

%% 单摆相关参数
theta = -1.00;                                                           %   攻角deg   x1
omegaz =  2.00;                                                          %   俯仰角速度,deg/s   x2
del_theta = 0.00;                                                           %   攻角微分deg   
del_omegaz =  0.00;                                                          %   俯仰角速度微分,deg/s
g = 9.78;                                                                   %重力加速度
J = 1.2;                                                                   %   转动惯量kg/m^2
L = 1.74;                                                                     %   摆长m
V_s = 0.18;                                                                     %   摩擦系数m/s^2
    %二阶系统非线性微分方程
    del_theta = omegaz;
    del_omegaz = - 0.5 *g * sin(theta) / L - V_s * omegaz / J + u / J;
    f = - 0.5 *g * sin(theta) / L - V_s * omegaz / J;

滑模控制

在这里插入图片描述

    method = '滑模控制';
    s = del_theta + c * theta;                                                              %   滑模面
    u = - ep * sign(s) - f - c * omegaz;        %滑模控制基于趋近律
    u = - f - c * omegaz;        %滑模控制基于等效控制原理

在这里插入图片描述

终端滑模控制

在这里插入图片描述

    method = '终端滑模控制';
    s = omegaz + alpha * theta^(q/p);                                                              %   终端滑模面
    u = - ep * sign(s)- f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于趋近律
    u = - f - alpha * beta * abs(theta)^(beta - 1) * omegaz;        %终端滑模控制基于等效控制原理

<

  • 23
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
单摆是一种典型的非线性系统,其控制较为困难,需要使用一些高级控制方法。其中,鲁棒滑模控制是一种常用的控制方法,具有良好的鲁棒性和稳定性。下面,我们将从简单到复杂,介绍单摆鲁棒滑模控制Matlab实现步骤。 1. 单摆模型建立 单摆运动方程可以表示为: $$\ddot{\theta}+ \frac{g}{l} \sin(\theta) = u$$ 其中,$\theta$ 表示摆角,$g$ 表示重力加速度,$l$ 表示摆长,$u$ 表示控制输入。 为了方便控制设计,我们将上式转化为状态空间形式: $$\begin{cases} \dot{x_1} = x_2 \\ \dot{x_2} = -\frac{g}{l} \sin(x_1) + u \end{cases}$$ 其中,$x_1$ 表示摆角,$x_2$ 表示摆角速度。 在Matlab中,我们可以使用ode45函数求解上述状态方程的数值解。 2. 鲁棒滑模控制 鲁棒滑模控制的基本思想是,在系统状态空间中引入一个滑模面,使得系统状态在滑模面上运动。通过设计滑模控制器,使得系统状态在滑模面上的运动是可控的,并且对于系统中存在的不确定性和干扰具有鲁棒性。 具体来说,我们可以将单摆控制问题转化为以下形式: $$\begin{cases} \dot{x_1} = x_2 \\ \dot{x_2} = -\frac{g}{l} \sin(x_1) + u + d \end{cases}$$ 其中,$d$ 表示系统中的不确定性和干扰。 然后,我们可以将系统状态空间划分为两个区域:滑模面上方和滑模面下方。滑模面的方程为: $$s(x) = x_2 + \lambda \text{sgn}(x_1)$$ 其中,$\lambda$ 是设计参数,$\text{sgn}(x_1)$ 表示 $x_1$ 的符号函数。 对于滑模面上方的状态,我们设计一个控制器使得 $s(x)$ 快速收敛到零。对于滑模面下方的状态,我们设计另一个控制器使得 $s(x)$ 快速收敛到零,并且对于不确定性和干扰具有鲁棒性。 具体来说,我们可以设计如下鲁棒滑模控制器: $$u = -\frac{g}{l} \sin(x_1) - k \text{sgn}(s(x)) - \lambda x_2$$ 其中,$k$ 是控制器增益,$\lambda$ 是滑模面参数。 3. Matlab实现 根据上述鲁棒滑模控制器,我们可以在Matlab实现单摆的控制。具体步骤如下: (1)定义系统常数和初始状态 ``` g = 9.8; % 重力加速度 l = 1; % 摆长 lambda = 10; % 滑模面参数 k = 10; % 控制器增益 x0 = [0.1; 0]; % 初始状态 ``` (2)定义鲁棒滑模控制器 ``` function u = ctl(x, lambda, k) s = x(2) + lambda * sign(x(1)); if s > 0 u = -g/l * sin(x(1)) - k * sign(s) - lambda * x(2); else u = -g/l * sin(x(1)) + k * sign(s) - lambda * x(2); end end ``` (3)求解状态方程 ``` [t, x] = ode45(@(t, x) [x(2); -g/l * sin(x(1)) + ctl(x, lambda, k)], [0, 10], x0); ``` (4)绘制摆角随时间变化图像 ``` plot(t, x(:, 1)); xlabel('时间'); ylabel('摆角'); ``` 完整代码如下: ``` g = 9.8; % 重力加速度 l = 1; % 摆长 lambda = 10; % 滑模面参数 k = 10; % 控制器增益 x0 = [0.1; 0]; % 初始状态 function u = ctl(x, lambda, k) s = x(2) + lambda * sign(x(1)); if s > 0 u = -g/l * sin(x(1)) - k * sign(s) - lambda * x(2); else u = -g/l * sin(x(1)) + k * sign(s) - lambda * x(2); end end [t, x] = ode45(@(t, x) [x(2); -g/l * sin(x(1)) + ctl(x, lambda, k)], [0, 10], x0); plot(t, x(:, 1)); xlabel('时间'); ylabel('摆角'); ``` 运行上述代码,即可得到单摆鲁棒滑模控制的摆角随时间变化图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值