控制算法整理

2023-05-16

文章目录

    • 控制系统结构
    • 控制算法逻辑介绍
      • 传统控制算法与现代控制算法的思路对比
      • 现代控制理论思路
        • 状态方程稳定性分析
          • 特征值
          • 平衡点
          • 相平面
    • 传统控制算法
      • PID算法原理概述
      • 模糊
      • 神经网络控制算法
    • 现代控制算法
      • LQR
      • 自适应控制
      • 滑模控制
    • 系统稳定性

控制系统结构

在这里插入图片描述
控制器就是逻辑大脑,测量反馈通过传感器,将当前被控对象的状态返回,就相当于我们的感官。
比如,人要走路,目标位置就是给定输入,控制器就是大脑,执行单元就是腿,控制的body,眼睛是传感,最后的输出设定就是实际到达位置,大脑接收到眼睛测到的实际位置与给定位置的偏差,然后决策产生电信号,推动腿,带动身体走动。

系统基本都是这逻辑,反馈很重要,没有反馈的系统,都是不太鲁棒的。

控制算法逻辑介绍

推荐一个up主的视频讲解,系统,逻辑都很棒:
https://space.bilibili.com/230105574/channel/detail?cid=35996

其实一切常理描述很容易,数学表达却复杂。

传统控制算法与现代控制算法的思路对比

传递函数是将微分方程,通过拉氏变换,将微积分(时间)替换成s;而状态方程就是微积分方程,每个状态方程都包含一个一阶微分方程,层层迭代,因而能表示多阶微分及多变量系统。

传统控制算法是基于误差来计算给定输入控制量;而现代控制理论是基于状态方程,改变状态导数与状态得关系,即 x ˙ = f ( x ) + u → x ˙ = g ( x ) \dot x = f(x)+u \rightarrow \dot x = g(x) x˙=f(x)+ux˙=g(x),从而调节系统性能。

相比较的话:

  • 经典传统的控制算法是一种被动式的调节方法,根据偏差及偏差累积及偏差预警来调节系统控制输入,但是传统的控制算法,适用性广,因为受系统的内部约束影响较小;
  • 而现代控制算法是较为主动的调节方式。但是现代控制算法的性能也依赖于本身系统的结构。
  1. 经典控制理论使用传递函数来描述系统,通过构建系统的微分方程,然后经过拉式变换得到传递函数。
    经典的控制算法是将控制系统作为一个整体来研究,针对测量系统误差,经过控制器运算给定相应的控制信号。传统的控制算法有PID控制算法,模糊控制算法等。

  2. 现代控制是采用状态方程来描述系统。状态方程描述状态向量的导数与状态向量的关系。其实就是多变量的微分方程,写成矩阵表示形式。

现代控制理论思路

状态方程稳定性分析

线性系统的状态方程:
在这里插入图片描述

特征值

A的特征值对应传递函数的极点。当特征值为负,则表示x的速度与x成反比,因此如果x离开平衡点,则会被牵引回平衡点,得结合相平面来理解。传递函数极点就是状态方程的特征值,用来描述状态的导数与状态之间的关系。

当特征值均非负,系统稳定。 表示状态为正时,对应的状态导数为负,则会使状态值减少,回到平衡点。

平衡点

系统的平衡点,是状态的导数为0的点,平衡点附近状态量导数均为负时,该平衡点是稳定点。

相平面

相平面就是状态量导数与状态的关系
特征值分根据正负实根分为以下部分,详细推导,可以看上方up主的视频讲解。
在这里插入图片描述

现代控制理论的控制算法,基本思想是通过输入调整系统的状态方程特征值来达到调节系统性能的效果,调节系统的平衡点,来规范系统达到理想状态。
现代控制算法有比例,LQR算法(用于线性系统),自适应控制算法,滑模控制算法。

传统控制算法

PID算法原理概述

在这里插入图片描述
对偏差信号的进行计算,
比例是计算偏差的倍数,线性快速跟踪偏差。
积分是计算偏差累积,因此能够起到稳定系统的作用。
微分捕捉偏差的变化,因此能够提前预见偏差。

导数可以用来预判函数的走向,从而预见偏差变化。
积分可以用来汇总函数的累积,功或熵。
闭环稳定系统,本身就是自稳定系统,加入PID控制可以改善系统的响应性能。
比如P的存在就是加快反应速率的,但是加快反应速率会引起震荡,因此,加入微分来改提前预判偏差走向可以减少震荡,但是微分过大,会直接限制误差的变动,就是假设误差是1,那么有余微分系数很大,会导致限制偏差的变化,从而出现静差,偏差保持在1不动,因此需要加入积分对累积的误差进行计算,消除静差。
总结:
P:加快系统对偏差的响应速率;
D:减缓系统震荡;
I:消除静差。

1.比例(P)
比例调节作用: 是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。
2.积分(I)
积分调节作用: 是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值…
3.微分(D)
微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减缓震荡。

微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器。

模糊

模糊控制器是基于规则的,制定输入与输出之间的规则,根据输入,通过规则判断,得到输出值。
大致就是将偏差信号分段,根据规则及隶属函数,匹配控制信号的输入。
简答化说,比如液位控制,水位低了,加大进水阀,水位高了,加大出水阀。

神经网络控制算法

以下为一个单神经元网络示意图,利用偏差,状态,及系统输出等作为输入,经过神经网络计算控制律。
在这里插入图片描述

现代控制算法

LQR

https://www.bilibili.com/video/BV1RW411q7FD/?spm_id_from=trigger_reload
其实就是通过优化状态反馈K来调整状态方程的特征值。通过调整特征值来得到我们需要的性能。高反应,低能耗等
在这里插入图片描述
即:
在这里插入图片描述
原始状态方程变为:
在这里插入图片描述
那么,什么样的极点会使得系统性能很棒呢?并且,当系统变量很多的时候,即使设计好了极点,矩阵K也不好计算。
使用如下方程,Q,R为正定矩阵,根据系统所需性能,调整Q,R,来约束x及u。
在这里插入图片描述
思考:
x ˙ = A x + u \dot x=Ax+u x˙=Ax+u
其实,假设以上为单变量方程,A的特征值为-K,
则当 x ˙ = − K x \dot x=-Kx x˙=Kx时, x x x就会以指数速率趋近稳态,以上为子稳定系统,稳态点为0。因为 x = e − k t x=e^{-kt} x=ekt
令, u = − K 1 x u=-K_1x u=K1x会非常有效。则状态方程变为 x ˙ = − ( K + K 1 ) x \dot x=-(K+K_1)x x˙=(K+K1)x,因此可以调节系统的稳态相应速度。
u = b u=b u=b时,系统稳态点由0迁移到 x ˙ = − K x + b = 0 → x = b / K \dot x=-Kx+b=0 \rightarrow x=b/K x˙=Kx+b=0x=b/K。因此, u = − K x + b u=-Kx+b u=Kx+b,可以在调节响应速率得同时,改变稳态点。b可以是PID值, b = K p e + K i ∫ e + K d e ˙ b=K_pe+K_i \int e + K_d\dot e b=Kpe+Kie+Kde˙,也可以是你自己设计的其他关于e的函数,从而将系统约束到指定值。

滑模算法利用超平面令 s = e = x − x d s = e = x - x_d s=e=xxd,来将系统稳态迁移到 x d x_d xd
LQR更适合用来改变系统相应速率(系统特征值),而滑模可以改变系统的稳态点。

自适应控制

当系统的参数未知时,如何使系统根据不同情况达到理想状态,就是自适应控制算法的应用场景。
https://www.bilibili.com/video/BV1yW411u7qv
设系统为:a未知
x ˙ = a x 2 +   u \dot{x}=ax^2+\ u x˙=ax2+ u
e = x d − x e=x_d-x e=xdx

李雅普诺夫方程:
a ~ = a − a ^ \widetilde{a}=a-\hat a a =aa^
V ( e ,   a ~ ) = 1 2 e 2 + 1 2 a ~ 2 V_{(e,\widetilde{\ a})}=\frac{1}{2}e^2+\frac{1}{2}{\widetilde{a}}^2 V(e, a )=21e2+21a 2

控制器设计:

u = x d ˙ + x 2 ∫ 0 t e x 2 d t + K e u=\dot{x_d}+x^2{\int_{0}^{t}ex^2}dt+Ke u=xd˙+x20tex2dt+Ke

滑模控制

原理及设计步骤分为两步:

  1. 设计滑模超平面 s = Σ c x s=\Sigma cx s=Σcx
    根据系统所期望的动态特性来设计系统的切换超平面 s = Σ c x s=\Sigma cx s=Σcx,系统状态一旦到达滑模面,将以指数趋近方式达到稳定状态。
    如: s = c 1 x + c 2 s=c_1x+c_2 s=c1x+c2
    在这里插入图片描述
    可以看出滑模面上的状态量最终都会趋于零,而且是以指数速度趋近。
  2. 设计趋近律
    设计律用来将系统状态向滑模平面上滑动,其实就是,如果状态不在滑模平面,就把它牵引到滑模平面上,从而能够保证稳定性。即如何令 s = 0 s=0 s=0的问题。
    趋近律的设计一般有:
    1)等速趋近律
    在这里插入图片描述
    2)幂次趋近律
    在这里插入图片描述
    3)一般趋近律
    在这里插入图片描述
    4)指数趋近律
    在这里插入图片描述
    其中 s g n ( s ) sgn(s) sgn(s)是符号方程, s g n ( s ) sgn(s) sgn(s)是方程是用于规范s的稳态在0点,如:
    在这里插入图片描述
    s s s的状态变化,跟普通的状态方程那样,使用相平面分析, s ˙ \dot s s˙ s s s偏离0状态时,会被拉回到零点, s ˙ \dot s s˙与s偏离0的方向相反。最终使 s s s逐步趋近于0。

通过滑动模态控制器 s ˙ = g ( s ) \dot{s}=g(s) s˙=g(s),如 s ˙ = ε   s g n ( s ) \dot{s}=\varepsilon\ sgn(s) s˙=ε sgn(s)使系统状态从超平面之外向切换超平面收束。系统一旦到达切换超平面,控制作用将保证系统沿切换超平面到达系统原点,这一沿切换超平面向原点滑动的过程称为滑模控制。

  1. 根据设计的滑模面和趋近律计算出控制参数。
    例子:
    x ˙ = f ( x ) + u \dot{x}=f(x)+u x˙=f(x)+u
    令: s = x → 0 s=x \rightarrow 0 s=x0
    要使x最后趋近于0,则
    s ˙ = x ˙ = f ( x ) + u = − ε   s g n ( x ) \dot{s}=\dot{x}=f\left(x\right)+u=-\varepsilon\ sgn\left(x\right) s˙=x˙=f(x)+u=ε sgn(x)
    得:
    u = − f ( x ) − ε   s g n ( x ) u=-f\left(x\right)-\varepsilon\ sgn\left(x\right) u=f(x)ε sgn(x)
    ε \varepsilon ε一般也会选择随动非负参数,当状态量x接近稳态时, ε → 0 \varepsilon \rightarrow 0 ε0,减少震荡。

注:一般在实际中,通常是使 s = e → 0 s=e \rightarrow 0 s=e0,以约束误差为0来设计趋近律。
如:

https://www.bilibili.com/video/BV1KW411j7VS/?spm_id_from=333.788.videocard.0
以下为将 s = e s=e s=e来设计控制律例子:即要使 e e e接近0。
x ˙ = f ( x ) +   u \dot{x}=f(x)+\ u x˙=f(x)+ u,其中 f ( x ) < = ρ ( x ) f(x)<=\rho\left(x\right) f(x)<=ρ(x)
e = x d − x e=x_d-x e=xdx
控制器设计:
u = K e + x d ˙ + ρ ( x ) e ∣ e ∣ u=Ke+\dot{x_d}+\rho\left(x\right)\frac{e}{\left|e\right|} u=Ke+xd˙+ρ(x)ee x d ˙ = 0 ? \dot{x_d}=0? xd˙=0?
此时:
e ˙ = − K e − f ( x ) − ρ ( x ) e ∣ e ∣ \dot{e}=-Ke-f(x)-\rho\left(x\right)\frac{e}{\left|e\right|} e˙=Kef(x)ρ(x)ee
e ˙ = − K e \dot{e}=-Ke e˙=Ke构成滑模面,对应其他 s ( x ) = a x + b = 0 s(x)=ax+b=0 s(x)=ax+b=0的滑模面。
f ( x ) − ρ ( x ) e ∣ e ∣ f(x)-\rho\left(x\right)\frac{e}{\left|e\right|} f(x)ρ(x)ee约束其他点回归到 e ˙ = − K e \dot{e}=-Ke e˙=Ke构成滑模面上。(没懂)
在这里插入图片描述
滑模变结构控制的
超平面 s = Σ c x s=\Sigma cx s=Σcx也称滑模面,滑模面上的状态x,会以指数速度逼近稳态值。调节时间短,滑模控制就是找到了一个可以快速趋近稳态的路径。

附上其他链接https://blog.csdn.net/xiaohejiaoyiya/article/details/90271529

系统稳定性

幅值裕度/相位裕度-https://www.zhihu.com/question/27347401
截止频率-https://www.sohu.com/a/240960600_465219
电子滤波器等信号传输通道中的诸如低通、高通、带通、带阻等频带特性都应用了截止频率的概念。截止频率有时被定义为电子滤波器的导通频带和截止频带的交点,例如电路标称输出信号减3分贝的位置的频率。在带阻滤波器中,截止频率则被定义在输出信号能量大幅上升(或大幅下降)、失去“阻止”(或失去“通过”)信号效果的频率位置。在波导管或者天线的例子中,截止频率通常包括上限频率和下限频率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制算法整理 的相关文章

  • 【自学Python】Python bytes转string

    Python bytes转string Python string转bytes教程 在 Python 中 xff0c bytes 类型和 字符串 的所有操作 使用和内置方法也都基本一致 因此 xff0c 我们也可以实现将 bytes 类型转
  • 【自学Python】Python查找字符串位置

    Python查找字符串位置 大纲 Python查找字符串位置教程 在开发过程中 xff0c 很多时候我们有在一个 字符串 中查找另一个字符串位置的需求 xff0c 在 Python 中 xff0c 在一个字符串中查找另一个字符串的位置我们使
  • 【自学Docker 】Docker port命令

    Docker port命令 概述 docker port命令教程 docker port 命令可以用于列出指定的 Docker容器 的端口映射 xff0c 或者将容器里的端口映射到宿主机 该命令后面的 CONTAINER 可以是容器Id x
  • 【自学Docker】Docker pull命令

    大纲 Docker pull命令 docker pull命令教程 docker pull 命令用于从镜像仓库中拉取或者更新指定镜像 docker pull 命令中的 name 即镜像名称后面可以跟上镜像标签或者镜像摘要 docker pul
  • 【自学Docker】Docker push命令

    大纲 Docker push命令 docker push命令教程 docker push 命令用于将本地的 Docker镜像 上传到 Docker镜像仓库 docker push命令使用之前需要要先登陆到镜像仓库 docker push命令
  • 【自学Linux】Linux运行级别

    Linux运行级别 Linux运行级别教程 Linux 可以支持运行级别的设置 xff0c 运行级别就是操作系统当前正在运行的功能级别 xff0c 级别是从 0 到 6 Centos7 系统之前的版本是通过 etc inittab 文件来定
  • 【自学Linux】 Linux文件目录结构

    Linux文件目录结构 Linux文件目录结构教程 在 Linux 中 xff0c 有一个很经典的说法 xff0c 叫做一切皆文件 xff0c 因此 xff0c 我们在系统学习 Linux 之前 xff0c 首先要了解 Linux 的文件目
  • 【自学Linux】Linux一切皆文件

    Linux一切皆文件 Linux一切皆文件教程 Linux 中所有内容都是以文件的形式保存和管理的 xff0c 即一切皆文件 xff0c 普通文件是文件 xff0c 目录是文件 xff0c 硬件设备 xff08 键盘 监视器 硬盘 打印机
  • 链路聚合--Eth-Trunk

    链路聚合技术是解决二层交换机多条链路产生环路的问题 xff0c 不仅避免了环路问题 xff0c 还提高了数据的传输效率 链路聚合分为两种模式 xff1a 手动模式和LACP模式 手动模式 手动模式就是人工的方式去创建Eth Trunk和成员
  • 块元素和内联元素的特点和区别

    lt css基础之块级元素和内联元素 块级元素的特点 xff1a 1 占一整行 2 是一个矩形 3 可定义宽度和高度 xff0c 内边距 xff0c 外边距等 4 其display属性默认为block 内联元素的特点 xff1a 1 并不占
  • 在vs code中使用git

    在vs code使用git 1 下载安装git 下载地址 xff1a Git Downloads 下载后安装选择默认选项即可 2 安装完成后 xff0c 设置git的环境变量 xff1a 在系统的path环境变量中添加git exe的安装目
  • Ubuntu下压缩与解压缩

    一 linux下常用的压缩格式 linux下常用的压缩扩展名有 xff1a tar tar bz2 tar gz 二 Windows下7ZIP软件的安装 因为Linux下很多文件是bz2 gz结尾的文件 xff0c 因此需要在windows
  • VIO的图优化模型

    因子图结构 VIO在纯视觉的基础上添加了IMU约束 xff0c 因子图如下 xff1a 状态变量 VIO中 xff0c 待估计的状态变量为 i 61 R
  • CMakeLists写法总结

    个人最近学习了一些关于常见的CMakeLists的一些写法格式 xff0c 分享给大家 CMAKE MINIMUM REQUIRED VERSION xxx 该项表示要求CMAKE的最低版本号 PROJECT aim1 此项表示所建立的工程
  • Qt两种传参形式(信号槽传参、界面传参)

    一 UI界面传参 在Qt中传输数据通常有两种形式 xff0c 一种是把待传输的数据先保存到UI界面的控件中 xff0c 然后子类从界面中读取数据 使用该控件作为参数传递承载 1 首先将计算出的数值传到控件中 ui span class to
  • Intel RealSense T265 Windows10 环境下运行

    Intel RealSense T265 Windows10 环境下运行 最近从某宝上买了个T265 体验了下 intel的硬件开发 卖家怕我不会用还专门问了我会不会用 intel的包装里面不带那个很酷炫的三脚架 xff01 xff01 x
  • TB6612FNG电机驱动替代方案

    最近东芝的一个很常用的电机驱动芯片TB6612FNG停产 xff0c 这是一个全桥驱动芯片 xff0c 经过测试 xff0c 两款比较好的替代芯片有ST公司的L298系列 xff0c L293D系列和VNH5019系列的全桥驱动器 这里的完
  • 关于链表中头指针和头结点的理解

    线性表使用顺序 xff08 数组 xff09 存储时有个弊端 xff0c 那就是在插入和删除时需要大量的移动数据 xff0c 这显示是非常消耗时间的 xff0c 所以可以采用链式存储 xff0c 即有一个指针域 xff08 单链表 xff0
  • 相对深度与绝对深度,深度图与真实距离

    刚开始看单目深度估计 xff0c 好多概念都不清楚 xff0c 下面是我的理解 xff0c 有不对之处希望大佬指出 首先是相对深度和绝对深度的概念 绝对深度就是利用激光雷达等设备获取的相机与物体之间的距离 xff0c 比如KITTI数据集就

随机推荐