ARTICLE · 1267990
yxShip6DOF:框架铺好地基,插件只填“水动力”
船在水里开,不是“点一下就走”那么简单:它前后左右上下都能动,还会左右倾、前后倾、原地打转。这些运动合起来叫六自由度。在 yxAFSim 里,mover 是挂在平台上的组件,负责推进平台的位置、姿态、速度——框架把组件生命周期、导航命令、类型表、环境门面全铺好了,yxShip6DOF 只需把“水动力”这块物理填进去。
一、六自由度:船到底怎么动
船的运动拆成六个自由度——三个平移(纵荡 surge 前后、横荡 sway 左右、垂荡 heave 上下)+ 三个转动(横摇 roll 左右倾、纵摇 pitch 前后倾、艏摇 yaw 转向)。为什么要拆开?因为操纵一艘船,本质就是同时控制这六个量的演化:舵管艏摇,螺旋桨管纵荡,浮力/重力管垂荡与横纵摇。

图 1 · 船舶六自由度:三个平移 + 三个转动(SNAME 符号 u/v/w/p/q/r)。
二、框架给了什么,插件只补什么
yxShip6DOF 继承 WsfMover 基类。下面这张表是框架“白送”的能力,插件一行都不用重写:
框架提供的能力 | 具体是什么 |
mover 组件骨架 + 生命周期 | Initialize/Update/TurnOn/TurnOff/PartBroken/Restore 全由框架调度 |
统一导航命令接口 | GoToSpeed / TurnToHeading / SetRoute / GoToLocation / FlyHeadingSpeedAltitude 等几十个导航方法 |
空间域声明 | 船声明 SURFACE,框架据此做地球模型、地形、区域与交互判定 |
脚本类型系统 + 类型表 | PluginRegistration 里 AddCoreType 注册,想定里写 mover <名> YX_SHIP_6DOF_MOVER 即用 |
序列化 | toJson/fromJson,用于运行时状态同步与分布式推演 |
地形影响速度 | GeographyType(GT_SURFACE),框架按地形类型/坡度系数折算实际速度 |
自然环境门面 | yxNaturalEnvironment 统一提供洋流/风/温盐/海况 |
三、怎么用:一段完整的水动力配置
插件真正要写的只有两件事:覆写 TurnToHeading / GoToSpeed 两个导航接口,以及填一张水动力系数表。系数表直接在 mover 块里配,换一型船 = 换一张表,不改代码:
mover ship1 YX_SHIP_6DOF_MOVER
mass 8000000.0 # 质量 kg
inertia 1.0e9 1.0e10 1.0e10 # Ixx Iyy Izz kg·m²
displacement 7800.0 # 排水体积 m³(→浮力 B=ρg∇)
waterplane_area 2500.0 # 水线面面积 m²(垂荡恢复弹簧)
metacentric_height 1.2 120.0 # 横稳心高 / 纵稳心高 m(稳性)
max_thrust 2000000.0 # 最大推力 N
linear_damping 1.0e4 1.0e5 2.0e5 1.0e7 1.0e8 1.0e8 # 对角线性阻尼
quadratic_damping 5.0e3 5.0e4 1.0e5 1.0e6 1.0e7 1.0e7 # 对角二次阻尼
added_mass <36 个值,6×6 行主序> # 附加质量 M_A
rudder 30.0 40.0 1.0 # 舵面积 m² / 力臂 m / 有效性
wind_area 1200.0 # 水线以上受风面积 m²
throttle 0.5 # 初始油门 0-1
reference_speed 15.0 # 参考速度 m/s(满油门对应速度)
heading_hold_gain 2.0 # 航向保持 P
heading_hold_damping 1.0 # 航向保持 D
heading_hold_integral 0.1 # 航向保持 I
end_mover
四、插件补的物理内核:Fossen 六自由度
物理内核是海洋工程标准形式(SNAME 1950 / Fossen):
(M_RB + M_A)·ν̇ + C_RB(ν)·ν + C_A(ν)·ν + D(ν)·ν + g(η) = τ
附加质量 M_A——船一动,拖着一团水
船加速或减速时,会带动周围一大团水跟着动,这团水的惯性等效成“额外质量”,让船显得更“重”、更难加减速、更难转向。这是水面/水下航行器与飞机最本质的差别之一——空气稀薄,飞机几乎不用考虑它。
阻尼 D(ν)——水吃掉你的能量
水是黏的,还会被兴波带走能量。模型用线性 + 二次阻尼叠加(D_lin·ν + D_quad·ν|ν|)刻画:低速近似线性,高速下湍流/兴波让阻力按速度平方涨。真实世界里横摇阻尼还高度非线性,工程上常折成等效线性系数。
恢复力 g(η)——浮力把船“扶正”
浮力 B = ρ·g·排水体积,与重力 W 的差产生垂荡;横稳心高 GMt、纵稳心高 GMl 决定船倾斜后“回正”的刚度(稳性);水面船还多一个水线面面积带来的垂荡恢复弹簧——船沉一点,排水多一点,就被顶回来。这正是“船为什么不会翻、为什么能在浪里稳住”的物理来源。
五、逐帧计算流程:一帧里发生了什么
每个仿真步,Update 都走一遍下面的流程:
① 查环境:从 yxNaturalEnvironment 门面取洋流、风、水温/盐度(算密度)、海况,注入物理实例;② 算力 F:螺旋桨推力 + 舵力矩 − 线性/二次阻尼 − 浮力/重力恢复 − 科氏/向心 + 风载荷 − 波浪阻力;③ 解加速度 ν̇ = (M_RB+M_A)⁻¹·F,一阶欧拉积分出新速度;④ 体轴速度经 J(η) 旋转成 NED 速度,再叠加上洋流漂移(对地速度 = 对水速度 + 洋流);⑤ 积分位置/姿态;⑥ 写回平台 SetLocationLLA / SetOrientationNED / SetVelocityNED。
六、自然环境数据怎么参与
自然环境量 | 进入船舶模型的哪个环节 |
洋流 eCurrent(矢量) | 对地漂移:对地速度 = 对水速度 + 洋流 |
风 eWind(矢量) | 上层建筑风载荷(按受风面积产生纵荡/横荡力) |
水温 + 盐度 | 算海水密度ρ = 1025 − 0.15(T−10) + 0.78(S−35) → 浮力/阻力 |
海况 | 波浪附加阻力(海况越高阻力越大) |

图 2 · 美国海军阿利·伯克级驱逐舰(USS Jason Dunham DDG-109)。来源:美国海军 / DVIDS(公有领域)。
七、结语
船舶操纵性研究的是“船能否按驾驶者意图保持或改变运动状态”,而它的全部答案都藏在这张水动力系数表里——附加质量、阻尼、浮力、稳心、舵、螺旋桨。把船接进 yxAFSim,真正的工作量不在“怎么让船动”,而在“水动力系数对不对”,以及把这些系数和洋流、风、温盐、海况一起交给框架去算。















































































