2. ROV六自由度运动定义与坐标系

要精确描述一台ROV在水下的运动,必须先回答两个问题:相对于谁描述,以及沿哪个方向描述。前者是坐标系问题,后者是自由度问题。这两件事定不清楚,后续的推进器布局、控制分配、姿态解算都会失去统一的参照,操作员口中的“向前”和控制器里的“向前”就可能不是同一个方向。

一、两套坐标系:大地坐标系与机体坐标系

大地坐标系(也称惯性坐标系、世界坐标系)固定于水面或海底,不随ROV运动。工程上常采用北-东-地(NED)约定:X轴指向正北,Y轴指向正东,Z轴垂直向下指向地心。这样定义的好处是重力方向恒为+Z,深度增加对应Z增大,符合水下作业的直觉。大地坐标系用来描述ROV在作业区域中的绝对位置和航向,例如“ROV位于布放点北偏东12 m、深度35 m、艏向120°”。

机体坐标系固连于ROV本体,随其一起平移和旋转。常用约定为:X轴指向ROV艏部(前进方向),Y轴指向右舷,Z轴指向底部(下潜方向),原点取在ROV的浮心或重心附近。机体坐标系描述的是ROV自身的运动与受力,推进器推力、水流相对速度、传感器安装位置都在这个坐标系里表达最自然。

两套坐标系之间通过一个旋转矩阵联系。若用欧拉角描述机体相对大地的姿态,按Z-Y-X顺序(先艏摇、再纵摇、最后横滚),从机体坐标到大地坐标的旋转矩阵为:

R = Rz(ψ)·Ry(θ)·Rx(φ)

Rx(φ) = [1, 0, 0; 0, cosφ, -sinφ; 0, sinφ, cosφ]
Ry(θ) = [cosθ, 0, sinθ; 0, 1, 0; -sinθ, 0, cosθ]
Rz(ψ) = [cosψ, -sinψ, 0; sinψ, cosψ, 0; 0, 0, 1]

其中 φ 为横滚角,θ 为纵摇角,ψ 为艏摇角

实际编程时不必手写矩阵乘法,多数库直接提供欧拉角与旋转矩阵、四元数的互转。但必须牢记:欧拉角是有顺序的,Z-Y-X与X-Y-Z得到的结果不同,团队内部必须统一约定并写入接口文档,否则姿态数据在模块间传递时会出现难以排查的偏差。

二、六自由度的定义与正方向

刚体在三维空间中有六个独立运动分量,ROV的六自由度即由此而来。按机体坐标系定义如下:

  • 纵荡(Surge):沿机体X轴的平移,向艏为正。对应前进/后退。
  • 横荡(Sway):沿机体Y轴的平移,向右舷为正。对应侧移。
  • 垂荡(Heave):沿机体Z轴的平移,向下为正。对应下潜/上浮。
  • 横滚(Roll):绕机体X轴的转动,按右手定则,从艏部看顺时针为正。
  • 纵摇(Pitch):绕机体Y轴的转动,艏部抬起为正(需与所选约定核对)。
  • 艏摇(Yaw):绕机体Z轴的转动,艏部向右转为正。

前三个是平移自由度,后三个是旋转自由度。工程上常把纵荡、横荡、艏摇称为“水平面三自由度”,把垂荡、横滚、纵摇称为“垂直面三自由度”,因为前者主要决定ROV在水平面的位置与朝向,后者主要影响深度与姿态稳定。这种划分直接对应推进器的布置思路:水平推进器负责前三个,垂直推进器负责后三个。

正方向约定没有绝对的对错,只有是否统一。建议在项目启动时就以文档形式固定:坐标系手性、欧拉角顺序、各轴正方向、角度单位(弧度或度)。所有日志、界面显示、控制指令都遵循同一约定。

三、坐标变换基础:从机体量测到大地位置

ROV上的传感器大多输出机体坐标系下的量,而作业人员关心的是大地坐标系下的位置。以一台装有惯性测量单元(IMU)和多普勒计程仪(DVL)的ROV为例,DVL测得的是机体坐标系下的三轴速度 v_b = [u, v, w]ᵀ,要换算成大地坐标系下的速度,需左乘旋转矩阵:

v_n = R · v_b

若某时刻 φ=2°, θ=-3°, ψ=30°,
机体速度 v_b = [0.5, 0.1, -0.2] m/s(前进0.5、右移0.1、上浮0.2)

则大地速度 v_n ≈ [0.42, 0.31, -0.19] m/s
(数值为示例计算,用于说明变换效果)

可以看到,机体上“纯前进”的运动,在大地坐标系下会分解出北向和东向两个分量,这正是艏向角30°带来的耦合。若忽略这一步变换,直接把机体速度当作大地速度积分,位置估计会随航向变化产生系统性偏差,航向偏离正北越远,误差越大。

位置则由速度积分得到:p_n(k+1) = p_n(k) + v_n · Δt。实际系统中,Δt通常取IMU的采样周期(如10 ms),并对速度做低通滤波以抑制DVL的野值。姿态角本身也需通过陀螺仪角速度积分并结合加速度计、磁力计修正获得,这部分属于姿态解算内容,此处只需明确:姿态角是坐标变换的输入,其精度直接决定位置推算的精度。

四、六自由度与推进器配置的对应关系

理解六自由度的价值在于它直接指导推进器配置。一台典型的六推进器ROV(四水平+两垂直)中,四个水平推进器通过差动组合产生纵荡、横荡和艏摇:全部同向推产生纵荡,左右两组反向推产生艏摇,斜置布置时还可合成横荡。两个垂直推进器一前一后布置,同向推产生垂荡,差动推产生纵摇;横滚通常依靠重心与浮心的垂向间距被动恢复,或由推进器布局间接影响。

下面这张图把两套坐标系、六个自由度以及它们与推进器组的对应关系放在同一视图中,便于建立整体印象。

大地坐标系(NED) 北 X 东 Y 地 Z(向下) 固定于水面/海底,不随ROV运动 描述绝对位置、深度、航向 坐标变换 v_n = R(φ,θ,ψ) · v_b 机体坐标系 艏 X 右舷 Y 底 Z(向下) 固连于ROV本体 描述推力、相对速度、传感器安装 六自由度分解 平移自由度(沿轴) 纵荡 Surge:沿X,向艏为正 横荡 Sway:沿Y,向右舷为正 垂荡 Heave:沿Z,向下为正 旋转自由度(绕轴) 横滚 Roll:绕X轴 纵摇 Pitch:绕Y轴 艏摇 Yaw:绕Z轴 水平推进器组 → 纵荡 / 横荡 / 艏摇  垂直推进器组 → 垂荡 / 纵摇(横滚多靠稳心被动恢复)

五、一个容易踩的坑:欧拉角奇异与角度回绕

当纵摇角接近±90°时,横滚与艏摇的旋转轴趋于重合,欧拉角出现奇异,姿态解算会剧烈跳变。ROV正常作业时纵摇一般不超过±30°,很少触及奇异点,但在布放回收、强流冲击或推进器故障导致大幅俯仰时可能出现。工程上的对策是内部姿态解算采用四元数,仅在显示和接口层转换为欧拉角,并对艏摇角做±180°回绕处理,避免从179°跳到-179°时控制回路误判为大幅转向。

另一个常见问题是角度单位混用。控制算法内部多用弧度,操作界面和日志多用度。若在坐标变换前未统一单位,sin(30)与sin(30°)的结果相差一个数量级,表现为ROV“该走直线却画弧”。建议在数据入口处显式标注单位,并在单元测试中用已知姿态验证旋转矩阵输出。

坐标变换的正确性无法靠肉眼观察运动来确认。应构造至少三组已知输入(如艏向0°、90°、180°下的纯纵荡)验证大地速度输出是否符合预期,再投入实际作业。

把坐标系约定、六自由度正方向和变换公式三者固定下来,后续的推进器推力分配、控制律设计和操作员指令映射才有共同的语言。下一台ROV下水前,先检查这三项是否已经写进项目文档,比事后排查“为什么它往左偏”要省力得多。