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。变化率约束把当前时刻的可行域与上一时刻的状态耦合起来,是推力分配从"静态优化"变为"动态优化"的关键,也是实际调试中最容易被忽略、却最常导致分配结果抖动或超调的一项。
约束可行性判断
把等式约束与不等式约束放在一起,推力分配问题就是一个带约束的优化问题:在不等式围成的可行域内,寻找使目标函数(如总功率最小、推力变化最小)最优、同时满足等式平衡的解。可行性判断要依次回答三个问题。
第一,等式本身是否有解。若推进器数量与布置使得配置矩阵 B 的秩小于 3,则某些方向的合力无法合成,此时无论怎么分配都无解。第二,即便等式有解,解是否落在不等式域内。例如某船在强横风下需要 60% 额定横推力,但侧推最大只能出 50%,则幅值约束被突破,问题不可行。第三,变化率是否可达。即使稳态解存在,若从当前状态到目标状态所需的角度变化超过单周期允许值,本周期内也不可行,需要多周期过渡。
实际工程中,可行性判断不必等到优化求解失败才发现。可以在求解前做一次快速预判:把期望 τ 投影到"当前角度下各推进器满推力所能合成的推力集合"上,若投影误差超过阈值,就提前判定不可行并触发松弛,避免优化器反复迭代无果。
松弛策略
不可行并不意味着系统只能停机。合理的松弛策略按"对船舶操控影响最小"的顺序逐级放宽。第一级是放宽变化率约束:在短时(如 1~2 个控制周期)内允许推进器以略高于额定变化率的速度动作,换取本周期可行,随后再回到正常速率。第二级是放宽幅值上限:对非关键推进器做短时降额使用,或允许其短时超载至某一保护阈值,但必须配合热保护计时。第三级才是修正 τ 指令本身,即承认当前推进能力不足,按比例缩减期望合力与力矩,进入降级运行,并向操作员告警。
松弛的关键在于"带惩罚、可恢复、有记录"。松弛量应作为惩罚项加入目标函数,使优化器在可行时绝不主动松弛;松弛状态应设置恢复条件,一旦约束重新可行就退出松弛;每次松弛都应记录时间、类型与幅值,供事后分析与报警管理使用。下面给出一个可直接参考的松弛优先级配置示例(参数为教学示例,需按实际船型标定):
| 优先级 | 松弛对象 | 示例允许量 | 持续时间 | 恢复条件 |
|---|---|---|---|---|
| 1 | 角度变化率 | 额定的 1.5 倍 | ≤ 2 个控制周期 | 角度误差回到正常带内 |
| 2 | 推力变化率 | 额定的 1.3 倍 | ≤ 3 个控制周期 | 推力跟踪误差小于 5% |
| 3 | 推力幅值上限 | 短时 105% 额定 | ≤ 30 s,带热计时 | 热模型温度回落 |
| 4 | τ 指令降额 | 按能力比例缩减 | 直至能力恢复 | 预判投影误差回到阈值内 |
总结来看,等式约束定义了"必须达到什么",不等式约束定义了"最多能做到什么",可行性判断回答"当前能不能做到",松弛策略则回答"做不到时如何安全地退而求其次"。四者共同构成推力分配约束处理的完整闭环,也是后续优化求解器设计的输入前提。