滑模控制c实例
- 格式:docx
- 大小:3.96 KB
- 文档页数:4
基于趋近律的滑模控制一、基于趋近律的滑模控制 1、控制器的设计 针对状态方程Bu Ax x+= (1) 采用趋近律的控制方式,控制律推导如下:Cx s = (2)slaw x C s == (3) 其中slaw 为趋近律。
将状态方程式(1)代人(2)得)()(1sCAx CB u +-=- (4) 可见,控制器的抖振程度取决于趋近律s 表达式中的切换项。
2、仿真实例对象为二阶传递函数: ass bs G p +=2)( 其中a=25, b=133。
)(s Gp 可表示为如下状态方程:Bu Ax x+= 其中⎢⎣⎡=00A ⎥⎦⎤-251 , ⎥⎦⎤⎢⎣⎡=1330B 。
在仿真程序中,M=1为等速趋近律,M=2为指数趋近律,M=3为幂次趋近律,M=4为一般趋近律。
取M=2,采用指数趋近律,其中C=[15,1] , ε=5,k=10,作图取样时间为0.001,仿真程序如下。
二、程序 主程序chap2_4.m clear all; close all;global M A B C eq kts=0.001;T=2;TimeSet=[0:ts:T];c=15;C=[c,1];para=[c];[t,x]=ode45('chap2_4eq',TimeSet,[0.50 0.50],[],para);x1=x(:,1);x2=x(:,2);s=c*x(:,1)+x(:,2);if M==2for kk=1:1:T/ts+1xk=[x1(kk);x2(kk)];sk(kk)=c*x1(kk)+x2(kk);slaw(kk)=-eq*sign(sk(kk))-k*sk(kk); %Exponential trending lawu(kk)=inv(C*B)*(-C*A*xk+slaw(kk));endendfigure(1);plot(x(:,1),x(:,2),'r',x(:,1),-c*x(:,1),'b');xlabel('x1');ylabel('x2');figure(2);plot(t,x(:,1),'r');xlabel('time(s)');ylabel('x1');figure(3);plot(t,x(:,2),'r');xlabel('time(s)');ylabel('x2');figure(4);plot(t,s,'r');xlabel('time(s)');ylabel('s');if M==2figure(5);plot(t,u,'r');xlabel('time(s)');ylabel('u');end子程序chap2_4eq.mfunction dx=DynamicModel(t,x,flag,para)global M A B C eq ka=25;b=133;c=para(1);s=c*x(1)+x(2);A=[0 1;0 -a];B=[0;b];M=2;eq=5.0;if M==2 % M=1为等速趋近律,M=2为指数趋近律,M=3为幂次趋近律,M=4为一般趋近律slaw=-eq*sign(s); %Equal velocity trending lawelseif M==2k=10;slaw=-eq*sign(s)-k*s; %Exponential velocity trending lawelseif M==3k=10;alfa=0.50;slaw=-k*abs(s)^alfa*sign(s); %Power trending lawelseif M==4k=1;slaw=-eq*sign(s)-k*s^3; %General trending lawendu=inv(C*B)*(-C*A*x+slaw); dx=zeros(2,1); dx(1)=x(2); dx(2)=-a*x(2)+b*u;三、仿真结果(1)M=2时,指数趋近律x1x 2图1 滑模运动的相轨迹0.20.40.60.81 1.2 1.4 1.6 1.82time(s)x 1图2 x 1 的收敛过程00.20.40.60.81 1.2 1.4 1.6 1.82-2.5-2-1.5-1-0.50.5time(s)x 2图3 x 2 的收敛过程s00.20.40.60.81 1.2 1.4 1.6 1.82time(s)图4 切换函数s Arrayu00.20.40.60.81 1.2 1.4 1.6 1.82time(s)图5 控制器输出(2)M=1时,等速趋近律00.10.20.30.40.50.60.7-8-7-6-5-4-3-2-101x1x 2图1 滑模运动的相轨迹0.20.40.60.81 1.2 1.4 1.6 1.8200.10.20.30.40.50.60.7time(s)x 1图2 x 1 的收敛过程0.20.40.60.81 1.2 1.4 1.6 1.82-0.4-0.3-0.2-0.100.10.20.30.40.5time(s)x 2图3 x 2 的收敛过程0.20.40.60.81 1.2 1.4 1.6 1.82-1012345678time(s)s图4 切换函数s(3)M=3时,幂次趋近律0.10.20.30.40.50.60.7-8-7-6-5-4-3-2-101x1x 2图1 滑模运动的相轨迹0.20.40.60.81 1.2 1.4 1.6 1.82time(s)x 1图2 x 1 的收敛过程time(s)x 2图3 x 2 的收敛过程0.20.40.60.81 1.2 1.4 1.6 1.82time(s)s图4 切换函数s(4)M=4时,一般趋近律x1x 2图1 滑模运动的相轨迹-0.100.10.20.30.40.50.6time(s)x 1图2 x 1 的收敛过程time(s)x 2图3 x 2 的收敛过程time(s)s图4 切换函数s。
c语言滑模控制算法滑模控制(Sliding Mode Control,SMC)是一种非线性控制方法,主要用于处理系统的不确定性和外界干扰。
滑模控制的主要思想是在状态空间中设计一个滑动模态,该模态对应于系统的一种特殊状态,当系统状态到达滑动模态时,系统将沿着滑动模态向原点滑动,直到系统达到平衡状态。
以下是一个简单的滑模控制的C语言实现:#include <stdio.h>#include <math.h>// 系统参数double Kp = 1.0; // 比例增益double Ki = 0.01; // 积分增益double Kd = 0.1; // 微分增益double integral = 0; // 积分项double pre_error = 0; // 上一次的误差// 控制器函数double sliding_mode_control(double setpoint, double actual_position) {double error = setpoint - actual_position; // 计算误差integral += error; // 积分项增加double derivative = error - pre_error; // 计算误差的导数pre_error = error; // 更新上一次的误差double u = Kp * error + Ki * integral + Kd * derivative; // 计算控制输入return u;}int main() {double setpoint = 10.0; // 设置点double actual_position = 0.0; // 实际位置for (int i = 0; i < 100; i++) {double control_input = sliding_mode_control(setpoint, actual_position); // 计算控制输入// 在这里添加实际系统的控制逻辑,例如:更新实际位置等actual_position += control_input; // 更新实际位置printf("Time: %d, Setpoint: %f, Actual Position: %f, Control Input: %f ", i, setpoint, actual_position, control_input); // 打印信息}return 0;}这个简单的例子中,我们设定了一个期望的位置setpoint和实际的位置actual_position。
滑模控制滑模变结构理论⼀、引⾔滑模变结构控制本质上是⼀类特殊的⾮线性控制,其⾮线性表现为控制的不连续性,这种控制策略与其它控制的不同之处在于系统的“结构”并不固定,⽽是可以在动态过程中根据系统当前的状态(如偏差及其各阶导数等)有⽬的地不断变化,迫使系统按照预定“滑动模态”的状态轨迹运动。
由于滑动模态可以进⾏设计且与对象参数及扰动⽆关,这就使得变结构控制具有快速响应、对参数变化及扰动不灵敏、⽆需系统在线辩识,物理实现简单等优点。
该⽅法的缺点在于当状态轨迹到达滑模⾯后,难于严格地沿着滑模⾯向着平衡点滑动,⽽是在滑模⾯两侧来回穿越, 从⽽产⽣颤动。
滑模变结构控制出现于20世纪50年代,经历了 50余年的发展,已形成了⼀个相对独⽴的研究分⽀,成为⾃动控制系统的⼀种⼀般的设计⽅法。
以滑模为基础的变结构控制系统理论经历了 3个发展阶段.第1阶段为以误差及其导数为状态变量研究单输⼊单输出线性对象的变结构控制; 20世纪60年代末开始了变结构控制理论研究的第2阶段, 研究的对象扩⼤到多输⼊多输出系统和⾮线性系统;进⼊80年代以来, 随着计算机、⼤功率电⼦切换器件、机器⼈及电机等技术的迅速发展, 变结构控制的理论和应⽤研究开始进⼊了⼀个新的阶段, 所研究的对象已涉及到离散系统、分布参数系统、滞后系统、⾮线性⼤系统及⾮完整⼒学系统等众多复杂系统, 同时,⾃适应控制、神经⽹络、模糊控制及遗传算法等先进⽅法也被应⽤于滑模变结构控制系统的设计中。
⼆、基本原理带有滑动模态的变结构控制叫做滑模变结构控制(滑模控制)。
所谓滑动模态是指系统的状态被限制在某⼀⼦流形上运动。
通常情况下,系统的初始状态未必在该⼦流形上,变结构控制器的作⽤在于将系统的状态轨迹于有限时间内趋使到并维持在该⼦流形上,这个过程称为可达性。
系统的状态轨迹在滑动模态上运动并最终趋于原点,这个过程称为滑模运动。
滑模运动的优点在于,系统对不确定参数和匹配⼲扰完全不敏感。
小型四旋翼飞行器的滑模控制王辰璐;陈增强;孙明玮【摘要】A sliding mode control scheme was proposed for a 6 degree of free quadrotor model to improve the robustness of the quadrotor control system. Firstly, the quadrotor model was divided into two parts which included a fully-actuated subsystem and an under-actuated subsystem. The fully-actuated subsystem was composed of two independent loops with altitude and yaw angle, while the under-actuated subsystem had four state variables and two control variables. Secondly, a backstepping based on sliding mode controller and furthermore a finite time terminal sliding mode controller were proposed to the fully-actuated subsystem, and then a cascade sliding mode controller was designed to control the under-actuated subsystem which was transformed into a cascade standard form. Thirdly, the stability of the designed control system was proved by using Lyapunov stability theorem. The results show that the proposed quadrotor control scheme is effective, it not only has good robustness and fast tracking dynamic performance, but also has the ability to restrain buffeting.%针对1种六自由度四旋翼模型,设计滑模控制器来提高控制系统的鲁棒性.首先将四旋翼模型划分为全驱动和欠驱动2部分,全驱动子系统由高度和偏航角2个独立回路组成,而欠驱动子系统则包含4个被控量和2个控制量.然后针对全驱动系统的2个回路设计了基于反步法(Backstepping)的滑模控制,并进一步推导出有限时间终端滑模控制器.将欠驱动子系统写成一种级联标准型,并给出一种欠驱动级联形式的滑模控制器.采用Lyapunov稳定性理论证明所设计的滑模控制系统的稳定性.研究结果表明:所提出的四旋翼控制器是有效的,它不仅具有良好的鲁棒性和快速跟踪动态性能,而且能够有效地抑制抖振现象.【期刊名称】《中南大学学报(自然科学版)》【年(卷),期】2017(048)004【总页数】6页(P1006-1011)【关键词】四旋翼飞行器;欠驱动系统;滑模控制;终端滑模控制;反步法【作者】王辰璐;陈增强;孙明玮【作者单位】南开大学计算机与控制工程学院,天津,300350;天津市智能机器人技术重点实验室,天津,300350;南开大学计算机与控制工程学院,天津,300350;天津市智能机器人技术重点实验室,天津,300350;南开大学计算机与控制工程学院,天津,300350;天津市智能机器人技术重点实验室,天津,300350【正文语种】中文【中图分类】TP272四旋翼飞行器具有机动性强、控制灵活的特点,可以实现垂直起降、定点悬停等飞行姿态,因而被广泛应用于勘测、航拍、监控、侦查等活动中,近年来已经成为军事、民用领域的研究热点。
滑模控制:在数学中应用的综述Alessandro Pisano, Elio Usai公式要用公式编辑器输入!摘要:本文介绍了一个关于滑模变结构控制系统的简短的综述。
从等号右边不连续的动态系统的滑模开始,考虑到滑模控制系统的经典方法,并且得出对于这种不确定系统的控制的一般结论。
然后,提出高阶滑模作为消除控制作用的间断性的工具,当用高阶滑模处理相对高阶的系统和提高滑模作用精度时,必须把时间的离散性考虑在内。
最后,提出了滑模控制理论在应用数学问题方面的三个应用:受限制的QDE(常微分方程)的数量解,实时微分,以及寻找非线性系统的零点的问题。
第一种是几乎直接应用滑模控制理论,然而后两种是通过计算正确定义的动力系统的解完成的。
可以用一些仿真来解释这种方法。
1、简介非线性动态系统由于其可能产生的结果而被认为是研究领域一个感兴趣的话题。
其实,真正的系统总是非线性的,把它们的近似线性可能会给他们的工作范围施加过于严格的要求或产生不可行的结果。
而且非线性系统甚至可以比线性系统的性能更好,因此往往在反馈控制系统中有意引入一些非线性行为。
在非线性系统中,切换控制系统非常有趣,因为它实现简单甚至可能是一些控制问题的最优解。
切换动态系统产生于有趣的数学问题,因为它们的特征是等号右边不连续的ODE (常微分方程),常微分方程的解通常定义和存在条件不再有效;因此必须适当地将经典微分方程理论进行扩展。
切换系统的特征是系统中存在动态变化,这些变化和状态空间中的不同状态集合有关系。
这些不同的集合彼此被边界线分隔开来,在一些混合动力系统的文献中被命名为卫兵,跨越边界的矢量场的方向有可能指向边界本身。
在这种情况下会形成滑模而且状态空间不同集合之间的边界定义了不同的矢量场,通常被称为滑动面。
在滑模稳定存在的情况下,滑动面是状态空间的一个不变集,在适当的条件下,状态轨迹独立于原来的系统动态特性,约束运动提出了一个半组属性。
这种不变性,对于滑模不确定性的匹配,引起了控制工程师的兴趣,工程师认为这是在反馈中有意引进切换的开关机会,不管系统的不确定性和外部扰动是否满足匹配条件,都能够使闭环控制系统有着满意的表现。
控制系统中的滑模控制算法研究与实现方法滑模控制算法是一种在控制系统中应用较为广泛的控制策略,其特点是具有快速、稳定、鲁棒性强等优点。
本文将重点研究与实现滑模控制算法在控制系统中的应用方法。
一、滑模控制算法的基本原理滑模控制算法是基于滑模面的设计原理,通过引入滑模面来使得系统的状态向滑模面聚集。
具体来讲,滑模面是指一个二维空间,可以是物理空间中的平面,也可以是状态空间中的超平面。
滑模面上的动态系统能够实现快速稳定性和鲁棒性。
滑模面的设计需要满足两个条件:首先是滑模面上的动态系统需要呈现出良好的稳定性,即系统的状态能够在滑模面上达到稳定的状态;其次是对系统的输入信号施加某种控制策略,使得系统的状态能够快速地达到滑模面。
基于这些条件,滑模控制算法通过设计合适的控制律来实现控制系统的稳定和鲁棒性。
二、滑模控制算法的研究方法1. 确定系统模型和状态空间方程首先,我们需要根据所要控制的物理系统确定其数学模型和状态空间方程。
系统的模型和状态方程决定了滑模面的设计和控制律的选择。
2. 设计滑模面在滑模控制算法中,滑模面的设计是非常关键的一步。
根据所要控制的系统的特点和需求,可以选择线性滑模面、非线性滑模面或者其它形式的滑模面。
滑模面的设计需要满足系统稳定性和鲁棒性的要求。
3. 确定滑模控制律滑模控制算法的核心是选择合适的滑模控制律。
滑模控制律是一种输出反馈控制律,通过使系统的状态向滑模面聚集来实现控制的稳定性和鲁棒性。
滑模控制律的设计通常包括滑模面上的状态变量、输入变量以及一些控制参数的组合。
根据所要控制的系统的特点和需求,可以根据经验或使用优化方法来确定合适的滑模控制律。
4. 系统仿真与实验验证在研究滑模控制算法时,通常需要进行系统的仿真和实验验证。
通过使用仿真软件或搭建实验平台来验证设计的滑模控制算法的性能。
仿真与实验验证可以帮助我们了解控制系统在不同条件下的行为,并对滑模控制算法进行改进和优化。
三、滑模控制算法的实现方法1. 基于硬件的实现方法滑模控制算法可以通过硬件实现,即使用控制器和传感器等硬件设备来实现滑模控制算法。
滑模控制c实例
滑模控制(sliding mode control,SMC)是一种在非线性系统控制中常用的控制策略。
它通过引入滑模面来实现系统状态的快速稳定控制,具有较强的鲁棒性和适应性能。
本文将以一个滑模控制的C语言实例为例,介绍滑模控制的基本原理和实现过程。
我们需要了解滑模控制的基本原理。
滑模控制的核心思想是将系统状态引导到一个预先定义的滑模面上,然后在滑模面上施加控制,使系统状态快速稳定。
滑模面可以看作是一个虚拟的目标轨迹,系统状态在滑模面上运动时,控制器对系统施加的控制力将保持不变,从而实现对系统的稳定控制。
接下来,我们将通过一个简单的示例来演示滑模控制的实现过程。
假设我们要控制一个直流电机的转速,电机模型可以用以下状态方程表示:
dx/dt = -a*x + b*u
其中,x是电机转速,u是输入电压,a和b是电机的参数。
我们的目标是使电机转速稳定在一个给定的值。
为了实现这个目标,我们可以设计一个滑模控制器来控制电机的转速。
我们需要定义滑模面。
在本例中,我们可以选择滑模面为x = 0。
然后,我们需要设计一个控制律,使得电机的转速能够快速地达到
滑模面,并保持在滑模面上。
一种常用的控制律形式是:
u = k*sign(x) + v
其中,k是滑模控制器的增益参数,sign(x)是x的符号函数,v是一个可调节的偏置项。
这个控制律的作用是,当x大于0时,控制器施加一个负的控制力,使x减小;当x小于0时,控制器施加一个正的控制力,使x增大。
接下来,我们将用C语言来实现这个滑模控制器。
首先,我们需要定义电机的参数和控制器的参数:
float a = 1.0; // 电机参数a
float b = 1.0; // 电机参数b
float k = 1.0; // 控制器增益参数k
float v = 0.0; // 控制器偏置项v
然后,我们可以编写一个函数来实现滑模控制器的计算过程:
float sliding_mode_control(float x) {
float u;
if (x > 0) {
u = -k + v;
} else if (x < 0) {
u = k + v;
} else {
u = v;
}
return u;
}
在这个函数中,我们首先判断x的符号,然后根据符号来计算控制力u。
最后,我们可以在主函数中使用这个滑模控制器来控制电机的转速:
int main() {
float x = 0.0; // 初始转速
float dt = 0.1; // 采样时间间隔
float u; // 控制力
while (1) {
u = sliding_mode_control(x); // 计算控制力
x = x + (-a*x + b*u)*dt; // 更新转速
printf("转速:%f\n", x); // 输出转速
}
return 0;
}
在主函数中,我们使用一个无限循环来模拟电机的运行过程。
在每一次循环中,我们先计算控制力u,然后根据状态方程更新电机的转速x,并输出转速的值。
通过不断地调整控制参数,我们可以实现电机转速的快速稳定控制。
本文以一个滑模控制的C语言实例为例,介绍了滑模控制的基本原理和实现过程。
滑模控制通过引入滑模面和设计合适的控制律,实现了对非线性系统的快速稳定控制。
在实际应用中,滑模控制具有较强的鲁棒性和适应性,可以应用于多种控制问题的解决。