海洋石油支持船动力定位模块推力分配策略

2022-09-04 03:07林文锦张亚东安志辰
关键词:推进器模拟器力矩

林文锦,张亚东,安志辰

(1.中海油服船舶事业部,天津 300452;2.中海油服船舶事业部船舶技术所,天津 300452;3中海油服船舶事业部船员培训中心,天津 300452)

0 引言

我国在海洋资源开发领域越来越多地采用具有动力定位(dynamic positioning,DP)系统的船舶[1-5],包括科学考察船、海监船、起重铺管船、海洋钻井平台、起重打捞船、半潜船、救生船、平台供应船、布缆船、航标船、水合物调查船、多功能海工船等。相较于传统定位系统,动力定位系统能够更好地满足深海浮式结构位姿保持以及航迹跟踪等作业要求。积极开展船舶动力定位技术相关研究,对推动我国海洋经济的发展具有重大的现实与战略意义。

推力分配在动力定位过程中发挥着至关重要的作用,它是连接控制系统和推进系统的纽带,直接决定了船舶上各个推进器将要产生的推力大小和方向。推力分配方法有许多,如:基于广义逆的推力分配方法[2,6];采用序列二次规划算法实现推力分配策略[4];基于零空间法的推力分配策略[6];基于组合偏置方法的推力分配策略[7];基于遗传算法的推力分配方法[8]和基于粒子群算法的推力分配策略[9]等。上述推力分配方法中文献[8-9]是基于群体智能的方法,由于结果具有一定的随机性,因此不便于工程应用。文献[4,7-12]涉及序列二次规划、零空间法和组合偏置方法,计算较为复杂。本文的研究重点在于实现动力定位模块中的推力分配子功能,希望选取一种简单高效的实现方法,因此,本文选取广义逆方法作为推力分配方法。

动力定位模拟器子功能模块设计与集成,已有多位学者对此展开研究并取得了一定的成果。文献[6]以Visual Studio 2010 为开发平台,使用 Direct2D 图形技术,对 Kongsberg 公司的 K-Pos 动力定位系统的自动定位功能进行仿真;文献[10]采用C#中WPF技术完成DP推力分配仿真子系统的设计与实现;文献[11]采用VB与MATLAB混合编程方式进行动力定位模拟器仿真界面的搭建。

上述研究成果往往依赖特定的软件函数库或直接将算法写在后台程序之中,这对功能模块代码拓展性及复用性会产生一定影响。因此,本文依托动态链接库技术,通过Matlab仿真+代码转化,配合QT界面设计,完成推力分配子功能模块的集成。

1 动力定位模块的组成及原理

船舶动力定位是指船舶利用自身的推力装置产生推力和推力矩,抵消外界风、流、浪等作用在船体上的力和力矩,使该船舶维持在某给定的期望位姿。动力定位系统主要由测量系统、控制系统、推进系统和动力系统等部分组成,主要工作是测量系统实时获得船舶的实际位置和艏向,并将信息反馈给控制系统,控制系统计算得到偏差量,结合风、浪、流等外界环境干扰,实时计算出驱动船舶移动到期望位姿所需的力和力矩,而后推进系统通过推力分配策略将所需的力和力矩分配到船舶上的各个推进器,并控制推进器产生相应的推力,从而完成船舶的控制要求[1]。工作原理图如图1所示。

从图1可以看到,动力定位模块包括动力定位相关的高层控制策略、推力分配策略、底层推进器控制策略、信号处理等关键技术,本文主要针对其中的推力分配策略进行研究。

2 推力分配方法

推力分配算法是动力定位推进系统的核心,动力定位船舶的数学模型由船舶运动学模型和船舶动力学模型共同组成。对于动力定位船舶而言,由于船速较小,在建立船舶运动方程的时候,通常情况下只考虑其中的3个自由度,即,纵荡、横荡和艏摇,它们随船坐标系和固定坐标系的速度转换公式为:

η=R(ψ)v。

(1)

式中:η=[x,y,ψ]T是船舶位置矢量,x,y,ψ分别为船舶在固定坐标系下的位置和艏向角;R为坐标转换矩阵;v=[u,v,r]T是船舶速度矢量,u,v,r分别代表随船坐标系下的船舶纵荡、横荡和艏摇速度。

在随船坐标系下,水面上的动力定位船舶三自由度(纵荡、横荡和艏摇)动力学方程为:

Mv+Dv=τ+RT(ψ)e

(2)

式中:M和D分别表示附加质量的惯性矩阵和阻尼矩阵;τ=[τx,τy,τψ]是控制输入量;偏差e表示未建模的环境力和力矩。

动力定位控制器通过状态反馈η和υ计算船舶所需的三个自由度推力τc,推力分配单元负责将τc转化为各个推进器的控制输入α和u,满足如下条件[2]:

τc=T(α)f,f=Ku。

(3)

式中:f表示推进器的推力;T(α)为推进器布置矩阵;K为推力系数。

作为推力分配的等式约束,通常将推力分配问题转化为如下非线性最优化问题。

(4)

其中:W为正定对角阵,表示各推力的权值系数。

从式(4)可以看出,优化目标为求推力f最小值,约束条件为合力满足要求。

为了避免复杂的非线性,引入扩展推力向量的概念,对于水面船舶的全方位推进器,其推力可分解为船体坐标系下X方向和Y方向的两个分力,序号为i的全方位推进器的扩展推力向量可表示为:

(5)

此时,式(3)可线性表示为:τe=Tefe,f=Ku。

其中:Te为推进器布置矩阵误差。此时,推力分配也由非线性优化问题转化为带有线性等式约束的二次最小化问题

(6)

从式(6)中可以看出,此时优化目标为求推力fe最小,约束条件同样为此时总的合力。应用拉格朗日乘数法可以得到最小化问题的广义逆解为

在选定船舶类型之后,通过建立船舶的数学模型,设计高层控制策略,获得船舶运动需要的合力和合力矩,发送给推力分配策略,按照上述流程完成推力分配过程。

3 推力分配功能实现及仿真结果

本文将Matlab模块仿真与代码转化相结合,实现软件系统功能。Matlab提供Matlab Coder命令允许用户将特定功能函数文件转化为C/C++代码形式文件。该命令仅针对函数文件,将伪逆法命名为www.m,并用于代码生成。利用该函数的测试代码文件自动获取该函数形参数据类型,排查文件中语法及链接错误,编译通过后会生成该函数.h文件及.cpp文件,形成转化结果报告,如图2所示。通过动态链接库技术将该函数进行封装,并用于软件功能模块设计。

本项目以Visual Studio 2015为开发平台,通过Matlab代码转化实现数据处理与计算,并利用C++应用程序开发框架QT设计仿真界面。引入QML做界面设计,界面显示和代码将更好的得到分离,通过编写后台代码的方式使控件响应不同功能。

完成上述步骤之后,需要将推力分配功能集成。首先根据特定船舶推进器配置及定位需求在Matlab环境中完成动力定位船舶推力分配策略的仿真计算,并将用于计算的分配策略以函数.m文件形式留存;然后利用Matlab Coder工具箱将推力分配策略函数.m文件转化为.h以及.cpp文件,并通过动态链接库技术,设置相应API(Application Programming Interface,应用程序编程接口),将程序执行.cpp文件编译生成二进制文件.dll。在QT界面设计语言中,导入相应的头文件及dll,动态加载函数库,调用预先设定的API函数,通过计算得到推力分配结果数据,并在界面上进行显示,实现数据交互。推力分配功能模块集成过程大体如图3所示。

本文以中海油拥有数量最多的海洋石油641型船为对象进行推力分配可视化研究,其推进器布置如图4所示。其中:X、Y分别代表船舶纵轴与横轴方向;#1、#2为全回转推进器;#3、#4为槽道式推进器,4个推进器布置位置和推力限制如表1所示。

表1 推进器配置参数

需要说明的是,动力定位操作员设置船舶的期望位置,船舶所需的力和力矩基于公式(2)和所设计的控制策略算出,之后发送给推力模块进行推力分配。现有文献大多将控制器计算得出的力和力矩以时序展现,推力分配结果也按照时序展现,如文献[12-13]。然而,在实际的动力定位模拟器中,控制器所计算得出的力和力矩是隐含在软件中的,推力分配结果也是显示某一时刻的,因此,本文的结果以图5和图6体现。

图5是动力定位模块操纵软件实现某定位功能时的运行效果图,包括船舶速度变化、艏向显示以及能源消耗等结果显示。

推力分配结果如图6所示。图6左下角为某时刻的推力分配结果展示,左上角为推进器的推力与最大推力之比,以百分比形式呈现,右上角和右下角均为风速风向信息。通过可视化结果可以看到,本文提出的功能实现方案具有可视化界面友好,且算法易于修改的特点,所设计的推力分配功能能够将推力和转矩分配到各个推进器,该功能能够服务于动力定位模块,最终实现航海模拟器的升级。

4 结语

开发动力定位模块需要多类功能子模块相互配合,每个功能子模块的开发均需进行仿真验证,从而确保可行性。本文依托动态链接库技术,采用Matlab仿真代码转化,实现数据处理与计算,并通过QT完成界面设计,完成动力定位推力分配功能子模块开发。在动力定位模块完成定位作业模拟时,对控制力向量进行实时推力分配计算,并做界面显示,同时作为子功能模块集成于现有的航海模拟器之中进行功能测试。

通过仿真的数据及集成效果展示,在完成定位作业模拟过程中,本文使用的推力分配算法可以有效地实现控制力向量的分解,同时该模块在整个船舶动力定位模拟器中能完成预设的功能而对现有航海模拟器不会产生不良影响。本文提出的推力分配方法,有助于推进DP模拟器研究,提高DP模拟器运行的稳定性。

猜你喜欢
推进器模拟器力矩
驾驶模拟器转向系统的设计与研究
星载转台活动电缆扭转阻力矩测试与分析
基于地铁车辆装配带力矩螺栓紧固的工艺优化分析
盲盒模拟器
基于CFD扇翼推进器敞水性能预报分析
什么?火箭也搞“可回收”
发挥考核“指挥棒”“推进器”作用
中国首个自主研发的地球模拟器投入使用
三排式吻合器中的双吻合钉推进器对
发动机阻力矩计算和起动机介绍