核心内容摘要
78岁“塞”进13岁:一场跨越时空的奇幻之旅
滑模 终端滑模 smc在控制理论的广阔天地里滑模控制Sliding Mode ControlSMC宛如一颗璀璨的明珠而终端滑模则是在其基础上进一步发展的瑰宝。
今天咱们就来唠唠这滑模和终端滑模到底是啥神奇玩意儿。
滑模控制SMC基础滑模控制的核心思想有点像引导一辆车沿着特定轨迹行驶。
想象一下你开车要去一个目的地有一条理想的路线滑模控制就是想尽办法让车始终沿着这条理想路线走即使路上有各种干扰。
从数学和控制的角度看我们定义一个滑动面函数 \(s(x)\)这里 \(x\) 是系统的状态变量。
当系统状态在这个滑动面上运动时系统能呈现出我们期望的性能。
比如说对于一个简单的二阶控制系统状态变量 \(x [x1, x2]^T\)我们可能定义滑动面 \(s c x1 x2\)其中 \(c\) 是一个根据系统特性精心选择的常数。
下面咱们来点简单代码示例用Python和控制库来模拟一个简单的滑模控制系统。
假设我们有一个一阶线性系统 \(\dot{x} -x u\)目标是让 \(x\) 跟踪参考信号 \(r\)。
import numpy as np import matplotlib.pyplot as plt # 定义系统参数 a -1 b 1 c 1 # 滑动面参数 # 时间设置 t np.linspace(0, 10,
dt t[1] - t[0] # 初始化变量 x np.zeros(len(t)) u np.zeros(len(t)) r np.sin(t) # 参考信号 # 滑模控制模拟 for i in range(len(t) -
: s c * x[i] (r[i 1] - r[i]) / dt if s 0: u[i] -1 else: u[i] 1 x[i 1] x[i] dt * (a * x[i] b * u[i])在这段代码里我们先定义了系统的参数 \(a\) 和 \(b\)还有滑动面参数 \(c\)。
然后设定时间范围和初始化变量。
在循环里我们根据滑动面函数 \(s\) 的值来确定控制输入 \(u\)。
如果 \(s 0\)就给系统一个负的控制输入反之给正的控制输入。
这样系统状态 \(x\) 就会逐渐被引导到我们期望的轨迹上。
终端滑模控制Terminal SMC进阶终端滑模控制是滑模控制的升级版它能让系统在有限时间内收敛到平衡点就好比开车不仅要沿着理想路线走还得在规定时间内到达目的地。
滑模 终端滑模 smc终端滑模的滑动面设计更为巧妙例如对于二阶系统可能会定义终端滑模面 \(s x2 \lambda x1^{\frac{q}{p}}\)其中 \(\lambda\) 是正常数\(q\) 和 \(p\) 是满足一定条件的正奇数。
这种设计使得系统在靠近平衡点时收敛速度更快。
下面还是以刚才的一阶系统为例简单改改代码来体现终端滑模的效果。
这里我们为了简化只修改滑动面函数部分实际应用中还需要更复杂的设计和推导。
import numpy as np import matplotlib.pyplot as plt # 定义系统参数 a -1 b 1 lambda_ 1 q 3 p 1 # 终端滑模参数 # 时间设置 t np.linspace(0, 10,
dt t[1] - t[0] # 初始化变量 x np.zeros(len(t)) u np.zeros(len(t)) r np.sin(t) # 参考信号 # 终端滑模控制模拟 for i in range(len(t) -
: s (r[i 1] - r[i]) / dt lambda_ * np.sign(x[i]) * np.abs(x[i]) ** (q / p) if s 0: u[i] -1 else: u[i] 1 x[i 1] x[i] dt * (a * x[i] b * u[i])在这段代码里我们修改了滑动面函数 \(s\) 的计算方式引入了终端滑模的参数 \(\lambda\)、\(q\) 和 \(p\)。
这样系统在运行过程中状态 \(x\) 会以更快的速度朝着参考信号 \(r\) 收敛尤其是在靠近平衡点的时候效果更为明显。
滑模控制和终端滑模控制在实际应用中非常广泛从机器人控制到飞行器姿态调整它们都发挥着重要作用。
通过巧妙的滑动面设计和控制律推导能让复杂系统在各种干扰下依然稳定且高效地运行。
希望大家通过这篇博文对滑模和终端滑模有了更直观的认识有兴趣的朋友可以深入研究说不定能在自己的项目里挖掘出它们更大的潜力呢