坐标系与地理基础:WGS84、经纬度与UTM、海拔、地磁偏角
做航点规划,说白了就是回答三个问题:飞机在哪儿?要去哪儿?朝哪个方向飞?这三个问题都绕不开坐标系和地理基础。我见过不少新手,一上来就调参数、写航线,结果飞机飞出去偏了几百米,回来一查——坐标系搞混了。
嗯,这一章咱们就把这些基础打牢。别嫌枯燥,这些是后面所有航点任务的根基。
WGS84坐标系——全球统一的“尺子”
WGS84(World Geodetic System 1984)是目前全球卫星导航系统(GPS、北斗、GLONASS)通用的坐标基准。它把地球近似为一个椭球体,用经纬度来描述位置。
我个人习惯把WGS84理解为“地球的骨架”。所有GPS接收机输出的原始数据,都是基于这个骨架的。它的核心参数:
| 参数 | 值 | 说明 |
|---|---|---|
| 长半轴 (a) | 6,378,137.0 m | 赤道半径 |
| 短半轴 (b) | 6,356,752.3142 m | 极半径 |
| 扁率 (f) | 1/298.257223563 | 地球“压扁”的程度 |
关键点:WGS84的经纬度单位是度(°),不是度分秒。大部分飞控和地面站软件内部都使用十进制度数。如果你拿到的是度分秒格式,记得先转换。
经纬度与UTM坐标转换
经纬度虽然直观,但有个大问题:它不是平面坐标。你想想看,在赤道附近1°经度对应的距离约111km,但在北极附近可能只有几公里。这导致直接用经纬度计算距离、面积非常麻烦。
UTM(Universal Transverse Mercator)投影就是为了解决这个问题。它把地球分成60个带(Zone),每个带6°经度宽,投影到平面上。这样我们就可以用东向(Easting)和北向(Northing)两个米制坐标来描述位置。
我在项目中遇到过最典型的坑:UTM带号搞错。有一次同事在新疆做测试,用的UTM 45N带号,但实际应该用44N。结果航线整体偏移了将近400米。嗯,从那以后我每次都会先确认带号。
转换公式(简化版):
// 经纬度 → UTM(伪代码示例)
function latLonToUTM(lat, lon) {
// 1. 计算带号
zone = floor((lon + 180) / 6) + 1;
// 2. 中央经线
centralMeridian = (zone - 1) * 6 - 180 + 3;
// 3. 墨卡托投影计算(省略详细公式)
easting = 500000 + k0 * N * [A + (1 - T + C) * A^3/6 + ...];
northing = k0 * (M - M0 + N * tan(phi) * [A^2/2 + ...]);
// 北半球:northing不变;南半球:加10000000
if (lat < 0) northing += 10000000;
return { zone, easting, northing };
}
实用技巧:大多数飞控SDK(如PX4、ArduPilot)都内置了坐标转换函数。你不需要手写公式,但一定要理解:航点规划时,内部计算用UTM(米),存储和传输用WGS84(度)。
海拔与相对高度
这是最容易出问题的地方。我见过太多炸机案例,根源就是高度理解错了。
无人机的高度通常有三种:
- 绝对海拔(AMSL):相对于平均海平面的高度。WGS84椭球体高度。
- 相对高度(AGL):相对于起飞点或地面的高度。
- 气压高度:通过气压传感器推算的高度,受天气影响大。
举个例子:你在海拔500米的山顶起飞,设置航点相对高度100米。那么飞机的绝对海拔是600米。但如果你的航线文件里写的是绝对海拔600米,而换了一个海拔200米的起飞点……飞机就会直接往地下钻。
避坑指南:我曾经因为没搞清楚“相对高度”和“绝对海拔”的区别,在山区做测绘时差点让飞机撞山。从那以后,我定了一条铁律:所有航点文件必须明确标注高度类型。要么在文件名加后缀(_AMSL / _AGL),要么在文件头用注释写明。
高度转换关系:
绝对海拔 = 相对高度 + 起飞点海拔
相对高度 = 绝对海拔 - 起飞点海拔
地磁偏角与航向角
无人机飞行的方向,不是简单的“指北”。这里有两个概念必须分清:
- 真北(True North):地理北极,所有经线交汇的点。
- 磁北(Magnetic North):地磁场的北极,位置在不断漂移。
地磁偏角(Declination)就是真北与磁北之间的夹角。东偏为正,西偏为负。这个值随地点和时间变化。
我习惯在每次飞行前做两件事:
- 查当地最新的地磁偏角(可以用NOAA的在线计算器)。
- 在飞控参数里设置正确的磁偏角。
航向角(Heading)通常以真北为0°,顺时针增加。但磁罗盘输出的是磁航向。转换关系:
真航向 = 磁航向 + 地磁偏角
举个例子:在北京(偏角约-6°),磁罗盘显示航向90°(正东),那么真航向是90° + (-6°) = 84°。如果不修正,飞机实际会往北偏6°飞行。短距离还好,飞个10公里就偏出去1公里多了。
知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作坐标系转换的“思维导图”:
这张图你看懂了吗?从上到下,WGS84是源头,分出经纬度和UTM两条路。左边处理高度,右边处理航向,最终汇到航点规划这个应用层。每一层都有坑,但只要你理解了转换逻辑,就能避开。
我的个人习惯:在写航点规划代码时,我会封装一个GeoUtils类,把WGS84↔UTM转换、高度类型判断、磁偏角修正都放在里面。这样不管换什么飞控平台,核心逻辑都不用改。你也不妨试试。