📁 Sunhao's Log
← 返回笔记列表 / SE(3) 滑模控制
SE(3) 滑模控制 ★ 读者评价

SE(3) 航天器交会对接滑模控制 (四):物理落地与前沿融合:单向推力分配、脉冲调制与控制屏障函数 (CBF) 杂交

系列收官篇:深入剖析李群 SE(3) 上滑模控制的星载工程落地瓶颈,涵盖单向非负单极性推力分配 (Lang 2021)、脉宽脉频调制器 (PWPF) 离散脉冲化、安全走廊控制屏障函数 (CBF) 杂交与未来管道滑模 (Tube-SMC) / 强化学习 (RL-SMC) 前沿演进。

#se3-control #lie-group #control-allocation #pwpf #input-saturation #control-barrier-functions #sliding-mode-control #rendezvous-and-docking #safe-rl #math-heavy

引言:从优雅数学走向空间物理执行机构的“最后十公里”

在前三篇博文中,我们从李群微分几何基础出发,逐层攻克了空间六自由度姿轨一体化交会的二阶动力学解耦、未知模型参数自适应、速度未测输出反馈以及固定时间超强收敛。在纯数学的控制理论框架下,广义控制力矩向量:

被理想化地假定为一个可以任意连续取值的实双极性向量——系统可以在毫秒内平滑输出 的力矩,随后又无缝切换为 的推力。

然而,当这些推演部署到真实的卫星飞控计算机与物理执行硬件上时,工程师必须直面三大残酷的工程物理铁律:

  1. 推力器的单向单极性物理硬约束(Unidirectional Thrust):卫星上的冷气或化学反作用控制推力器(RCS),本质上是通过高压气体喷出获得反作用力的工质推进器。推进剂只能向外喷射产生推力,物理上绝不可能产生“反向吸力”! 每一个推力器的输出必须严格满足单侧非负硬约束:。控制理论常用的伪逆分配若出现负值,在工程上根本无法执行;
  2. 电磁阀二值离散脉冲开闭(On-Off Binary Actuation):高可靠性微小推力器电磁阀并非能够连续调节开度的伺服阀,而是仅有“100% 全开”或“0% 全闭”两种离散状态的高频开关阀!连续滑模力矩必须通过**脉宽脉频调制器(PWPF)**或脉宽调制器(PWM)离散化为高频点火脉冲;
  3. 对接走廊几何屏障(Docking Corridor & FOV Barrier):在逼近至目标航天器数米范围内的近距离阶段,相对轨迹必须被死死限制在视场对接锥(Line-of-Sight Cone)内。传统滑模控制为了追求最快收敛常常走“空间捷径”,极易横切穿越安全走廊壁诱发灾难性硬碰撞。

作为 “SE(3) 航天器交会对接滑模控制四部曲”的终章收官篇,本文将彻底打通理论控制律与物理执行机构之间的“最后十公里”:

  • 单向推力分配与二次规划最优解算:解析 Lang 2021 冗余推力器构型下的最优控制分配(Optimal Control Allocation),揭示非负凸优化在推力重构中的数学本质;
  • 脉宽脉频调制器(PWPF)的脉冲化转换:深入分析施密特触发器内部动力学,推演最小点火时间(MIPT)与滑模死区滞环抗自激机制;
  • 安全走廊控制屏障函数(CBF)与滑模杂交:构建 High-Order CBF-QP 安全过滤器,在保留滑模强鲁棒性的同时为全轨线构筑零碰撞正不变集;
  • 前沿融合技术展望:横向对比**管道滑模控制(Tube-SMC)与鲁棒 MPC 的算力边界,解构强化学习(Safe RL-SMC)**自适应消抖的未来演进范式。

一、单向单极性推力分配理论与二次规划 (QP) 优化 (Lang 2021)

1.1 推进器构型矩阵与单向物理约束

设航天器装配有 个冷气或单组元化学推力器(通常 或 以提供全六自由度控制冗余)。第 个推力器安装在星体坐标系位置 ,推力喷射方向单位矢量为 。

当第 个推力器输出非负推力 时,其产生的推力与相对质心力矩为:

将所有 个推力器合成,航天器承受的合外力与合力矩旋量写为线性推力构型映射:

其中分配构型矩阵 的第 列向量为:

推力器指令向量 必须满足物理硬件硬约束:

1.2 为什么简单伪逆解算是灾难性的?

在无约束线性代数中,控制分配通常采用摩尔-彭罗斯广义逆(Moore-Penrose Pseudoinverse):

然而,式 (6) 计算出的 几乎必然包含大量负数分量(即要求某些推力器产生“反向吸力”)。若工程上简单将其截断为零(),截断后的推力 重新合成的实际力矩:

会在空间三维角度与力通道上产生严重的方向畸变!这一未建模误差会直接摧毁滑模李雅普诺夫函数的负定性条件 ,导致航天器姿态失稳发散。

1.3 二次规划 (QP) 最优推力分配范式

为了在严格满足单向推力硬约束的前提下,最小化推进剂消耗并精确跟踪滑模期望力矩,控制分配被形式化为有约束二次规划(Quadratic Programming, QP)问题:

其中 为能耗加权矩阵, 为松弛惩罚因子(当指令过大导致推力器完全饱和时,保证优化问题始终强可行)。

Lang 2021 进一步将该问题拓展为网络化分布式迭代分配,使每个推力器模块仅需与相邻推进单元交互信息,即可在无中心处理器的情况下协作收敛至全局最优推力分配矩阵。


二、脉宽脉频调制器 (PWPF):连续力矩向二值离散脉冲的转译

1.1 PWPF 调制器内部机理

在多数工程卫星中,推力器是二值脉冲开关器件。将连续推力指令 转译为开关点火信号 的经典方案是脉宽脉频调制器(Pulse-Width Pulse-Frequency Modulator, PWPF)。

PWPF 调制器内部结构 图 1: 脉宽脉频调制器 (PWPF) 的内部传递闭环架构(一阶滤波环节 + 施密特滞环触发器)

PWPF 的内部微分传递方程包含两个核心组件:

  1. 一阶滞后低通滤波器:将输入推力指令 滤除高频抖振,其状态方程为: 其中 为滤波器增益, 为滤波时间常数, 为电磁阀当前实际输出值;
  2. 施密特滞环触发器(Schmitt Trigger):定义开启阈值 与关闭阈值 ()。点火信号遵循如下滞环逻辑:

PWPF 离散开关推力输出时序图 图 2: Lang 2021 PWPF 调制器输出的推进器点火脉冲序列(高频离散矩形波等效模拟连续力矩)

2.2 最小点火时间 (MIPT) 与滑模死区滞环

电磁阀在物理上存在最小点火脉宽(Minimum Impulse Bit, MIPT),通常为 。如果开启动作时间短于该阈值,电磁阀阀芯尚未完全提起即被命令关闭,推进剂雾化极差,造成推进剂大量浪费且比冲断崖式下跌。

滑模控制的死区适配方案: 滑模控制如果含有高频颤振,会直接诱使 PWPF 在死区边缘反复打火。因此,在连续滑模控制器与 PWPF 之间必须部署自适应死区滤波器:

当相对位姿误差进入稳态残差带时,强行切断微弱脉冲,使航天器进入零能耗纯惯性滑行模态。


三、安全对接走廊与控制屏障函数 (CBF) 的滑模动态融合

在自主对接最终逼近段,跟随航天器必须严格驻留在以对接轴为对称中心的圆锥体安全走廊(Line-of-Sight / Approach Corridor)内,防止敏感对接机构(如弱撞击对接环、抓捕锁销)发生偏心折断。

3.1 对接走廊与视场锥的安全边界函数

设跟随航天器相对于目标对接机构的相对位置在对接导向系下表示为 (其中 为进近轴向距离, 为横向偏心量)。安全对接锥定义为:

其中 为允许的最大进近半锥角。由此定义连续可微的安全屏障函数(Barrier Function):

系统状态在全时域保持在走廊内部等价于安全集 的前向正不变性(Forward Invariance)。

3.2 二阶控制屏障函数 (HOCBF) 与滑模动态融合

由于相对动力学中控制输入出现在位置的二阶导数加速度层(相对阶为 2),必须使用高阶控制屏障函数(High-Order CBF, HOCBF):

定义综合屏障算子:

将航天器平动相对加速度 代入 ,式 (15) 转化为了关于控制推力 的线性不等式约束:

3.3 CBF-SMC 动态滤波二次规划

在传统设计中,滑模控制器直接计算出连续跟踪推力 。为了防止该推力强行横穿安全锥边界,我们构建 CBF-SMC 动态安全滤波器:

  • 在走廊内部深处(安全裕度充分):CBF 约束处于非激活态,,全系统完全享受滑模控制的高抗扰与固定时间快速收敛性能;
  • 在逼近走廊边界边缘(发生越界危险):CBF 约束瞬间激活,在线 QP 求解器以最小能量偏斜对滑模推力进行“正交折向投影”,沿着走廊壁施加反推缓冲力,确保航天器绝不触碰安全走廊硬红线!

四、微重力质心漂移与乘性寄生力矩的在线解耦

4.1 推进剂消耗引发的质心 (CoM) 物理漂移

在执行长达数十分钟的大机动空间逼近过程中,推进系统消耗大量推进剂,导致航天器真实质心相对本体几何几何中心产生未知的三维空间位移:

该位移使每个推力器的力臂发生形变:。此时,推力构型矩阵中的力矩分块发生乘性漂移:

当轨道推力器喷射数十牛顿的轨道制动力时,偏心位移 会激发出高达数牛·米的强寄生扰动力矩:

4.2 基于递推最小二乘 (RLS) 的力臂自适应校正

为了消除寄生力矩对姿态控制回路的剧烈冲击,系统在推力分配层部署基于角加速度残差的递推最小二乘(RLS)质心在线辨识器:

通过在线更新质心估计值 ,动态修正分配矩阵 ,使得控制分配器能够在底层自动动用反作用飞轮或差动喷气,预先精准抵消轨道喷气带来的附加偏心力矩。


五、空间先进滑模前沿融合展望

站在空间非线性控制的最前沿,滑模控制正在与现代优化理论与人工智能深度交织,演进出两大极具生命力的技术流派:

5.1 管道滑模 (Tube-SMC) vs 鲁棒 MPC

在处理多状态硬约束空间任务时,学术界与工业界正逐步走向融合:

核心特性鲁棒模型预测控制 (Robust Tube-NMPC)管道滑模控制 (Tube-SMC)
约束处理能力显式多约束多胞体/椭球收缩求解通过鲁棒正不变集 (RPI) 管道截断
计算复杂度高(依赖在线非线性二次规划/SQP)极低(纳秒级解析显式表达)
星载求解失败风险存在超时不收敛或初值Feasibility丢失风险绝对零失败(恒定确定性时钟周期)
对极端强扰动适应力需增大保守度收缩约束窗利用滑模高频反馈强力锚定

未来的大一统架构: 由星载上层粗粒度运行离散凸优化 MPC 求解标称最优规划管道 ;底层飞控循环(100Hz)由李群 Tube-SMC 作为辅助高频跟踪器,将真实星体状态硬生生锁定在优化管道之内,兼具宏观能耗最优与微观绝对安全。

5.2 强化学习安全滑模 (Safe RL-SMC) 孪生架构

针对滑模切换增益难以精准适配时变空间环境的难题,国际学界提出了 Safe RL-SMC 孪生学习体系:

  • Actor 策略网络:感知当前李代数误差与历史摄动统计分布,输出动态平滑的变增益矩阵 ;
  • Critic 价值网络:显式惩罚控制动作的高阶导数(减小机械抖振)与总推进剂消耗;
  • 滑模 Lyapunov 安全护栏:强制要求策略网络的输出必须落入李雅普诺夫耗散导数界 构成的安全包络内部。若网络探索超出安全域,底层滑模硬切换机制瞬间接管,确保强化学习在全生命周期内绝对零飞逸。

六、经典复现成果图谱解构 (Lang 2021)

本节展示 Lang 2021 关于六自由度航天器全推力器冗余最优分配与 PWPF 调制的基准复现图谱。

Lang 2021 系统控制框图 图 3: Lang 2021 空间六自由度分布式推力分配与姿轨一体化闭环控制架构

Lang 2021 推进器构型示意图 图 4: 航天器表面多组元冗余单元推力器空间布置几何构型

Lang 2021 最优推力分配响应曲线 图 5: 二次规划推力分配器输出的各推进器连续推力指令(严格满足非负约束 )

Lang 2021 推进剂能耗对比曲线 图 6: 不同最优分配方案下的累计推进剂质量消耗对比:基于范数优化的方案展现出卓越的节油特性


七、深度批判性学术评述卡片 (Critique Cards)

评注 1:单向推力分配的非负性硬约束 —— 为什么简单伪逆解算在真实推力器上是数学谬误?
单极性物理边界与双极性数学假象:推进剂只能喷出、无法吸入的非负凸优化红线
在控制理论论文中,最泛滥的推力分配假设莫过于使用摩尔-彭罗斯伪逆(Moore-Penrose Pseudoinverse):<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold-italic">u</mi><mo>=</mo><msup><mi mathvariant="bold-italic">B</mi><mo>†</mo></msup><msub><mi mathvariant="bold-italic">τ</mi><mi>c</mi></msub><mo>=</mo><msup><mi mathvariant="bold-italic">B</mi><mi mathvariant="normal">⊤</mi></msup><mo stretchy="false">(</mo><mi mathvariant="bold-italic">B</mi><msup><mi mathvariant="bold-italic">B</mi><mi mathvariant="normal">⊤</mi></msup><msup><mo stretchy="false">)</mo><mrow><mo>−</mo><mn>1</mn></mrow></msup><msub><mi mathvariant="bold-italic">τ</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">\boldsymbol{u} = \boldsymbol{B}^\dagger \boldsymbol{\tau}_c = \boldsymbol{B}^\top (\boldsymbol{B}\boldsymbol{B}^\top)^{-1} \boldsymbol{\tau}_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4444em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol">u</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0751em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9251em;"><span style="top:-3.139em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">†</span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.1347em;">τ</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1751em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9251em;"><span style="top:-3.139em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9251em;"><span style="top:-3.139em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.1347em;">τ</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。然而,这一经典线性代数公式在真实空间冷气或化学推力器面前是一个致命的“数学童话”!<br><br>
航天器喷气推进器在物理上是严格的<b>单向单极性执行器</b>:推进剂只能通过喷管向外高速喷射产生正向反作用力,物理上绝不可能产生反向“吸力”(必须满足单侧硬约束 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>u</mi><mi>i</mi></msub><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">u_i \ge 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.786em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,实际工作域为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><msub><mi>u</mi><mi>i</mi></msub><mo>≤</mo><msub><mi>u</mi><mi>max</mi><mo>⁡</mo></msub></mrow><annotation encoding="application/x-tex">0 \le u_i \le u_{\max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.786em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">m</span><span class="mtight">a</span><span class="mtight">x</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>)。<br><br>
若无视该约束,简单采用伪逆解算并粗暴截断(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>u</mi><mi>i</mi></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>u</mi><mi>i</mi></msub><mo separator="true">,</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">u_i = \max(u_i, 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span>),合成的合力矩与合推力会发生灾难性的方向偏转,导致滑模等效控制力矩完全失真,系统迅速发散。工业级落地必须采用二次规划(QP)非负主动集法、单纯形法或多组元推力器固定组合拓扑查找表。
评注 2:脉宽脉频调制器 (PWPF) 的极限环震荡与最小点火时间 (MIPT)
连续滑模指令走向微波电磁阀二值离散脉冲:比冲损耗、阀门寿命与死区滞环博弈
大多数高级滑模控制律计算出的是毫秒级微小变化的<b>连续力矩信号</b>。然而,空间推力器电磁阀本质上是高频二值开关器件(仅有“全开 100%”或“全闭 0%”两种状态)。将连续推力转化为离散脉冲的核心桥梁是<b>脉宽脉频调制器 (PWPF)</b>:<br><br>
PWPF 通过一阶惯性滤波环节与施密特触发器(Schmitt Trigger)闭环构成:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>e</mi><mtext>pwpf</mtext></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>u</mi><mi>c</mi></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>−</mo><msub><mi>u</mi><mi>f</mi></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e_{\text{pwpf}}(t) = u_c(t) - u_f(t)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">pwpf</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">u</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.1076em;">f</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span>。但其实装难题在于<b>最小点火时间 (Minimum Impulse Bit / MIPT)</b>:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>T</mi><mi>min</mi><mo>⁡</mo></msub><mo>∈</mo><mo stretchy="false">[</mo><mn>10</mn><mtext> </mtext><mtext>ms</mtext><mo separator="true">,</mo><mn>30</mn><mtext> </mtext><mtext>ms</mtext><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">T_{\min} \in [10\,\text{ms}, 30\,\text{ms}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3175em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">m</span><span class="mtight">i</span><span class="mtight">n</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">10</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">ms</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">30</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">ms</span></span><span class="mclose">]</span></span></span></span>。<br><br>
若连续滑模控制律要求输出极微小的控制量,触发器会在死区临界点频繁抖颤,导致电磁阀在每秒内数十次开闭,不仅由于燃料未充分雾化导致比冲(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>I</mi><mtext>sp</mtext></msub></mrow><annotation encoding="application/x-tex">I_{\text{sp}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0785em;">I</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0785em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">sp</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>)断崖式下跌,更会迅速耗尽电磁阀寿命(通常寿命仅数万至数十万次循环)。工程上必须设置滑模面死区滞环,防止微弱抖振演化为阀门高频自激震荡。
评注 3:视场锥约束 (FOV) 与对接走廊安全性:滑模面与控制屏障函数 (CBF) 的杂交融合
当滑模最速收敛撞上几何碰撞红线:CBF-QP 安全过滤器对滑模到达轨线的动态塑形
经典滑模控制的设计宗旨是“不惜一切代价将状态拖向滑动流形原点”。然而在航天器逼近对接阶段,空间存在刚性的<b>安全对接走廊与视场锥约束 (Line-of-Sight / Docking Corridor)</b>:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="script">C</mi><mtext>cone</mtext></msub><mo>=</mo><mo stretchy="false">{</mo><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo><mo>∣</mo><msqrt><mrow><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><msup><mi>z</mi><mn>2</mn></msup></mrow></msqrt><mo>≤</mo><mi>x</mi><mi>tan</mi><mo>⁡</mo><msub><mi>ϕ</mi><mi>max</mi><mo>⁡</mo></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\mathcal{C}_{\text{cone}} = \{(x,y,z) \mid \sqrt{y^2 + z^2} \le x \tan\phi_{\max}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathcal" style="margin-right:0.0583em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0583em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">cone</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.24em;vertical-align:-0.2822em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9578em;"><span class="svg-align" style="top:-3.2em;"><span class="pstrut" style="height:3.2em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-2.9178em;"><span class="pstrut" style="height:3.2em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.28em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.28em" viewBox="0 0 400000 1296" preserveAspectRatio="xMinYMin slice"><path d="M263,681c0.7,0,18,39.7,52,119

c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 c340,-704.7,510.7,-1060.3,512,-1067 l0 -0 c4.7,-7.3,11,-11,19,-11 H40000v40H1012.3 s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z M1001 80h400000v40h-400000z”/>​≤xtanϕmax​}。

若追踪初始误差较大,传统滑模控制器为了实现所谓的最速收敛,往往会规划出一条横穿安全锥边界的弧形捷径,导致航天器直接撞击对接机构侧壁!

前沿的破局之道是将控制屏障函数 (Control Barrier Function, CBF) 与滑模控制进行 QP 动态滤波杂交:

min⁡u∥u−usmc∥2s.t.h˙+γh≥0\min_{\boldsymbol{u}} |\boldsymbol{u} - \boldsymbol{u}_{\text{smc}}|^2 \quad \text{s.t.} \quad \dot{h} + \gamma h \ge 0
以滑模控制律作为期望名义牵引,由 CBF 条件 h˙(x)+α(h(x))≥0\dot{h}(\boldsymbol{x}) + \alpha(h(\boldsymbol{x})) \ge 0 作为硬性安全防护罩,在即将触碰走廊锥面时对滑模力矩进行最小能量修正,实现“既享有滑模的强抗扰、又确保全时域正不变集安全”。

评注 4:质量与转动惯量剧变下的几何力臂漂移:质心 (CoM) 位移诱发的隐形交叉力矩
厘米级质心位移如何将数十牛顿的轨道推力,转化为压垮姿态飞轮的破坏性力矩?
几乎所有刚体动力学文献都假设“航天器质心 (Center of Mass, CoM) 严格固定于本体坐标系原点”。但在真实的交会对接全流程中,推进剂的大量消耗(占卫星干重 30%~60%)或液体晃动会导致质心发生显著的物理漂移:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∥</mi><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold-italic">r</mi><mtext>CoM</mtext></msub><mi mathvariant="normal">∥</mi><mo>≈</mo><mn>2</mn><mtext> </mtext><mtext>cm</mtext><mo>∼</mo><mn>5</mn><mtext> </mtext><mtext>cm</mtext></mrow><annotation encoding="application/x-tex">\|\Delta \boldsymbol{r}_{\text{CoM}}\| \approx 2\,\text{cm} \sim 5\,\text{cm}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∥Δ</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0319em;">r</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">CoM</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">cm</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">cm</span></span></span></span></span>。<br><br>
这一微小漂移在力学上引发了致命的<b>寄生力矩倍增效应</b>:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold-italic">τ</mi><mtext>parasitic</mtext></msub><mo>=</mo><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold-italic">r</mi><mtext>CoM</mtext></msub><mo>×</mo><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></msubsup><msub><mi mathvariant="bold-italic">f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\Delta \boldsymbol{\tau}_{\text{parasitic}} = \Delta \boldsymbol{r}_{\text{CoM}} \times \sum_{i=1}^m \boldsymbol{f}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.1347em;">τ</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3175em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">parasitic</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0319em;">r</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">CoM</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.104em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.1104em;">f</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2175em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span></span></span></span>。轨道控制推力器点火时,本应通过名义质心的纯推力矢量,此时由于偏心产生了一个随轨道推力同步放大的巨大附加力矩!<br><br>
若控制器不具备质心偏移在线辨识能力,轨道通道的大推力加速机动会瞬间在姿态通道激发出超出反作用飞轮力矩极限的寄生力矩,导致航天器姿态失控打滚。因此,高级分配算法必须将质心漂移协方差融入推力器配置矩阵的在线修正循环中。
评注 5:管道滑模 (Tube-SMC) vs 鲁棒 MPC:空间约束处理的终极路线对比
在线非线性规划求解不确定性与滑模解析确定性执行的终极博弈与互补构想
在处理多约束空间交会对接任务时,控制学界长期存在两大技术学派的路线竞争:<b>管道滑模控制 (Tube-SMC)</b> 与 <b>鲁棒管道模型预测控制 (Robust Tube-NMPC)</b>。<br><br>
1. <b>Tube-NMPC</b>:擅长多状态/输入凸与非凸约束显式求解,理论证明严密,但瓶颈在于在线非线性规划(NLP)求解器的计算耗时不可预测,一旦星载处理器发生求解超时,系统面临Feasibility丢失风险;<br>
2. <b>Tube-SMC</b>:以标称最优轨迹为核心,构建鲁棒正不变集 (RPI) 管道 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="script">Z</mi><mtext>RPI</mtext></msub></mrow><annotation encoding="application/x-tex">\mathcal{Z}_{\text{RPI}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathcal" style="margin-right:0.0794em;">Z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:-0.0794em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">RPI</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,利用滑模高频反馈将实际轨迹牢牢束缚在标称管道内部:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold-italic">s</mi><mtext>tube</mtext></msub><mo>=</mo><msub><mi mathvariant="bold-italic">s</mi><mtext>nom</mtext></msub><mo>+</mo><mi mathvariant="bold-italic">z</mi></mrow><annotation encoding="application/x-tex">\boldsymbol{s}_{\text{tube}} = \boldsymbol{s}_{\text{nom}} + \boldsymbol{z}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5944em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">s</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">tube</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">s</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">nom</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4444em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0421em;">z</span></span></span></span></span></span>。<br><br>
Tube-SMC 兼具滑模的高确定性纳秒级计算耗时与 MPC 的严苛约束收缩特性(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mover accent="true"><mi mathvariant="script">X</mi><mo>ˉ</mo></mover><mo>=</mo><mi mathvariant="script">X</mi><mo>⊖</mo><mi mathvariant="script">Z</mi><mo separator="true">,</mo><mspace width="1em"/><mover accent="true"><mi mathvariant="script">U</mi><mo>ˉ</mo></mover><mo>=</mo><mi mathvariant="script">U</mi><mo>⊖</mo><mi mathvariant="bold-italic">K</mi><mi mathvariant="script">Z</mi></mrow><annotation encoding="application/x-tex">\bar{\mathcal{X}} = \mathcal{X} \ominus \mathcal{Z}, \quad \bar{\mathcal{U}} = \mathcal{U} \ominus \boldsymbol{K}\mathcal{Z}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8201em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8201em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathcal" style="margin-right:0.1464em;">X</span></span><span style="top:-3.2523em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1111em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathcal" style="margin-right:0.1464em;">X</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊖</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0145em;vertical-align:-0.1944em;"></span><span class="mord mathcal" style="margin-right:0.0794em;">Z</span><span class="mpunct">,</span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8201em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathcal" style="margin-right:0.0993em;">U</span></span><span style="top:-3.2523em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1667em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathcal" style="margin-right:0.0993em;">U</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊖</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6861em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0698em;">K</span></span></span><span class="mord mathcal" style="margin-right:0.0794em;">Z</span></span></span></span>),正在成为未来深空自主交会高算力受限平台的首选替代架构。
评注 6:强化学习与滑模控制 (RL-SMC) 的孪生演进:增益自适应与神经网络抖振消除
将强化学习的高维环境感知力,锚定在李雅普诺夫滑动流形的不变性安全底座之上
传统滑模控制的切换增益整定依赖于保守的解析最坏外扰上界,这导致执行机构常年承受不必要的过冲与微颤。近年来,<b>强化学习与滑模控制 (RL-SMC) 的孪生融合</b>成为了国际前沿研究热点:<br><br>
利用强化学习策略网络实时输出滑模变增益:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold-italic">K</mi><mtext>smc</mtext></msub><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>π</mi><mi mathvariant="bold-italic">ϕ</mi></msub><mo stretchy="false">(</mo><mi mathvariant="bold-italic">s</mi><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mover accent="true"><mi mathvariant="bold-italic">η</mi><mo>~</mo></mover><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\boldsymbol{K}_{\text{smc}}(t) = \pi_{\boldsymbol{\phi}}(\boldsymbol{s}(t), \tilde{\boldsymbol{\eta}}(t))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0698em;">K</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">smc</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord boldsymbol mtight">ϕ</span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">s</span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6813em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.037em;">η</span></span></span></span><span style="top:-3.3634em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">~</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1944em;"><span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">t</span><span class="mclose">))</span></span></span></span>。其核心优势在于奖励函数中显式惩罚力矩导数与控制抖振:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">L</mi><mo stretchy="false">(</mo><mi mathvariant="bold-italic">ϕ</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="double-struck">E</mi><mrow><mo fence="true">[</mo><mi mathvariant="normal">∥</mi><mi mathvariant="bold-italic">s</mi><msup><mi mathvariant="normal">∥</mi><mn>2</mn></msup><mo>+</mo><msub><mi>α</mi><mtext>fuel</mtext></msub><mi mathvariant="normal">∥</mi><mi mathvariant="bold-italic">u</mi><msup><mi mathvariant="normal">∥</mi><mn>2</mn></msup><mo>+</mo><msub><mi>β</mi><mtext>chatter</mtext></msub><mi mathvariant="normal">∥</mi><mover accent="true"><mi mathvariant="bold-italic">u</mi><mo>˙</mo></mover><msup><mi mathvariant="normal">∥</mi><mn>2</mn></msup><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">\mathcal{L}(\boldsymbol{\phi}) = \mathbb{E}\left[\|\boldsymbol{s}\|^2 + \alpha_{\text{fuel}}\|\boldsymbol{u}\|^2 + \beta_{\text{chatter}}\|\dot{\boldsymbol{u}}\|^2\right]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathcal">L</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">ϕ</span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mord mathbb">E</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">[</span></span><span class="mord">∥</span><span class="mord"><span class="mord"><span class="mord boldsymbol">s</span></span></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0037em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">fuel</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∥</span><span class="mord"><span class="mord"><span class="mord boldsymbol">u</span></span></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0528em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">chatter</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∥</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6813em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol">u</span></span></span></span><span style="top:-3.0134em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1389em;"><span class="mord">˙</span></span></span></span></span></span></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">]</span></span></span></span></span></span>。<br><br>
深度强化学习负责感知空间摄动的长期时变统计特征,在大扰动工况下自适应调高增益维持李雅普诺夫收敛,在平稳段迅速收敛增益至微小值消解抖振,而底层的滑模李雅普诺夫函数则构成了强化学习策略不可逾越的数学安全底座(Safe RL)。
评注 7:欠驱动与执行器故障极值边界:当故障数超出冗余度时的降维受限流形控制
从全驱动冗余容错,退化至非完整 Pfaffian 约束下的欠驱动李括号极限降级自保
在遭遇极端空间微流星撞击或推进总线物理破裂等灾难性事故时,可能出现多组推力器同时彻底失效,导致全系统广义控制输入矩阵发生降秩:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">rank</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi mathvariant="bold-italic">B</mi><mo stretchy="false">)</mo><mo>&lt;</mo><mn>6</mn></mrow><annotation encoding="application/x-tex">\operatorname{rank}(\boldsymbol{B}) &lt; 6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">rank</span></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span>。此时航天器跌入<b>欠驱动非完整系统 (Underactuated System)</b> 的至暗时刻。<br><br>
经典全驱动滑模面在欠驱动状态下会瞬间瓦解:在未驱动通道上产生无法消除的动力学残差 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi mathvariant="bold-italic">B</mi><mo>⊥</mo></msup><mover accent="true"><mover accent="true"><mi mathvariant="bold-italic">ξ</mi><mo>~</mo></mover><mo>˙</mo></mover><mo>=</mo><msup><mi mathvariant="bold-italic">B</mi><mo>⊥</mo></msup><mi mathvariant="bold-italic">H</mi></mrow><annotation encoding="application/x-tex">\boldsymbol{B}^\perp \dot{\tilde{\boldsymbol{\xi}}} = \boldsymbol{B}^\perp \boldsymbol{H}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3626em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9251em;"><span style="top:-3.139em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mrel mtight">⊥</span></span></span></span></span></span></span></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1682em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9313em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0302em;">ξ</span></span></span></span><span style="top:-3.6134em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">~</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1944em;"><span></span></span></span></span></span></span><span style="top:-3.5003em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1389em;"><span class="mord">˙</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1944em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9251em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0483em;">B</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9251em;"><span style="top:-3.139em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mrel mtight">⊥</span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0823em;">H</span></span></span></span></span></span>。<br><br>
此时的容错滑模控制必须发生相空间降维蜕变:基于 Brockett 必要条件与李括号(Lie Bracket)可控性代数展开,构造包含非完整 Pfaffian 约束的二阶滑模流形,放弃某些非核心自由度的一体化跟踪,转而实现主姿态轴受限指向与冲量维持的极限降级自保。
评注 8:从学术仿真到工程飞行软件:C/C++ 飞行控制软件架构与确定性执行保障
宇航级 MISRA-C 规范下的确定性微秒级中断循环:零动态内存、定点除法防溢出与静态数组预分配
将包含李群对数映射、二阶滑模与非线性分配的复杂算法转化为可在星载飞控微处理器上稳定服役数十年的航天飞行软件,必须跨越极其严苛的工程合规与确定性检验红线:<br><br>
1. <b>严格确定性执行时间</b>:控制中断服务程序执行时间必须有确定硬上限 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi>t</mi><mtext>interrupt</mtext></msub><mo>≤</mo><mn>10</mn><mtext> </mtext><mtext>ms</mtext></mrow><annotation encoding="application/x-tex">\Delta t_{\text{interrupt}} \le 10\,\text{ms}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3175em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">interrupt</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">ms</span></span></span></span></span>,杜绝任何递归、迭代不可收敛循环与无确定步数的矩阵奇异值分解(SVD);<br>
2. <b>零动态内存分配</b>:全套飞控 C 代码必须严格遵循 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>MISRA-C:2012</mtext><mi mathvariant="normal">/</mi><mtext>ECSS-E-ST-40C</mtext></mrow><annotation encoding="application/x-tex">\text{MISRA-C:2012} / \text{ECSS-E-ST-40C}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">MISRA-C:2012</span></span><span class="mord">/</span><span class="mord text"><span class="mord">ECSS-E-ST-40C</span></span></span></span></span> 宇航标准,严禁在中断循环中使用动态堆内存分配(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>Zero Dynamic Memory Allocation (No malloc)</mtext></mrow><annotation encoding="application/x-tex">\text{Zero Dynamic Memory Allocation (No malloc)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">Zero Dynamic Memory Allocation (No malloc)</span></span></span></span></span>),所有矩阵张量运算必须采用预分配静态双缓冲机制;<br>
3. <b>浮点异常硬件免疫</b>:严防反三角函数定义域越界(如 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">tr</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi mathvariant="bold-italic">R</mi><mo stretchy="false">)</mo><mo>&gt;</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">\operatorname{tr}(\boldsymbol{R}) &gt; 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">tr</span></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0042em;">R</span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 的浮点漂移)、被零除以及 NaN 污染,必须在所有几何除法分母添加极微弱正数防护盾 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>ϵ</mi><mtext>guard</mtext></msub><mo>=</mo><msup><mn>10</mn><mrow><mo>−</mo><mn>12</mn></mrow></msup></mrow><annotation encoding="application/x-tex">\epsilon_{\text{guard}} = 10^{-12}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">ϵ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">guard</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">12</span></span></span></span></span></span></span></span></span></span></span></span>。

八、完备可复现 Python 闭环仿真器

本节提供一个完整的工业级仿真脚本,涵盖了:

  1. 李群 空间六自由度相对动力学;
  2. 非奇异终端滑模控制器计算连续控制力矩;
  3. 8 推力器单向单极性非负推力分配器(带积极约束投影);
  4. 脉宽脉频调制器(PWPF)施密特触发离散点火开关仿真;
  5. 纯 NumPy 实现,零第三方库依赖。
#!/usr/bin/env python3
"""
se3_smc_pwpf_allocation_simulation.py
======================================
李群 SE(3) 上航天器姿轨一体化交会对接:滑模控制、单向非负推力分配
与脉宽脉频调制器 (PWPF) 二值点火闭环仿真 (纯 NumPy 零三方依赖实现)。
"""

import numpy as np

def skew(v: np.ndarray) -> np.ndarray:
    """生成 3 维反对称反对称矩阵算子"""
    return np.array([
        [0.0, -v[2], v[1]],
        [v[2], 0.0, -v[0]],
        [-v[1], v[0], 0.0]
    ])

def se3_logm(R: np.ndarray, p: np.ndarray) -> np.ndarray:
    """解析展开的 SE(3) 对数映射 logm: SE(3) -> se(3) -> R^6"""
    tr = np.clip(np.trace(R), -1.0, 3.0)
    theta = np.arccos(np.clip(0.5 * (tr - 1.0), -1.0, 1.0))
    if theta < 1e-7:
        Theta = 0.5 * np.array([R[2, 1] - R[1, 2], R[0, 2] - R[2, 0], R[1, 0] - R[0, 1]])
        beta = p.copy()
    else:
        Theta = (theta / (2.0 * np.sin(theta))) * np.array([
            R[2, 1] - R[1, 2],
            R[0, 2] - R[2, 0],
            R[1, 0] - R[0, 1]
        ])
        th_sq = theta ** 2
        S_inv = np.eye(3) + 0.5 * skew(Theta) + ((1.0 / th_sq) - (1.0 + np.cos(theta)) / (2.0 * theta * np.sin(theta))) * (skew(Theta) @ skew(Theta))
        beta = S_inv @ p
    return np.hstack((Theta, beta))

class PWPFModulator:
    """单通道脉宽脉频调制器 (PWPF) 离散二值开关模拟器"""

    def __init__(self, u_max: float = 10.0, U_on: float = 2.0, U_off: float = 0.8, Km: float = 4.5, Tm: float = 0.1):
        self.u_max = u_max
        self.U_on = U_on
        self.U_off = U_off
        self.Km = Km
        self.Tm = Tm
        self.uf = 0.0
        self.output = 0.0

    def step(self, uc: float, dt: float) -> float:
        """单步推进 PWPF 状态"""
        # 一阶滞后滤波环节
        err = uc - self.output
        duf = (-self.uf + self.Km * err) / self.Tm
        self.uf += duf * dt

        # 施密特触发器滞环判定
        if self.uf >= self.U_on:
            self.output = self.u_max
        elif self.uf <= self.U_off:
            self.output = 0.0
        return self.output

class ThrusterArrayAllocator:
    """8 组元冗余全驱动推力器单向非负分配器"""

    def __init__(self, u_max: float = 15.0):
        self.u_max = u_max
        self.num_thrusters = 8
        # 8 个推力器位置与方向配置矩阵 (6x8)
        # 前 4 个负责 X-Y 平动与偏航/俯仰,后 4 个负责 Z 平动与滚转
        self.B = np.array([
            [ 0.4, -0.4,  0.4, -0.4,  0.0,  0.0,  0.0,  0.0],
            [ 0.3,  0.3, -0.3, -0.3,  0.0,  0.0,  0.0,  0.0],
            [ 0.0,  0.0,  0.0,  0.0,  0.5, -0.5,  0.5, -0.5],
            [ 1.0,  1.0, -1.0, -1.0,  0.0,  0.0,  0.0,  0.0],
            [ 0.0,  0.0,  0.0,  0.0,  1.0,  1.0, -1.0, -1.0],
            [ 0.5, -0.5,  0.5, -0.5,  0.0,  0.0,  0.0,  0.0]
        ])
        # 伪逆分配矩阵初值
        self.B_pinv = np.linalg.pinv(self.B)

    def allocate(self, tau_desired: np.ndarray) -> np.ndarray:
        """带非负约束投影的推力分配解算"""
        # 初始伪逆初值
        u = self.B_pinv @ tau_desired
        # 迭代投影至非负空间 [0, u_max]
        for _ in range(5):
            u = np.clip(u, 0.0, self.u_max)
            err = tau_desired - self.B @ u
            u += self.B_pinv @ err
        return np.clip(u, 0.0, self.u_max)

class SpacecraftPhysicalLandingSimulator:
    """集成单向推力分配与 PWPF 脉冲点火的物理闭环仿真器"""

    def __init__(self):
        self.mass = 120.0
        self.J = np.diag([25.0, 22.0, 20.0])
        self.allocator = ThrusterArrayAllocator(u_max=15.0)
        self.pwpf_bank = [PWPFModulator(u_max=15.0) for _ in range(8)]

        # 控制增益
        self.k_smc = 1.2

    def run_simulation(self, t_final: float = 10.0, dt: float = 0.005):
        steps = int(t_final / dt)
        t_arr = np.linspace(0.0, t_final, steps)

        # 初始状态
        R = np.eye(3)
        p = np.array([4.0, -3.0, 2.0])
        omega = np.array([0.02, -0.01, 0.01])
        v = np.array([0.1, -0.1, 0.05])

        print(f"{'Time [s]':>8} | {'Pos Norm [m]':>14} | {'Active Thrusters':>18} | {'Actual Force X [N]':>20}")
        print("-" * 72)

        for step in range(steps):
            t = t_arr[step]
            eta = se3_logm(R, p)
            xi = np.hstack((omega, v))

            # 1. 计算名义滑模期望控制力矩
            s = xi + 0.5 * eta
            tau_nominal = -self.k_smc * s
            tau_nominal[:3] *= 20.0  # 力矩通道缩放
            tau_nominal[3:] *= 50.0  # 推力通道缩放

            # 2. 单向非负推力分配解算
            u_continuous = self.allocator.allocate(tau_nominal)

            # 3. PWPF 脉宽脉频离散二值脉冲调制
            u_pulses = np.array([self.pwpf_bank[i].step(u_continuous[i], dt) for i in range(8)])

            # 4. 计算推力器脉冲点火产生的真实力和力矩
            tau_actual = self.allocator.B @ u_pulses

            # 5. 欧拉推进真实物理动力学
            R_dot = R @ skew(omega)
            omega_dot = np.linalg.inv(self.J) @ (tau_actual[:3] - np.cross(omega, self.J @ omega))
            p_dot = R @ v
            v_dot = tau_actual[3:] / self.mass - np.cross(omega, v)

            R += R_dot * dt
            p += p_dot * dt
            omega += omega_dot * dt
            v += v_dot * dt

            # 保持旋转矩阵正交性
            u_svd, _, vh_svd = np.linalg.svd(R)
            R = u_svd @ vh_svd

            # 打印输出关键节点
            if step % int(1.5 / dt) == 0 or step == steps - 1:
                active_count = int(np.sum(u_pulses > 0.1))
                pos_norm = np.linalg.norm(p)
                print(f"{t:8.2f} | {pos_norm:14.4f} | {active_count:18d} | {tau_actual[3]:20.4f}")

if __name__ == "__main__":
    sim = SpacecraftPhysicalLandingSimulator()
    sim.run_simulation(t_final=8.0, dt=0.005)

九、四部曲全系列终局复盘与未来展望

至此,我们的 “SE(3) 航天器交会对接滑模控制四部曲” 正式圆满完结。让我们回顾这趟充满数学严谨性与工程敬畏感的理论征途:

┌────────────────────────────────────────────────────────────────────────────────┐
│              SE(3) 航天器交会对接滑模控制技术演进全景图 (Chu et al.)             │
└────────────────────────────────────────────────────────────────────────────────┘
  第一讲: 流形基石 (Foundations & Adaptive)
  ├── 坐标解耦: 摆脱对偶四元数歧义,构建 SE(3) 指数坐标统一运动学
  └── 参数自适应: 对称正定李代数投影消除未知转动惯量与质量失配
        │
        ▼
  第二讲: 观测重构 (Observer & Disturbance Reconstruction)
  ├── 扰动抵消: Moreno-Osorio 矩阵 Lyapunov 证明二阶 ESO 有限时间收敛
  ├── 安装偏差: 带有线性校正项的 SOSM-ESO 抵御推力器偏角与硬饱和
  └── 速度未测: 三阶连续 FTESO 齐次性收敛 + 超扭曲 (ST-NTSM) 绝对连续消抖
        │
        ▼
  第三讲: 收敛质跃 (Fixed-Time & Regressor-Free)
  ├── 时间解耦: 双幂次滑模将收敛时间绝对锁死在独立常数界 T_max 内
  ├── 动态切换: AMFixed 自适应符号降阶退化,缩短收敛时间 30% 以上
  ├── 代数革命: 双线性算子 h(a, b) 彻底斩断传统 6x10 复杂回归矩阵
  └── 多源容错: 模糊逻辑系统 (FLS) 闭环吸收飞轮与推力器部分失效故障
        │
        ▼
  第四讲: 物理落地 (Allocation, PWPF & Hybrid Control)
  ├── 单向分配: 二次规划 (QP) 破解推进器非负单侧单极性推力分配难题
  ├── 脉冲转译: PWPF 施密特触发器化连续力矩为高频毫秒级电磁阀点火脉冲
  ├── 安全屏障: 高阶控制屏障函数 (HOCBF) 为对接走廊构筑零碰撞正不变集
  └── 前沿演进: 管道滑模 (Tube-SMC) 与安全强化学习 (Safe RL-SMC) 时代曙光

从纯粹流形微分拓扑的严密证明,到抗辐射芯片上每一行定点浮点与电磁阀的毫秒级微调,航天控制理论的魅力始终绽放在“以数学之至美,驭空间之极险”的无尽探索之中!


参考文献

  1. Lang, X., & de Ruiter, A. (2021). Distributed optimal control allocation for 6-dof spacecraft with redundant thrusters. Aerospace Science and Technology, 111, 106532.
  2. Ames, A. D., Coogan, S., Egerstedt, M., Notomista, G., Sreenath, K., & Tabuada, P. (2019). Control barrier functions: Theory and applications. 18th European Control Conference (ECC), 3420-3431.
  3. Krovel, S. T. (2005). Pulse-width pulse-frequency modulator for spacecraft attitude control. Norwegian University of Science and Technology.
  4. Harkegard, O. (2002). Efficient active set algorithms for quadratic programming methods with applications to flight control allocation. Automatica, 38(7), 1161-1172.
  5. Mayne, D. Q., Seron, M. M., & Rakovic, S. V. (2005). Robust model predictive control of constrained linear systems with bounded disturbances. Automatica, 41(2), 219-224.
  6. Shtessel, Y., Edwards, C., Fridman, L., & Levant, A. (2014). Sliding mode control and observation. Birkhauser New York.
🌟 读者学术评价与反馈 • PEER REVIEW & RATING

为本文打星评价

如果您觉得本文公式推导严谨、复现内容有启发,欢迎为文章打分支持!

0.0
☆☆☆☆☆
0 人已评价
👈 点击星星即可完成打分(1~5星)