倒立摆控制器的设计(分别用极点配置,LQR方法,Robust H-无穷方法)

news2024/12/28 21:04:59

G01倒立摆控制器设计

  • Author:Dargon
  • Note date:2020/12/13
  • 课程用书:LMIs in Control Systems Analysis,Design and Applications

1,倒立摆控制系统简介

  • 倒立摆系统是一个复杂的控制系统,具有非线性、强耦合、多变量、不稳定等特性。 在控制过程中, 它能有效的反映控制中的许多关键问题,如镇定问题,非线性问题, 鲁棒性问题, 随动问题及跟踪问题恩等,都可以以倒立摆为对象加以研究。除此之外, 它和火箭的飞行及机器人关节运动有很多相似之处,其原理可用于控制火箭稳定发射。倒立摆的研究对于火箭飞行控制和机器人控制等现代高科技的研究具有重要的实践意义。因此倒立摆的控制成为控制理论中经久不衰的研究课题。在最近的 25 年里,许多经典和现代控制理论被用于倒立摆的稳定控制,例如 极点配置控制、LQR控制、状态反馈控制、鲁棒 H ∞ H_{\infty} H、智能控制、模糊控制、人工神经元控制。
  • 从形式上可以将倒立摆系统分为以下几种:
    1. 直线倒立摆系统:或称为“小车-倒立摆系统”,是由可以沿直线导轨运动的小车及一端定于小车之上的匀质长杆组成的系统。
    2. 环形倒立摆系统:可以将它看成是将小车的直线导轨弯曲而成的系统。
    3. 平面倒立摆系统:匀质摆杆的底端可以在平面内自由运动,并且摆杆可以沿平面内的任一轴线转动。
    4. 柔性连接倒立摆系统:在原倒立摆系统的基础之上引入了新的自由振荡环节:自由弹簧系统。
    5. 柔性倒立摆系统:它不仅仅是将匀质刚体换成了柔性摆杆,而是其本身已经变为非线性分布参数系统。
    6. 直线柔性连接两级倒立摆:所谓直线柔性连接两级倒立摆系统,就是在直线刚性两级倒立摆的基础上,加入自由弹簧系统:电机连接一主动小车,而主动小车通过一根弹簧作用于从动小车,对固定于从动小车上的两级倒立摆实施控制。

2,倒立摆数学模型的分析与建立

2.1,模型分析

  • 倒立摆系统如图1所示,一个带轮的小车,中间铰接刚性的倒立摆,小车沿着笔直的光滑轨道左右滑动,同事实现的摆杆可在垂直平面内自由运动,为方便分析,我们假设摩擦力都是足够的小,可以忽略不计。由动力学理论可推出一级倒立摆的运动方程。
    在这里插入图片描述
    M:小车的质量
    m:摆杆的质量
    L:摆杆质心到转轴的距离
    I:摆杆的转动惯量
    g: 重力加速度
    b:小车与导轨之间的阻尼比
    C: 摆杆与小车之间的阻尼比
    θ \theta θ: 摆杆与竖直方向上的夹角
    F:控制器的输出的外力
    在这里插入图片描述
    小车水平方向受力
    M x ¨ = F − F N − b x ˙ (2.1) M\ddot{x} =F -F_N -b \dot{x} \tag{2.1} Mx¨=FFNbx˙(2.1)
    摆杆的水平受力
    F N = m d 2 ( x + L s i n θ ) d t 2 (2.2) F_N =m \frac{d^{2}(x +Lsin\theta)}{dt^2} \tag{2.2} FN=mdt2d2(x+Lsinθ)(2.2)
    根据公式(2.1)、(2.2)可获得系统的一个运动学方程
    F = ( M + m ) x ¨ + m L θ ¨ c o s θ − m L θ ˙ 2 s i n θ + b x ˙ (2.3) F =(M +m) \ddot{x} +mL\ddot{\theta}cos\theta -mL \dot{\theta}^{2}sin\theta +b \dot{x}\tag{2.3} F=(M+m)x¨+mLθ¨cosθmLθ˙2sinθ+bx˙(2.3)
    摆杆的垂直方向受力
    F P − m g = m d 2 ( L c o s θ ) d t 2 (2.4) F_P -mg =m \frac{d^2(Lcos \theta)}{dt^2} \tag{2.4} FPmg=mdt2d2(Lcosθ)(2.4)
    力矩平衡
    I θ ¨ = F P L s i n θ − F N L c o s θ − c θ ˙ (2.5) I\ddot{\theta} =F_PLsin\theta -F_NLcos\theta -c \dot{\theta} \tag{2.5} Iθ¨=FPLsinθFNLcosθcθ˙(2.5)
    将(2.2)和(2.4)分别代入(2.5)得出系统的另一个方程
    ( I + m L 2 ) θ ¨ + m L x ¨ + c θ ˙ = m g L θ (2.6) (I +mL^2) \ddot{\theta} +mL \ddot{x} +c\dot{\theta} =mgL\theta \tag{2.6} (I+mL2)θ¨+mLx¨+cθ˙=mgLθ(2.6)
    将系统线性化令 s i n θ ≈ θ , c o s θ ≈ 1 , ( d θ d t ) 2 = 0 sin\theta \approx \theta, cos\theta \approx 1,(\frac{d\theta}{dt})^2 =0 sinθθ,cosθ1,(dtdθ)2=0得出
    { F = ( M + m ) x ¨ + m L θ ¨ + b x ˙ m g L θ = ( I + m L 2 ) θ ¨ + m L x ¨ + c θ ˙ (2.7) \left\{ \begin{aligned} F&=(M +m) \ddot{x} +mL \ddot{\theta} +b \dot{x}\\ mgL\theta &=(I +mL^2) \ddot{\theta} +mL \ddot{x} +c \dot{\theta} \end{aligned} \right. \tag{2.7} {FmgLθ=(M+m)x¨+mLθ¨+bx˙=(I+mL2)θ¨+mLx¨+cθ˙(2.7)

2.2,系统状态方程建模

  • 在任意时刻,系统的状态都由4个变量来描述,分别是摆杆的角度 θ \theta θ,摆杆的角速度 θ ˙ \dot{\theta} θ˙,小车的位移 x x x,小车的速度 x ˙ \dot{x} x˙
    X = [ x x ˙ θ θ ˙ ] T X ={[x \quad \dot{x} \quad \theta \quad \dot{\theta} ]}^T X=[xx˙θθ˙]T, Y = [ x x ˙ θ θ ˙ ] T Y ={[x \quad \dot{x} \quad \theta \quad \dot{\theta} ]}^T Y=[xx˙θθ˙]T
    可以描述系统的状态空间方程
    { X ˙ = A X + B U Y = C X + D U (2.8) \left\{ \begin{aligned} \dot{X} &=AX +BU\\ Y &=CX +DU \end{aligned} \right. \tag{2.8} {X˙Y=AX+BU=CX+DU(2.8)
    A = [ 0 1 0 0 0 a 1 a 2 a 3 0 0 0 1 0 a 4 a 5 a 6 ] B = [ 0 b 1 0 b 2 ] C = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] D = [ 0 0 0 0 ] A =\left[ \begin{matrix} 0 & 1& 0& 0\\ 0 &a_1&a_2&a_3\\ 0 & 0& 0& 1\\ 0 &a_4&a_5&a_6 \end{matrix} \right] B =\left[ \begin{matrix} 0 \\ b_1\\ 0 \\ b_2 \end{matrix} \right] C =\left[ \begin{matrix} 1 & 0& 0& 0\\ 0& 1& 0& 0\\ 0 & 0& 1& 0\\ 0& 0& 0& 1 \end{matrix} \right] D =\left[ \begin{matrix} 0 \\ 0\\ 0 \\ 0 \end{matrix} \right] A= 00001a10a40a20a50a31a6 B= 0b10b2 C= 1000010000100001 D= 0000
    其中 a 1 = − b ( I + m L 2 ) ( M + m ) I + M m L 2 a 2 = − m 2 L 2 g ( M + m ) I + M m L 2 a 3 = m L c ( M + m ) I + M m L 2 a_1 =\frac{-b(I +mL^2)}{(M +m)I +MmL^2} \quad a_2 =\frac{-m^2L^2g }{(M +m)I +MmL^2} \quad a_3 =\frac{mLc}{(M +m)I +MmL^2} a1=(M+m)I+MmL2b(I+mL2)a2=(M+m)I+MmL2m2L2ga3=(M+m)I+MmL2mLc
    a 4 = m L b ( M + m ) I + M m L 2 a 5 = m g L ( M + m ) ( M + m ) I + M m L 2 a 6 = − c ( M + m ) ( M + m ) I + M m L 2 a_4 =\frac{mLb}{(M +m)I +MmL^2} \quad a_5 =\frac{mgL(M +m) }{(M +m)I +MmL^2} \quad a_6 =\frac{-c(M +m)}{(M +m)I +MmL^2} a4=(M+m)I+MmL2mLba5=(M+m)I+MmL2mgL(M+m)a6=(M+m)I+MmL2c(M+m)
    b 1 = I + m L 2 ( M + m ) I + M m L 2 b 2 = − m L ( M + m ) I + M m L 2 b_1 =\frac{I +mL^2}{(M +m)I +MmL^2} \quad b_2 =\frac{-mL }{(M +m)I +MmL^2} b1=(M+m)I+MmL2I+mL2b2=(M+m)I+MmL2mL

3,控制器的设计

3.1 无控制器

  • 对于无控制器的情况,我们判断A的稳定性即可
    e i g ( A ) = [ 0 0.0830 − 5.2780 502726 ] eig(A) =[0 \quad 0.0830\quad -5.2780 \quad 502726] eig(A)=[00.08305.2780502726]
    对于特征值有在右半平面的情况,系统是不稳定的,可见其图像是发散的
%---------------------------------without control-------------------
disp(eig(A));
The eigenvalue of A :
    0
-0.0830
-5.2780
5.2726

3.2 极点配置设计控制器

  • 利用matlab,将极点全部配置在左半平面内,设置的极点 P = [ − 10 − 9 − 1 − 0.5 ] P =[-10 \quad -9 \quad -1 \quad -0.5] P=[10910.5],利用的matlab的place函数,进行配置求解反馈增益K的值。
%---------------------------------pole placement---------------------
disp('Pole placement');
P=[-10,-9,-1,-1.5];
K=place(A,B2,P);
disp('Feedback gain K:');
disp(K);

Pole placement
Feedback gain K:
   -5.8454  -11.0766   72.9832   13.2371

3.3 LQR方法设计控制器

  • 利用matlab找到最优的极点配置,对于是得二次型的代价函数(Cost function)最小,同时,设置对应的权重矩阵Q 和R
    J = ∫ 0 ∞ ( X T Q X + U T R U ) d t J =\int_0^{\infty}(X^TQX +U^TRU)dt J=0(XTQX+UTRU)dt
    利用matlab对应的LQR求解函数 lqr可求其解
%--------------------------------LQR controll---------------------------
disp('LQR control');
Q=[200 0 0   0;
     0 1 0   0;
     0 0 200 0;
     0 0 0   1];
R=0.1;
[K,P,E] =lqr(A,B2,Q,R);
disp('Feedback gain K:');
disp(K);
disp('The eigenvalue:');
disp(E);

LQR control
Feedback gain K:
  -44.7214  -31.5945  119.3920   21.7285

The eigenvalue:
  -9.2460 + 5.3810i
  -9.2460 - 5.3810i
  -2.4487 + 1.7404i
  -2.4487 - 1.7404i

3.4 Robust H ∞ H_\infty H 设计控制器

  • 利用matlab里面的LMI toolbox去解决关于鲁棒 H ∞ H_\infty H的求解控制问题,对于 H ∞ H_\infty H 是由明确的数学推导和物理意义的,关于欧拉范数的推导出矩阵谱范数(2范数)形式,属于定常矩阵的形式,对于 H ∞ H_\infty H范数是由2范数进行推广的,完全可以利用导出范数,去定义 H ∞ H_\infty H形式。就可以看出如果输入时扰动的话,就代表这一种放大倍数 γ \gamma γ,当然我们的目标就是要是 γ \gamma γ越小越好。
    H ∞ H_\infty H问题可以写成以下标准形式求解问题:
    m i n γ min \quad \gamma minγ
    s u b j e c t t o : subject \quad to : subjectto:
    { [ A X + B 2 W + ( A X + B 2 W ) T B 1 ( C 1 X + D 12 W ) T ) B 1 T − I D 11 T C 1 X + D 12 W D 11 − γ 2 I ] < 0 X > 0 (3.1) \left\{ \begin{aligned} \left[ \begin{matrix} AX +B_2W+(AX +B_2W)^T & B_1& (C_1X +D_{12}W)^T)\\ {B_1}^T &-I &D_{11}^T\\ C_1X +D_{12}W &D_{11}&-{\gamma}^2I \end{matrix} \right] <0\\ X >0 \end{aligned} \right. \tag{3.1} AX+B2W+(AX+B2W)TB1TC1X+D12WB1ID11(C1X+D12W)T)D11Tγ2I <0X>0(3.1)

u = K x u =Kx u=Kx
所求得的 K = W X − 1 K =WX^{-1} K=WX1
利用matlab LMI toolbox的feasp 函数去求可行性问题,利用mincx 去求最小的 γ \gamma γ
所求得的最小的 γ = 0.8834 \gamma =0.8834 γ=0.8834

%descripe LMI
setlmis([]);       %建立一个LMI
X=lmivar(1,[4,1]); %定义矩阵变量
W=lmivar(2,[1,4]);
r1=lmivar(1,[1,1]);

% The first inequation
lmiterm([1 1 1 X],A,1,'s'); %AX +(AX)'
lmiterm([1 1 1 W],B2,1,'s'); %B2W +(B2W)'
lmiterm([1 2 1 0],B1'); %B1
lmiterm([1 2 2 0],-1); %-I
lmiterm([1 3 1 X],C1,1); %C1X +D12W
lmiterm([1 3 1 W],D12,1);
lmiterm([1 3 2 0],D11); %D11
lmiterm([1 3 3 r1],-1,1); %-r^2 *I

% The second equation
lmiterm([-2 1 1 X],1,1); %X >0

lmisys=getlmis;

%----------------------------Robust mincx solver---------------------------------------

n = decnbr(lmisys);
c = zeros(n,1);
for j=1:n
     [r1j]=defcx(lmisys,j,r1);
      c(j)=trace(r1j);
end
%c=mat2dec(lmisys,zeros(4,4),zeros(1,4),eye(1))
[copt,xopt]=mincx(lmisys,c, [0 0 0 0 0]);

X =dec2mat(lmisys,xopt,X);
W =dec2mat(lmisys,xopt,W);
r1 =dec2mat(lmisys,xopt,r1);
disp(copt);
disp(r1);
K =W *X^(-1);
disp('The best value:');
disp(sqrt(r1));
disp('Feedback gain K:');
disp(K/100);

%----------------------------------------solutions result--------------------
Solver for linear objective minimization under LMI constraints 

 Iterations   :    Best objective value so far 
 
     1
     2
     3
     4
     5
     6
     7
     8                 114.267501
     9                  59.802174
    10                  59.802174
    11                  41.613389
    12                  41.613389
    13                  41.613389
    14                  20.346897
    15                  20.346897
    16                  20.346897
    17                  10.262175
    18                  10.262175
    19                  10.262175
    20                   5.791484
    21                   5.791484
***                 new lower bound:    -1.071889
    22                   3.718387
***                 new lower bound:    -0.447187
    23                   3.718387
***                 new lower bound:    -0.074088
    24                   1.044904
***                 new lower bound:    -0.040169
    25                   1.000228
***                 new lower bound:     0.148979
    26                   0.960729
***                 new lower bound:     0.580998
    27                   0.862623
***                 new lower bound:     0.618936
    28                   0.862623
***                 new lower bound:     0.670347
    29                   0.798370
***                 new lower bound:     0.677624
    30                   0.790666
***                 new lower bound:     0.760378
    31                   0.784260
***                 new lower bound:     0.763410
    32                   0.781884
***                 new lower bound:     0.768376
    33                   0.780371
***                 new lower bound:     0.772957

 Result:  feasible solution of required accuracy
          best objective value:     0.780371
          guaranteed absolute accuracy:  7.41e-03
          f-radius saturation:  0.003% of R =  1.00e+09 
 
    0.7804

    0.7804

The best value:
    0.8834

Feedback gain K:
  112.1078   99.9032 -364.5474  -72.8227

4,simulink 仿真分析

4.1, simulink搭建图

  • 在这里插入图片描述

4.2, 各对应控制器输入

  • 在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

干货 | 正念,寻求属于你的存在之道

Hello,大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 你是否也曾感到内心无法平静&#xff1f;如果是&#xff0c;不妨了解一下正念&#xff0c;它或许能为你带来改变。 正念作为一种古老的修行方式&#xff0c;如今已经在世界范围内广为流传&#xff0c;…

《Netty》从零开始学netty源码(四十九)之PoolArena

目录 PoolArenaallocate()创建newByteBuf()分配具体的内存空间allocate() PoolArena Netty中分配内存是委托给PoolArena来管理的&#xff0c;它主要有两个实现类&#xff1a; 默认情况下使用的DirectArena&#xff0c;它的数据结构如下&#xff1a; 从属性中我们看到PoolA…

人生若只如初见,你不来看看Django吗

前言 本文介绍python三大主流web框架之一的Django框架的基本使用&#xff0c;如何创建django项目&#xff0c;如何运行django项目以及django项目的目录结构&#xff0c;另外django又是如何返回不同的数据和页面&#xff1f; python三大主流web框架 Python有三大主流的web框架…

JS手写实现Promise.all

Promise.all() 方法接收一个 Promise 对象数组作为参数&#xff0c;返回一个新的 Promise 对象。该 Promise 对象在所有的 Promise 对象都成功时才会成功&#xff0c;其中一个 Promise 对象失败时&#xff0c;则该 Promise 对象立即失败。 本篇博客将手写实现 Promise.all() 方…

用于scATAC-seq有监督分类的Cellcano

细胞类型识别是单细胞数据分析的基本步骤。由于高质量参考数据集的可用性&#xff0c;有监督细胞分类方法在scRNA-seq数据中很受欢迎。染色质可及性分析&#xff08;scATAC-seq&#xff09;的最新技术进步为理解表观遗传异质性带来了新的见解。随着scATAC-seq数据集的不断积累&…

第二节课 Linux和shell命令之文件管理与常用命令

命令执行&#xff0c;没有图形页面 文件权限是重点 1.目录树 windous分盘 CDEF 在Linux系统中并不存在C/D/E/F等盘符&#xff0c;Linux系统中的一切文件都是 从“根&#xff08;/&#xff09;”目录开始的&#xff0c;并按照文件系统层次化标准&#xff08;Filesystem Hie…

C++:计算机操作系统:多线程:高并发中的线程

高并发中的线程 一切要从CPU说起PC 程序计数器从CPU到操作系统从进程到线程 从这篇开始&#xff0c;我将会开启高性能&#xff0c;高并发系列&#xff0c;本篇是给系列的开篇&#xff0c;主要关注 多线程以及线程池。 一切要从CPU说起 你可能会有疑问&#xff0c;讲多线程为何…

西门子AmeSim车辆仿真软件在新能源汽车开发中的应用-软件AmeSim2021版分享

利用Simcenter Amesim提高系统仿真产品设计效率&#xff0c;Simcenter Amesim是一个全球领先的集成、可扩展的机、电、液系统仿真平台。它允许设计工程师虚拟评估和优化系统性能。 提高系统仿真效率 Simcenter Amesim是一个领先的集成、可扩展的系统仿真平台&#xff0c;允许…

汇编语言学习笔记一

常用寄存器类型 通用寄存器 AX&#xff0c;BX&#xff0c;CX&#xff0c;DX&#xff0c;这四个寄存器都是16位的 他们也可以拆分为2个8位的寄存器&#xff0c;如AX可以拆分为AH和AL两个8位的寄存器&#xff0c;其它三个也可以如此。 通用寄存器的使用比较简单&#xff0c;如 …

【HTML5笔记】HTML5语义化标签、音视频标签、表单标签属性

目录 一、HTML5学习 1.1、HTML5语法 1.2、语义化标签 1.3、音视频标签 &#xff08;1&#xff09;音频标签 &#xff08;2&#xff09;视频标签 1.4、input标签type属性 1.5、datalist数据列表 1.6、表单属性 一、HTML5学习 1.1、HTML5语法 HTML5增加了很多的新标签…

【SpringBoot】自定义策略的静态资源访问

文章目录 新建static文件夹&#xff0c;存储图片等资源方式一 Java编码定义方式二 配置中定义 新建static文件夹&#xff0c;存储图片等资源 项目版本信息&#xff1a;SpringBoot版本为2.3.3.RELEASE&#xff0c;JDK1.8 方式一 Java编码定义 配置类实现WebMvcConfigurer接口&…

【五一创作】spring boot starter 编写自己的starter

spring boot starter 编写自己的starter 陈钊 2023-5-1 源码地址&#xff1a; https://gitcode.net/qq_39339588/my-spring-boot-starter.git 封装my-spring-boot-starter 新建springboot工程&#xff0c;来封装为自己的spring-boot-starter 包名&#xff0c;随便写&#xff0…

基于电流控制的并网逆变器(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

操作系统:文件系统

文件系统 文件保护 文件的保护通过口令保护、加密保护、和访问控制等方式实现。其中&#xff0c;口令和加密是为了防止用户文件被他人存取或窃取&#xff0c;而访问控制则用于控制用户对文件的访问方式。 口令保护 口令指用户在建立一个文件时提供一个口令&#xff0c;系统…

算法套路十四——动态规划之背包问题:01背包、完全背包及各种变形

算法套路十四——动态规划之背包问题&#xff1a;01背包、完全背包及各种变形 算法示例一——0/1背包&#xff1a; 0-1背包:有n个物品&#xff0c;第i个物品的体积为w[i]&#xff0c;价值为v[i]&#xff0c;每个物品至多选一个&#xff0c; 求体积和不超过capacity时的最大价值…

【状态机dp之 股票买卖 题型系列 帮你学懂 状态机】股票买卖(1-6道题)

股票买卖 股票买卖 1这道题就是求max {ai−aj|j<i} 股票买卖 2股票买卖 3方法一&#xff1a;前后缀拆分dp怎么想到的&#xff1f;方法二&#xff1a;状态机dpf[0/1][i]表示只考虑前i支股票且手头有/没有股票的最大收益 股票买卖 4考虑前 i 天的股票&#xff0c;第 i 天的 决…

深入浅出C++ ——C++11

文章目录 一、C11简介二、列表初始化二、声明四、范围for循环五、STL中的变化六、右值引用和移动语义1. 什么是左值&#xff1f;什么是左值引用&#xff1f;2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 完美转发 新的类功能默认成员函数类成员变量初始化defaultdele…

在Unity中制作完整的技能系统(介绍篇)

1. 系统结构介绍 首先我们需要对技能中的部分进行一个划分。通过观察&#xff0c;我们不难发现&#xff0c;在多个技能中经常有一些相同的内容&#xff08;以下的例子均来自于《英雄联盟》&#xff09;&#xff1a; 火男被动的燃烧一定时间持续伤害和提莫的E技能中毒一定时间…