【matlab】单摆鲁棒滑模控制matlab实现从简到繁
前言
这是前几周现代鲁棒控制课程一位同学的大作业,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; %终端滑模控制基于等效控制原理
快速终端滑模控制
method = '快速终端滑模控制';s = omegaz + k1 * theta^(a1) + k2 * theta^(a2); % 快速终端滑模面u = - f - k1 * a1 * abs(theta)^(a1 - 1) * omegaz - k2 * a2 * abs(theta)^(a2 - 1) * omegaz; %快速终端滑模控制基于等效控制原理
非奇异终端滑模控制
method = '非奇异终端滑模控制';s = theta + alpha * omegaz^(p/q); % 非奇异终端滑模面u = - f - q/(alpha * p) * omegaz ^ (2-p/q); %非奇异终端滑模控制基于等效控制原理
非奇异快速终端滑模控制
method = '非奇异快速终端滑模控制';s = theta + k3 * sign(theta)^(a3) + k4 * sign(omegaz)^(a4); % 非奇异快速终端滑模面u = (- omegaz - k3 * a3 * abs(theta)^(a3 - 1) * omegaz)/(k4 * a4 * abs(omegaz)^(a4 - 1))- f ; %非奇异快速终端滑模控制基于等效控制原理
注:控制器中基于趋近律和基于等效控制原理的区别为是否带有滑模面的符号函数,可以根据前两个控制器的代码观察得出。
整体代码
% 单摆滑模控制测试仿真
%根据现代鲁棒控制桑豪ppt
% Jun 24 2020 Wed Jonny Su
clc;
close all;
clear all;
cd ('D:\OneDrive - 徐州开放大学\NPU\program\Morphing\Robust');
%% 单摆相关参数
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%% 控制参数% 滑模面
c = 0.3;
ep = 0.5;
u = 0;% 终端滑模面&非奇异终端滑模面
% alpha = 0,9; %什么神仙bug
alpha = 0.9;
p = 9;
q = 7;% 快速终端滑模面
k1 = 1.1;
k2 = 0.9;
a1 = 9/7;
a2 = 7/9;% 非奇异快速终端滑模面
k3 = 1.1;
k4 = 0.9;
a3 = 3;
a4 = 9/7;
beta = q/p; %两个奇数%% Simulation parametersstep = 0.01; %步长
t = 0; %时间
n = 1; %步数%% 二阶系统仿真while (t < 50) %仿真时间50s%二阶系统非线性微分方程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; %终端滑模控制基于等效控制原理%快速终端滑模控制
% method = '快速终端滑模控制';
% s = omegaz + k1 * theta^(a1) + k2 * theta^(a2); % 快速终端滑模面
% u = - f - k1 * a1 * abs(theta)^(a1 - 1) * omegaz - k2 * a2 * abs(theta)^(a2 - 1) * omegaz; %快速终端滑模控制基于等效控制原理%非奇异终端滑模控制
% method = '非奇异终端滑模控制';
% s = theta + alpha * omegaz^(p/q); % 非奇异终端滑模面
% u = - f - q/(alpha * p) * omegaz ^ (2-p/q); %非奇异终端滑模控制基于等效控制原理%非奇异快速终端滑模控制
% method = '非奇异快速终端滑模控制';
% s = theta + k3 * sign(theta)^(a3) + k4 * sign(omegaz)^(a4); % 非奇异快速终端滑模面
% u = (- omegaz - k3 * a3 * abs(theta)^(a3 - 1) * omegaz)/(k4 * a4 * abs(omegaz)^(a4 - 1))- f ; %非奇异快速终端滑模控制基于等效控制原理%% 状态更新 states_old = [theta;omegaz]; %弹道倾角 俯仰角速度del = [del_theta;del_omegaz]; %微分量states_new = states_old + del * step; %更新 赋值theta = states_new(1);omegaz = states_new(2);% 保存数据Vehicle_states(n,:) = [theta;omegaz]; %Del_states(n,:) = [del_theta;del_omegaz]; %Time(n) = t; %时间记录Control_states(n,:) = [u]; %控制变量% 时间更新t = t + step; %仿真步长n = n + 1; %计数+1
end%% 绘图检验
figure;
% 速度
plot(Time,Vehicle_states(:,1),Time,Vehicle_states(:,2),'linewidth',1.5);
%axis([0 100 1400 1600]) ;
legend('$\theta(^\circ)$','$\omega_z(^\circ/s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex')
grid on;
title(['控制方法为 ',method,' 时的响应曲线']);
xlabel('$T(s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% ylabel('$\theta(^\circ)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);figure;
plot(Time,Control_states(:,1),'linewidth',1.5);
%axis([0 100 18500 21500]) ;
grid on;
title(['控制方法为 ',method,' 时的输入信号']);
xlabel('$T(s)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
ylabel('$input$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);
以上就是单摆鲁棒滑模控制matlab实现的全部内容,欢迎讨论交流。
欢迎访问我的个人网站 http://www.josu.top/
【matlab】单摆鲁棒滑模控制matlab实现从简到繁相关推荐
- VSC/SMC(十六)——自适应鲁棒滑模控制
目录 1.参数不定和扰动不定但有界的系统 2.滑模控制自适应律设计 2.1控制律设计总结 3.仿真分析 3.1 PD控制 3.2普通自适应律 3.3映射自适应律 3.4总结 4学习问题 1.参数不定和 ...
- matlab里面滑模控制示例,基于趋近律的滑模控制matlab仿真实例(12页)-原创力文档...
基于趋近律的滑模控制 一.基于趋近律的滑模控制 1.控制器的设计 针对状态方程 (1) 采用趋近律的控制方式,控制律推导如下: (2) (3) 其中slaw为趋近律. 将状态方程式(1)代人(2)得 ...
- VSC/SMC(八)——基于慢时变干扰观测器的滑模控制(含程序模型)
目录 前言 1.案例分析系统 2.设计观测器 2.1观测器系统 2.2稳定分析 3.控制器设计 3.1滑模面 3.2 趋近律 3.3 稳定性分析 4.MATLAB/Simulink仿真 4.1s函数编 ...
- 滑模控制学习笔记(一)
滑模控制学习笔记(一) 滑模控制基本理论 1.滑模变结构控制定义 2. 滑模面的参数设计 3.滑模消抖方式 4.滑模变结构控制理论研究方向 滑模控制基本理论 \quad\quad 滑模变结构控制在机器 ...
- 永磁同步电机模型预测控制,自抗扰控制,滑模控制等matlab仿真及ccs代码。
永磁同步电机模型预测控制,自抗扰控制,滑模控制等matlab仿真及ccs代码. ID:13800650571175155简熙纯净水
- 双馈风力发电机DFIG滑模控制SMC MATLAB/Simulink仿真模型 采用PI调节器为外环滑模控制器SMC作为内环控制,跟传统的双PI环相比,功率的很随性更好
双馈风力发电机DFIG滑模控制SMC MATLAB/Simulink仿真模型(成品) 1.采用非线性控制滑模控制策略 2.采用PI调节器为外环滑模控制器SMC作为内环控制,跟传统的双PI环相比,功率的 ...
- 基于滑模控制的直接转矩控制的MATLAB仿真
模型是基于袁雷老师主编的<现代永磁同步电机控制原理机MATLAB仿真>一书为参考. 个人认为使用滑模控制的DTC控制器有几个原因:1 系统存在滑模态 2点击要求转矩与磁链小脉动3逆变器需要 ...
- 永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电
永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电. 风力机才用MPPT算法,机侧变流器采用滑模控制转速外环,PI控制电流内环,网侧逆变器均采用PI控制. ...
- MATLAB之机器人鲁棒自适应PD控制代码
p_input function[sys,x0,str,ts]=input(t,x,u,flag) %指令信号程序 %[sys,x0,str,ts]系统输出变量,(t,x,u,flag)系统输入变量 ...
最新文章
- 刷magisk模块后不能开机_联想启天商用电脑刷BIOS或维修换主板后 开机叫两声处理办法...
- 端口复用突破防火墙(图)
- 个人项目1:随机生成30道整数四则运算题
- java装箱_Java 装箱 拆箱
- es的node内存设置
- mac双击文件打不开——设置鼠标连按速度
- 100名网工备考IE,最终能通过的,到底有几个?
- 大脑网络结构、功能和控制的物理学
- 17个改变世界的数学公式
- Android CameraX 使用入门
- 什么是递归?递归的理解
- win7网上邻居_win7网上邻居寻找教程
- Xcode8兼容iOS7的解决方法
- 大数据技术如何影响企业决策?
- 微信公众号代运营的的技巧有哪些(2)
- 产品经理和软件工程师的职能划分
- weblogic BEA-000362问题
- PCL 实战记录 (一)
- 苹果xr如何截屏_苹果手机必备软件1
- WPS JS 宏实现表间导入
热门文章
- 中科院计算所培训中心开启课程研发新征程
- 程序员兼职接单的平台列表
- 押对信息流,百度站上全新起点
- 基于jQuery的下拉菜单菜单【02】,诸位上眼!!!
- 微信小程序优惠券列表领取(send-coupon插件)
- java如何使用虹软sdk_Java使用虹软SDK做人脸识别之十分简单的入门
- GPS 贴片陶瓷天线接线方式
- MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL
- Too many files with unapproved license异常、使用-Drat.skip=true跳过 或者 对没有授权的文件开头添加授权
- 记录一个多表查询的问题 #1093 - You can‘t specify target table ‘xxx‘ for update in FROM clause