Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

发布于:2025-02-26 ⋅ 阅读:(16) ⋅ 点赞:(0)

滑模控制(Sliding Mode Control)算法详解


一、基本原理

滑模控制(Sliding Mode Control, SMC)是一种变结构控制方法,通过设计一个滑模面(Sliding Surface),迫使系统状态在有限时间内到达该面,并在滑模面上沿预定轨迹滑动至平衡点。其核心特点是强鲁棒性,能够有效抑制参数不确定性、模型误差和外部扰动。
在这里插入图片描述

关键步骤
  1. 滑模面设计
    定义滑模面 ( s(t) = 0 ),通常选择误差及其导数的线性组合。
    例如,对二阶系统:
    [
    s(t) = \dot{e}(t) + \lambda e(t) \quad (\lambda > 0)
    ]
    其中 ( e(t) = x_{\text{desired}} - x(t) )。

  2. 控制律设计
    设计控制输入 ( u(t) ),使得系统状态在有限时间内收敛到滑模面,并保持滑动。
    控制律一般形式:
    [
    u(t) = u_{\text{eq}}(t) + u_{\text{sw}}(t)
    ]

    • 等效控制 ( u_{\text{eq}} ):抵消系统动态,保证在滑模面上滑动。
    • 切换控制 ( u_{\text{sw}} ):抑制扰动,通常包含符号函数 ( \text{sign}(s) )。
  3. 稳定性分析
    通过李雅普诺夫函数证明 ( \dot{V}(s) \leq -\eta |s| ),确保有限时间收敛。


二、分类
  1. 传统滑模控制

    • 控制律包含不连续项(如符号函数),易引起抖振(高频振荡)。
    • 示例:
      [
      u(t) = K \cdot \text{sign}(s)
      ]
  2. 高阶滑模控制

    • 通过高阶导数平滑抖振,如超螺旋算法(Super-Twisting Algorithm)。
    • 示例(二阶滑模):
      [
      u(t) = -k_1 |s|^{1/2} \text{sign}(s) + v, \quad \dot{v} = -k_2 \text{sign}(s)
      ]
  3. 终端滑模控制

    • 引入非线性滑模面,实现有限时间收敛。
    • 示例:
      [
      s(t) = \dot{e} + \beta e^{q/p} \quad (\beta > 0, , q < p \text{为正奇数})
      ]

三、代码实现(Python)

以二阶系统为例,设计传统滑模控制器。

import numpy as np
import matplotlib.pyplot as plt

class SlidingModeController:
    def __init__(self, lambda_, K, dt):
        self.lambda_ = lambda_  # 滑模面参数
        self.K = K              # 切换增益
        self.dt = dt            # 采样时间
        self.prev_error = 0.0

    def compute(self, desired, actual, actual_derivative):
        error = desired - actual
        error_derivative = (error - self.prev_error) / self.dt
        self.prev_error = error

        # 滑模面 s = error_derivative + lambda * error
        s = error_derivative + self.lambda_ * error

        # 控制律: u = K * sign(s)
        u = self.K * np.sign(s)
        return u

# 系统模型(二阶系统)
def system_model(x, dx, u, dt):
    # 假设系统动力学: ddx = -2*dx - 3*x + u + 扰动
    ddx = -2 * dx - 3 * x + u + 0.5 * np.sin(10 * x)  # 加入扰动
    dx_new = dx + ddx * dt
    x_new = x + dx_new * dt
    return x_new, dx_new

# 参数初始化
lambda_ = 2.0
K = 5.0
dt = 0.01
controller = SlidingModeController(lambda_, K, dt)

# 仿真
desired = 1.0
x, dx = 0.0, 0.0
time = np.arange(0, 10, dt)
x_history = []

for t in time:
    u = controller.compute(desired, x, dx)
    x_new, dx_new = system_model(x, dx, u, dt)
    x, dx = x_new, dx_new
    x_history.append(x)

# 绘图
plt.plot(time, x_history, label='Actual')
plt.plot(time, [desired]*len(time), 'r--', label='Desired')
plt.xlabel('Time (s)')
plt.ylabel('Position')
plt.legend()
plt.show()

四、在卫星姿态控制中的使用示例
场景

控制卫星三轴姿态(俯仰角、偏航角、滚动角),使其跟踪目标姿态角。
动力学模型(以俯仰轴为例):
[
J \ddot{\theta} = u + d(t)
]

  • ( J ):转动惯量
  • ( \theta ):俯仰角
  • ( u ):控制力矩
  • ( d(t) ):外部扰动(如太阳辐射压力)。
滑模控制设计
  1. 定义误差
    [
    e = \theta_{\text{desired}} - \theta
    ]

  2. 滑模面
    [
    s = \dot{e} + \lambda e \quad (\lambda > 0)
    ]

  3. 控制律
    [
    u = J \left( \ddot{\theta}_{\text{desired}} + \lambda \dot{e} \right) - K \cdot \text{sign}(s)
    ]
    (包含等效控制和切换项)

代码片段(简化)
class SatelliteSMController:
    def __init__(self, lambda_, K, J, dt):
        self.lambda_ = lambda_
        self.K = K
        self.J = J
        self.dt = dt
        self.prev_error = 0.0

    def compute(self, theta_desired, theta, dtheta):
        error = theta_desired - theta
        error_derivative = (error - self.prev_error) / self.dt
        self.prev_error = error

        s = error_derivative + self.lambda_ * error
        u_eq = self.J * (0 + self.lambda_ * error_derivative)  # 假设目标角加速度为0
        u_sw = -self.K * np.sign(s)
        u = u_eq + u_sw
        return u

# 卫星姿态动力学仿真
J = 100.0  # 转动惯量
dt = 0.01
controller = SatelliteSMController(lambda_=1.5, K=50, J=J, dt=dt)
theta, dtheta = 0.0, 0.0
theta_desired = np.deg2rad(30)  # 目标30度

for _ in range(1000):
    u = controller.compute(theta_desired, theta, dtheta)
    ddtheta = (u + 10 * np.sin(2 * np.pi * 0.1 * _ * dt)) / J  # 控制输入 + 扰动
    dtheta += ddtheta * dt
    theta += dtheta * dt

五、关键问题与改进
  1. 抖振抑制

    • 使用饱和函数 ( \text{sat}(s/\phi) ) 替代符号函数。
    • 采用高阶滑模(如超螺旋算法)。
  2. 参数选择

    • ( \lambda ) 决定滑模面收敛速度。
    • ( K ) 需大于扰动上界。

六、总结
  • 优点:强鲁棒性,适用于复杂扰动和模型不确定性场景(如航天器、无人机)。
  • 缺点:抖振可能影响执行机构寿命。
  • 应用扩展:结合自适应控制、模糊逻辑,进一步提升性能。