2. 湖北省智能地质装备工程技术研究中心, 武汉 430074;
3. 中国地质大学(武汉) 地质探测与评估教育部重点实验室, 武汉 430074
2. Hubei Intelligent Geological Equipment Engineering Technology Research Center, Wuhan 430074, China;
3. Key Laboratory of Geological Survey and Evaluation of Ministry of Education, China University of Geosciences, Wuhan 430074, China
航海模拟器对于船员航海培训具有一系列不可替代的优点, 尤其是危险海况下的船舶航行状况. 采用虚拟现实技术进行航海模拟可以提供高沉浸式的环境体验, 为使用者提供更加真实的操纵体验感的同时保证使用者的安全. 对于航海模拟器的研究成为研究热潮, 有关研究集中于船舶模拟器物理保真度和功能保真度[1], 对航海模拟器中的船舶运动进行可视化仿真可以提升船舶模拟器的物理保真度, 有利于增强操作人员的沉浸感. 虚拟现实技术搭建的船舶模拟器运用计算机图形学、流体力学和虚拟现实等关键技术构建了虚拟的海洋环境并对船舶的运营过程进行实时模拟[2], 在模拟过程中不仅需要对航行视景进行仿真, 同对船舶运动的仿真也是仿真工作的一大重点.
在有关虚拟现实环境下船舶运动可视化仿真方面的研究中, 在有关虚拟现实环境下船舶运动可视化仿真方面的研究中, 韦天任[3]、陆冬青等人[4]和白俊伟[5]通过数据与公式计算得出船舶位姿变化将船舶运动与波浪运动分离从而实现船舶运动仿真; 杨鹏等人[6]通过仿真软件进行运动仿真后将仿真数据导入到三维模型的运动控制中, 驱动三维模型实现运动显示; Chen等人[7]等通过对随机入射波的频率和振幅进行识别, 以计算作用于船舶的力, 能实现船浪耦合的运动, 但局限于规则波的模拟, 对于不规则波条件下的船舶运动模拟缺少考虑; 唐勇等人[8,9]、杨小龙等人[10]基于静水力学与水动力学计算船舶受力, 实现船舶与水面双向驱动的运动, 将复杂物体对水的双向耦合的过程简化为两个独立的单向耦合过程, 航行物理保真度上有所欠缺; Huang等人[11]将方向谱从时域和频域分解, 将计算得出的构成振荡运动的时域值进行叠加得到船舶的振荡数据, 以此模拟不同海况下的船舶实时动态响应但并未对船舶与水体的交互进行研究. 上述文章都构建了可视化的运动仿真系统, 并在系统中进行了船舶运动仿真的相关研究, 但大多将船舶运动与波浪运动视为独立的个体, 而忽略了船舶与水体的交互, 导致无法实现船舶对仿真波浪的实时响应, 在大海况条件下造成视景感受与运动感知的分离.
为弥补开发过程中船舶运动与波浪运动不匹配的问题, 本文提出了基于海浪谱的船浪实时运动可视化仿真, 从搭建海面环境生成开始, 简化复杂的船舶模型并对其受力进行分析计算, 实现对大规模水面大型船舶实时波浪驱动的视景仿真与运动状态模拟.
1 系统框架与功能 1.1 系统框架航海模拟器系统中的船浪实时交互运动仿真主要通过对船舶航行视景仿真, 以及对仿真波浪进行实时响应以构建船浪耦合的船浪交互运动仿真系统. 本文在使用海浪谱进行海面环境建模后, 通过海浪高度实时解算船舶位姿数据, 使船舶能够对海浪波动进行实时响应, 以此实现视觉感受与船舶运动二者的统一.
基于Unity3D的航海模拟系统的整体功能结构如图1所示.
1.2 系统功能
本系统的开发, 使用了Unity3D虚拟现实开发平台(版本为2022.3.1)进行环境搭建和运动仿真过程.
基于海浪谱的船浪实时运动可视化仿真系统主要包括以下几个模块.
(1)视景仿真模块: 船舶航海模拟器中对于视景仿真主要在于使用建模、渲染、贴图等方式对真实海洋环境的模拟与船舶模型的构建, 以此实现船舶航行模拟的沉浸式体验. 视景仿真模块的重点在于视觉感受的真实性, 传统船舶视景仿真对于水面的模拟主要通过贴图实现, 对于动态海面视景模拟有所欠缺. 图2为其他航海模拟器中的虚拟场景的示例.
(2)运动仿真模块: 在船舶运动仿真方面, 为实现船舶的运动仿真, 将船舶的运动拆解为两个方面, 除了船舶对于波浪的实时响应运动外, 还添加了发动机推动力以控制船舶运动与转向.
(3)交互模块: 交互模块按功能区分可以分为两个部分: 显示功能部分和控制功能两部分. 通过交互模块对仿真的环境数据, 例如风速、航速、天气状况等进行设定以对航行环境进行模拟. 信息显示模块则船舶的信息进行实时显示.
2 基于海浪谱的FFT快速海面建模波浪是引起船舶产生摇摆运动的主要原因, 对波浪进行模拟可以模拟出海浪、海流对船舶的影响, 提高航海模拟器视景仿真的可信度与真实感.
对海洋环境中船舶运动的模拟, 首先要进行海洋环境仿真模拟. 与SPH方法[12]和Perlin噪声[13]进行波浪仿真的方法相比, 在对大规模海面进行仿真的过程中使用基于海浪谱的快速傅里叶变换(FFT)进行仿真能够同时满足对于仿真过程中实时性与真实感的要求.
对海面波浪模拟采用Tessendorft[14]的有效方法, 使用到的海面统计模型的快速傅里叶变换表达公式如下所示:
$ h = (\vec x, t) = \sum {_k} \tilde h(\vec k, t){{\rm{e}}^{i\vec k \cdot x}} $ | (1) |
其中, 参数
为计算一段时间内整体海面高度, 首先要创建一个初始时刻海面高度场的傅里叶频谱, 使用了Phillips频谱函数:
$ {P_h}(\vec k) = A\frac{{{{\rm{e}}^{- 1}}{{(kL)}^2}}}{{{k^4}}}{\left| {\vec k \cdot \vec \omega } \right|^2} $ | (2) |
式(2)中的
$ \tilde h(\vec k, t) = \tilde h_0^{}(\vec k){{\rm{e}}^{i\omega (k)t}} + \tilde h_0^*(-\vec k){{\rm{e}}^{-i\omega (k)t}} $ | (3) |
其中,
$ {\tilde h_0}(\vec k) = \frac{1}{{\sqrt 2 }}({\xi _r} + i{\xi _i})\sqrt {{P_h}(\vec k)} $ | (4) |
将式(2)计算得出的波浪谱代入式(4), 计算得到波浪高度, 同时, 为使海面波浪的生成具有随机性, 引入了
在通过式(3)计算得到高度频谱后, 再使用水平偏移函数对水平方向上的偏移量进行计算, 由此得到偏移频谱. 水平偏移函数表达式如下:
$ D(\vec x, t) = \sum {_k} -i\frac{{\vec k}}{k}\tilde h(\vec k, t){{\rm{e}}^{i\vec k \cdot \vec x}} $ | (5) |
对计算得到的高度频谱和偏移频谱进行逆离散傅里叶变换, 可以求解水平以及竖直方向上的偏移图, 将水平和竖直方向上的偏移图组合得到偏移纹理图, 对偏移纹理图进行加工得到法线和泡沫纹理, 最后对海面进行渲染. 对整体海面模拟生成波浪的流程如图3所示, 具体步骤如下.
Step 1. 输入风速等数据与高斯随机数计算初始海面频谱.
Step 2. 由高度频谱计算得到偏移频谱.
Step 3. 对偏移频谱进行逆离散傅里叶变换得到偏移纹理图.
Step 4. 由得到的高度图及偏移图进行网格顶点偏移从而生成海面波形.
Step 5. 雅克比行列式计算法线与泡沫.
Step 6. 渲染及Lod平铺生成大规模海面.
根据文献[15]中的风速与海况分级表, 以海面风速为海况分级标准对仿真海况进行分级, 不同海况条件下生成的大规模海面效果如图4所示.
3 船舶运动可视化仿真
为了增强船舶航海模拟器模拟航行的真实感, 除构建航行环境进行视景仿真工作外, 还需要对船舶的运动进行仿真[16]以提升驾驶体验. 船舶对仿真波浪进行实时响应, 能够大大提升虚拟现实环境中船舶模拟器的真实感, 提升船舶仿真模拟体验.
3.1 船舶模型简化船舶与水面的交互检测通过生成网格碰撞体的方式来实现, 使用碰撞检测的方式计算整体船舶模型对海面运动的响应. 以某船舶为例进行仿真实验, 船舶的参数如表1所示.
为保证模拟器具有良好的视觉仿真效果, 船舶模型的建立需要使用大量面片以保证模型的精细程度, 但直接使用该模型对船舶受力计算, 会极大增加计算开销. 因此, 需要对船舶模型进行简化后进行船舶受力的计算. 使用船舶模型如图5所示.
对船舶与水面的交互过程进行分析, 可知船舶与水面交互的部分主要为船舱部分. 除船舱外, 其余部分对于整体船舶浮力计算的意义不大, 船舶模型简化的工作重点放在船舱模型简化. 船舱模型及简化碰撞体如图6所示.
通过对船舱模型进行减面计算, 船舱模型的面片数量从2324片减少到了110片, 船舱模型面片的减少, 极大地减少了仿真过程中的计算开销, 从而能够更好地满足仿真过程中对于实时性的要求.
3.2 船舶受力计算船舶在波浪中的受力主要分为4个方面: 静力, 主要分为重力与浮力; 流体动力, 由惯性力以及黏性力组成; 主动力, 指的是螺旋桨和舵提供的力, 也可以划入流体动力的范畴; 环境干扰力, 主要指外界环境对船舶运动的干扰力[17]. 可以通过表观重力和表观浮力法对波浪中的船舶受力进行简化, 通过变换把波面变换为静水面, 把静水面视为基准面, 将质点相对于静水面的运动作为受力研究对象.
为方便计算船体浸没在水中的体积, 使用三角形面片作为最小计算单元, 将整体船舶的受力分解为每一个面片上的受力, 将受力累加最终得出船舶的受力情况. 面片受力情况如图7所示.
首先计算静力中的浮力, 通过浮力公式计算出面片上的浮力大小. 单独面片的浮力计算式如下.
$ {F_{{\rm{bouy}}}} = \left\{ \begin{array}{*{20}{l}} {0,\begin{array}{*{20}{c}} {}&{}&{}&{}&{}&{}&{}&{}& {\xi (p) \leqslant {p_y}} \end{array}} \\ {S\rho g(\xi (p) - {p_y}){n_y}y,\begin{array}{*{20}{c}} {}&{\xi (p) \geqslant {p_y}} \end{array}} \end{array} \right.$ | (6) |
其中,
除浮力外, 船舶在运动过程中还会受到流体动力中拖拽力和升力两种由物体与水面之间的相对运动产生的动态力, 拖拽力是物体运动的阻力, 升力被定义为垂直作用于物体相对运动方向的力, 改变物体的运动方向, 在流体力学中升力及拖拽力计算公式如下所示.
$ {F_{{\rm{lift}}}} = \frac{1}{2}\rho {C_L}\left| {{A_{{\rm{eff}}}}} \right| \cdot \left| U \right| \cdot \left(U \times \frac{{(n \times U)}}{{\left| {n \times U} \right|}}\right) $ | (7) |
$ {A_{{\rm{eff}}}} = \left(\frac{{n \cdot U}}{{\left| U \right|}}\alpha + (1-\alpha )\right){S_{{\rm{face}}}} $ | (8) |
$ {F_{{\text{drag}}}} = - \frac{1}{2}\rho {C_D}\left| {{A_{{\rm{eff}}}}} \right| \cdot \left| U \right|U $ | (9) |
其中, CL为物体的升力系数, CD为物理的拖拽力系数二者与物体形状、运动矢量、流速高度相关, 为满足仿真实时性将二者简化为常量.
在连续时间内对波浪作用下的船舶运动进行仿真, 仿真硬件条件为Intel(R) Core(TM) i7-7700 CPU @ 3.60 GHz , 32 GB, 显卡为NVIDIA GeForce RTX 2070, 在此硬件条件下进行仿真, 得到的船浪交互效果如图8所示.
由图8可见在模拟的波浪环境下, 船舶运动能够与波浪起伏产生实时变化, 证明该仿真过程能够实现船舶对波浪进行耦合运动的可视化模拟.
为验证整体系统的实时性与画面流畅性, 对不同海况下的船舶运动渲染状态进行仿真实验, 在渲染统计窗口(rendering statistics window)对整体系统的运行帧率进行统计. 同时对仿真条件下的船舶横倾数据进行收集, 得到的不同海况条件下的执行效果如表2所示.
由表2的仿真实验结果可知在低海况条件下, 运动角度较小, 高海况条件下, 船舶运动幅度加大, 仿真结果与真实船舶运动状况相符.
4 真实感绘制与人机交互为保证整体航海模拟系统的完整性提升航海模拟器的保真度, 除了波浪模拟与运动仿真模块外, 还需要对场景的环境、交互细节及交互界面进行设计.
4.1 船行波模拟在船舶行驶过程中船与水面交互会产生船行波, 对船行波进行模拟能有效地增强虚拟现实仿真场景的真实感. 本文使用网格顶点偏移的方法进行船行波的模拟.
首先使用水波扩散公式计算位移, 通过标记交互物体位置与水面碰撞的位置, 使用波动公式计算碰撞产生的水波及其扩散, 对水面顶点位置进行采样后将计算出的高度进行顶点偏移的方法对船舶与水面交互产生的船行波进行模拟. 水波扩散计算公式为:
$ \frac{{\partial }^{2}{\textit{z}}}{\partial {t}^{2}}={c}^{2}\left(\frac{{\partial}^{2}{\textit{z}}}{\partial{x}^{2}}+\frac{{\partial}^{2}{\textit{z}}}{\partial{y}^{2}}\right)-\mu \frac{\partial {\textit{z}}}{\partial t} $ |
其中, z为顶点位移, x, y为水平方向的位移, 参数c为波速,
在水波扩散过程中, 波尖顶点产生位移出现波尖交叉重叠的现象, 在雅克比行列式的计算下, 对交叉重叠部分面积进行计算, 添加泡沫贴图模拟以达成模拟浪尖破碎生成白沫的效果. 船舶行驶生成的船行波如图9所示.
可见在仿真波浪环境下, 该方法能够对船舶行驶过程中产生的船行波效果进行较好模拟, 对船行波交互波纹扩散及浪尖泡沫破碎都有较好的模拟效果.
4.2 人机交互在实现系统功能的过程中, 除了实现上述功能外, 为了提升系统的美观性和功能布局的合理性, 对整体系统的界面布局进行了设计.
整体UI包括4个部分: 船舶位姿数据实时显示, 参数控制, 船舶类型选择及其信息显示, 天气系统控制, 多视角观察及主视角切换. 整体系统效果如图10所示.
基于Unity3D引擎自带的UGUI组件, 上述提到的系统显示和控制功能都将通过添加各类UGUI控件来实现.
(1)船舶运动状况实时显示, 对船舶坐标进行实时检测, 将检测到的船舶实时运动姿态数据绑定在UGUI的text组件后在数据显示窗口上进行显示.
(2)船舶类型选择及其信息显示, 通过Dropdown组件选择进行仿真的船舶模型, 同时将船舶的text数据与船舶模型进行绑定. 通过控制船舶模型的可用性, 对仿真使用的船舶信息进行显示.
(3)船舶的多视角观察窗功能与主、辅视角相互转换的功能, 主要通过切换多个相机与对应的RenderTexture完成. 不同视角下的观测体验各有优点, 第三视角观测船舶便于整体运动, 船上第一视角则更利于体验恶劣海况下的船舶运动. 视角的切换便于使用者出于不同目的更好的观察船舶在海洋中的运动状况.
(4)天气与时间系统, 不同天气环境的模拟, 对于驾驶员而言可以丰富模拟的环境, 增强对不同天气环境的应对能力, 是航海模拟器中的一项重要工作. 为了使整体的仿真场景具有更强的真实感, 本文在仿真系统中使用天空盒和粒子系统对航海模拟器中不同的天气环境进行模拟[18]. 通过Dropdown组件进行天气切换, 拖动Slider组件手动对模拟时间进行调整.
5 结论与展望本文利用虚拟现实技术构建了一套航海模拟器系统中的船浪实时交互运动仿真系统, 实现了基于海浪谱的航海视景仿真与运动模拟. 在传统航海模拟器的基础上实现了船舶对波浪的实时响应, 仿真效果较为真实, 视景感受良好, 同时仿真实时性较好. 对于恶劣海况下船舶航行模拟能够协助驾驶人员在安全的情况下进行模拟驾驶和训练, 节省成本同时保障安全.
[1] |
De Oliveira RP, Junior GC, Pereira B, et al. Systematic literature review on the fidelity of maritime simulator training. Education Sciences, 2022, 12(11): 817. DOI:10.3390/educsci12110817 |
[2] |
景乾峰, 神和龙, 尹勇. 一种基于虚拟现实系统的船舶数字孪生框架. 北京交通大学学报, 2020, 44(5): 117-124. DOI:10.11860/j.issn.1673-0291.20200076 |
[3] |
韦天任. 基于虚拟现实技术的船舶视景仿真系统研究与开发[硕士学位论文]. 大连: 大连海事大学, 2016.
|
[4] |
陆冬青, 邱云明, 辛金强. 基于Unity的船舶操纵运动仿真. 船舶工程, 2019, 41(S2): 19-22. |
[5] |
白俊伟. 基于虚拟现实技术的船舶横摇运动控制与仿真. 舰船科学技术, 2021, 43(14): 19-21. |
[6] |
杨鹏, 赵光辉, 笪睿, 等. 基于C#和Matlab的船舶运动仿真研究. 2019年数字化造船学术交流会议论文集. 无锡: 中国造船工程学会计算机应用学术委员会, 2019. 5.
|
[7] |
Chen X, Wang GM, Zhu Y, et al. Real-time simulation of ship motions in waves. In: Bebis G, ed. Advances in Visual Computing. Berlin, Heidelberg: Springer, 2012. 71–80.
|
[8] |
唐勇, 刘培艺, 李颖, 等. 大规模真实感固流交互实时绘制方法. 计算机辅助设计与图形学学报, 2020, 32(3): 378-384. |
[9] |
彭靖轩. 大规模水体与物体交互的实时模拟[硕士学位论文]. 秦皇岛: 燕山大学, 2014.
|
[10] |
杨小龙, 梁洪涛, 康凤举, 等. 大规模水体与物体实时交互可视化仿真(英文). 系统仿真学报, 2017, 29(10): 2423-2431. |
[11] |
Huang B, Zhao JW, Su YY, et al. Ship oscillation simulation system based on direction spectrum. Proceedings of the 2009 IEEE International Conference on Automation and Logistics. Shenyang: IEEE, 2009. 385–388.
|
[12] |
施鹏, 陈飞, 廖晋民. 基于SPH方法的流体粒子与软体碰撞检测. 计算机系统应用, 2020, 29(5): 214-219. DOI:15888/j.cnki.csa.007390 |
[13] |
张国栋, 王波, 朱长德, 等. 基于Perlin噪声的海浪三维仿真研究. 河南科技, 2022, 41(24): 11-17. |
[14] |
Tessendorf J. Simulating ocean water. Proceeding of the 2001 ACM SIGGRAPH. New York: ACM Press, 2001. 348–367.
|
[15] |
马令琪, 杨家轩, 简俊. 恶劣天气和恶劣海况的学术含义分析. 中国航海, 2021, 44(1): 14-20, 26. |
[16] |
Wang L, Han S. Visual simulation of a capsizing ship in stormy weather condition. The Visual Computer, 2019, 35(12): 1855-1868. DOI:10.1007/s00371-018-1579-6 |
[17] |
王怀兵, 徐新, 陈姚节. 基于粒子系统的船行波三维仿真. 计算机技术与发展, 2021, 31(8): 134-138. |
[18] |
Yin JG, Ren HX, Zhou Y. The whole ship simulation training platform based on virtual reality. IEEE Open Journal of Intelligent Transportation Systems, 2021, 2: 207-215. DOI:10.1109/OJITS.2021.3098932 |