3. 航路点与航线表示方法
要让无人船“知道往哪走”,首先必须把“走哪里”这件事用计算机能处理的方式表达出来。航路点与航线的表示方法,本质上是一套坐标与几何语言:它把海图上的意图,翻译成控制器可以逐周期计算的数值。本节围绕四个层层递进的概念展开——经纬度坐标、局部坐标系、航路点序列,以及航线段与转向半径的数学描述。
一、经纬度坐标:全局的绝对位置
经纬度(WGS-84 椭球)是航路点最自然的存储形式,因为它与海图、GPS 接收机、电子海图系统直接对应。一个航路点通常记为 (lat, lon),单位为度,工程上常保留 7 位小数(约 1 cm 量级)。需要注意三点:第一,纬度范围 −90°~+90°,经度范围 −180°~+180°,东经、北纬为正;第二,经纬度是角度量,不能直接做平面距离运算,1° 纬度约 111.32 km,而 1° 经度随纬度收缩为 111.32·cos φ km;第三,航路点还应附带属性,如期望航速、转向模式、是否停船等,形成“带属性的点”。
在存储层面,一个航路点可表示为结构化记录:
waypoint = {
id: 3,
lat: 30.5234100, // 度,北纬为正
lon: 114.3168200, // 度,东经为正
speed: 1.2, // m/s,期望航速
turn_radius: 8.0 // m,该点允许的最小转向半径
}
二、局部坐标系:把球面问题变成平面问题
控制与制导算法(如视线法 LOS、纯追踪)在平面上推导最简洁,因此需要把经纬度投影到以某点为原点的局部平面坐标系。工程上常用两种:以参考点为原点的东-北(ENU)坐标系,以及航海习惯的北-东(NEU)坐标系。本节统一采用 ENU:x 轴指向正东,y 轴指向正北,角度从 x 轴逆时针为正。小范围(数公里内)可用等距圆柱近似:
x = (lon - lon0) · cos(lat0) · R
y = (lat - lat0) · R
R = 6378137 m(地球平均半径近似)
例如参考点取 (30.5234°, 114.3168°),某航路点 (30.5244°, 114.3178°),则 Δlat=0.001°、Δlon=0.001°,代入得 y≈111.3 m、x≈111.3·cos30.52°≈95.9 m。这样,后续所有距离、方位、转向判断都在米制平面上完成,结果再反投影回经纬度用于显示与上报。必须强调:参考点一经确定,全船所有模块必须共用同一参考点,否则坐标不可比。
三、航路点序列:有序的意图链
航路点序列 W = {W0, W1, …, Wn} 是带顺序的集合,顺序即航行意图。序列中相邻两点构成一条航线段,第 i 段记为 L_i = (W_i, W_{i+1})。工程实现上,序列通常还携带一个“当前目标索引” k,控制器只关心当前段 L_k;当无人船越过该段的终止条件(到达终点、越过终点垂线或进入转向区),索引递增。序列的完整性检查包括:点数不少于 2、相邻点不重合、相邻段夹角不为 0° 或 180°、首尾点是否闭环(巡逻任务)等。
四、航线段与转向半径的数学描述
对航线段 L_i,设起点 A=(x_A,y_A)、终点 B=(x_B,y_B),则段长 d = √((x_B−x_A)²+(y_B−y_A)²),段方位角 ψ_i = atan2(x_B−x_A, y_B−y_A)(注意 ENU 下 atan2 的 x、y 顺序,使 0° 指向正北、顺时针为正,与航海习惯一致)。点到线段的横向偏差用叉积计算:e = ((P−A) × (B−A)) / d,其符号表示船在航线的左舷还是右舷,是视线法制导的核心输入。
转向半径描述的是“在 W_i 处如何平滑地由 L_{i−1} 转入 L_i”。设两段夹角为 Δψ(航向变化量),允许的最小转向半径为 R_min,则实际采用 R = max(R_min, v / ω_max),其中 v 为航速、ω_max 为最大偏航角速度。圆弧与两条航线段相切,切点距顶点的距离为 T = R · tan(Δψ/2)。以示例参数说明:若 Δψ=60°、R=8 m,则 T=8·tan30°≈4.62 m,即应在距 W_i 约 4.62 m 处开始转向。若 T 大于相邻航段长度的一半,说明该转向在几何上不可实现,需要降低航速、增大 R 或插入过渡航路点。
T ≤ 0.5·min(d_{i−1}, d_i) 时,圆弧过渡可行;否则应调整航速或航路点布局。这一条在规划阶段就应检查,而不是等到控制阶段才发现船“转不过来”。五、从表示到可用:一次完整的换算示例
假设任务给出三个经纬度航路点,参考点取 W0。按前述公式投影后得到 W0=(0,0)、W1=(95.9,111.3)、W2=(191.8,166.9)(单位 m,示例数值)。计算 L0 段长 d0≈146.9 m、方位角 ψ0=atan2(95.9,111.3)≈40.7°;L1 段方位角 ψ1≈29.9°,航向变化 Δψ≈−10.8°。取 R=8 m,则 T=8·tan(5.4°)≈0.76 m,远小于半段长,圆弧过渡可行。控制器据此即可在 L0 上以横向偏差 e 修正航向,接近 W1 前 0.76 m 处切入圆弧,再稳定到 L1 上。整个链条中,经纬度负责“存与报”,ENU 负责“算”,序列负责“序”,航线段与转向半径负责“走得顺”——四者缺一不可。