4. 推力分配中的约束处理

推力分配的本质,是在满足船舶运动需求的前提下,把总推力指令合理地分摊到各个推进器上。这个"分摊"过程并不是无拘无束的优化,而是被一组约束条件牢牢框住的。理解这些约束的数学表达,是设计推力分配控制器的第一步。本节先说明坐标系与符号约定,再分别展开等式约束与不等式约束,最后讨论约束可行性判断与松弛策略。

坐标系与符号约定

全文采用船体坐标系:原点取在船舶重心,x 轴指向船首为正,y 轴指向左舷为正,绕 z 轴逆时针(即首向左偏)的转艏力矩为正。设船舶配备 n 个推进器,第 i 个推进器的推力幅值为 T_i,推力方向角为 α_i(相对 x 轴,逆时针为正)。定义推力分配向量 u = [T_1, α_1, T_2, α_2, …, T_n, α_n]^T。控制器期望的总纵荡力、横荡力、转艏力矩记为 τ = [τ_x, τ_y, τ_N]^T。

等式约束:合力与力矩平衡

等式约束表达的是"分配结果必须恰好合成期望的总推力与总力矩"。对每个推进器,其推力在船体坐标下的分量为 T_i·cosα_i(纵向)与 T_i·sinα_i(横向)。设第 i 个推进器安装位置为 (x_i, y_i),则它对转艏力矩的贡献为 x_i·T_i·sinα_i − y_i·T_i·cosα_i。于是等式约束可写成:

Σ T_i·cosα_i            = τ_x
Σ T_i·sinα_i            = τ_y
Σ (x_i·T_i·sinα_i − y_i·T_i·cosα_i) = τ_N

写成矩阵形式即 B(α)·T = τ,其中 B(α) 是随角度变化的推力配置矩阵,T 为各推进器推力幅值组成的向量。这里有一个关键点:B 依赖 α,而 α 本身也是待求变量,因此等式约束对全回转推进器而言是非线性的。工程上常采用两种处理:一是把角度作为外层变量、推力作为内层线性变量,交替求解;二是对角度做小步线性化,在当前角度附近用雅可比矩阵近似。无论哪种方式,等式约束的物理含义不变——合力与合力矩必须平衡。

需要强调的是,等式约束通常不是"越多越好"。三个方程对应三个自由度,若推进器数量 n 大于 3,则方程数少于未知数,存在无穷多组解,这正是优化算法可以发挥作用的冗余空间;若 n 小于 3 或推进器布置退化,则可能无解,这属于下一节要讨论的可行性问题。

不等式约束:幅值、角度与变化率

不等式约束刻画的是"物理上允许做到什么"。它主要分三类。

推力幅值约束。每个推进器都有额定推力上限,部分推进器(如可反转的舵桨)还有反向推力上限,且正反向上限可能不对称:T_i,min ≤ T_i ≤ T_i,max。对于只能单向出力的推进器,T_i,min = 0。此外,某些推进器在特定方向上出力会受伴流、遮蔽影响,工程上可对有效推力再乘一个方向相关的折减系数。

角度范围约束。全回转推进器的回转角通常受机械限位或电缆扭转限制,例如 α_i,min ≤ α_i ≤ α_i,max。若推进器允许 360° 全回转,则角度约束退化为周期性约束,此时应避免在 ±180° 附近做数值插值,否则会出现"绕远路"的角度跳变。固定推进器(如侧推)的角度则视为常数,不参与优化。

变化率约束。推进器不能瞬间改变推力或角度,否则会造成机械冲击和功率冲击。设控制周期为 Δt,则 |T_i(k) − T_i(k−1)| ≤ ΔT_i,max,|α_i(k) − α_i(k−1)| ≤ Δα_i,max。变化率约束把当前时刻的可行域与上一时刻的状态耦合起来,是推力分配从"静态优化"变为"动态优化"的关键,也是实际调试中最容易被忽略、却最常导致分配结果抖动或超调的一项。

推力分配约束体系与可行性判断 等式约束(必须精确满足) Σ Tᵢcosαᵢ = τx Σ Tᵢsinαᵢ = τy Σ(xᵢTᵢsinαᵢ − yᵢTᵢcosαᵢ) = τN 矩阵形式:B(α)·T = τ 角度相关 → 非线性耦合 不等式约束(可行域边界) 幅值:Tᵢ,min ≤ Tᵢ ≤ Tᵢ,max 角度:αᵢ,min ≤ αᵢ ≤ αᵢ,max 变化率:|Tᵢ(k)−Tᵢ(k−1)| ≤ ΔTᵢ,max     |αᵢ(k)−αᵢ(k−1)| ≤ Δαᵢ,max 变化率约束耦合上一时刻状态 可行性判断 ① 等式是否有解? ② 解是否落在不等式域内? ③ 变化率是否可达? 三者同时成立 → 可行 不可行 → 松弛策略 · 优先放宽变化率(短时) · 其次放宽幅值上限(降额) · 最后修正 τ 指令(降级) 可行 → 进入优化求解 · 最小化推力/功率消耗 · 抑制角度频繁摆动 · 输出 Tᵢ、αᵢ 至推进器 否 是 松弛的工程原则: 松弛量应带惩罚权重,避免"习惯性松弛";松弛后必须记录并告警, 让操作员知道当前推力分配已偏离精确平衡,进入降级运行状态。

约束可行性判断

把等式约束与不等式约束放在一起,推力分配问题就是一个带约束的优化问题:在不等式围成的可行域内,寻找使目标函数(如总功率最小、推力变化最小)最优、同时满足等式平衡的解。可行性判断要依次回答三个问题。

第一,等式本身是否有解。若推进器数量与布置使得配置矩阵 B 的秩小于 3,则某些方向的合力无法合成,此时无论怎么分配都无解。第二,即便等式有解,解是否落在不等式域内。例如某船在强横风下需要 60% 额定横推力,但侧推最大只能出 50%,则幅值约束被突破,问题不可行。第三,变化率是否可达。即使稳态解存在,若从当前状态到目标状态所需的角度变化超过单周期允许值,本周期内也不可行,需要多周期过渡。

实际工程中,可行性判断不必等到优化求解失败才发现。可以在求解前做一次快速预判:把期望 τ 投影到"当前角度下各推进器满推力所能合成的推力集合"上,若投影误差超过阈值,就提前判定不可行并触发松弛,避免优化器反复迭代无果。

松弛策略

不可行并不意味着系统只能停机。合理的松弛策略按"对船舶操控影响最小"的顺序逐级放宽。第一级是放宽变化率约束:在短时(如 1~2 个控制周期)内允许推进器以略高于额定变化率的速度动作,换取本周期可行,随后再回到正常速率。第二级是放宽幅值上限:对非关键推进器做短时降额使用,或允许其短时超载至某一保护阈值,但必须配合热保护计时。第三级才是修正 τ 指令本身,即承认当前推进能力不足,按比例缩减期望合力与力矩,进入降级运行,并向操作员告警。

松弛的关键在于"带惩罚、可恢复、有记录"。松弛量应作为惩罚项加入目标函数,使优化器在可行时绝不主动松弛;松弛状态应设置恢复条件,一旦约束重新可行就退出松弛;每次松弛都应记录时间、类型与幅值,供事后分析与报警管理使用。下面给出一个可直接参考的松弛优先级配置示例(参数为教学示例,需按实际船型标定):

优先级松弛对象示例允许量持续时间恢复条件
1角度变化率额定的 1.5 倍≤ 2 个控制周期角度误差回到正常带内
2推力变化率额定的 1.3 倍≤ 3 个控制周期推力跟踪误差小于 5%
3推力幅值上限短时 105% 额定≤ 30 s,带热计时热模型温度回落
4τ 指令降额按能力比例缩减直至能力恢复预判投影误差回到阈值内
调试建议:先单独验证等式约束的合成精度(给定一组 T、α,正算 B·T 是否等于 τ),再逐项加入不等式约束观察可行域收缩,最后才引入变化率约束。这样能把"分配结果不对"定位到具体是哪一类约束在起作用。

总结来看,等式约束定义了"必须达到什么",不等式约束定义了"最多能做到什么",可行性判断回答"当前能不能做到",松弛策略则回答"做不到时如何安全地退而求其次"。四者共同构成推力分配约束处理的完整闭环,也是后续优化求解器设计的输入前提。