坐标系与定位基础:WGS84、UTM、局部坐标系与坐标转换

做导航调参,第一个绕不开的坎就是坐标系。我见过不少新手,调了半天参数,车就是不走直线,最后发现是坐标系搞混了。说白了,坐标系就是给位置定个“规矩”——你在哪儿,往哪儿走,都得有个统一的说法。

这一章,咱们就把 WGS84、UTM、局部坐标系这三个最常用的坐标系讲透。再聊聊它们之间怎么转换。嗯,这些是后面所有调参工作的地基。

核心观点:导航系统里,90% 的“诡异问题”都出在坐标系没对齐。你用的坐标和传感器用的坐标不是同一个“语言”,结果就是定位漂移、路径跑偏。

坐标系与定位基础 · 知识体系 坐标系核心概念 WGS84 坐标系 UTM 投影坐标系 局部坐标系 经纬度 + 椭球模型 平面直角坐标 自定义原点 + 朝向 坐标转换原理 三者之间通过投影、平移、旋转实现互转

1. WGS84 坐标系——GPS 的“母语”

WGS84 是个全球通用的地理坐标系。你手机里的 GPS 芯片,拿到的原始数据就是 WGS84 格式——经度、纬度、海拔。它用一个椭球体来近似地球形状,而不是正球体。

我个人习惯把 WGS84 理解成“地球的地址簿”。经度告诉你东西方向,纬度告诉你南北方向。但有个问题:经纬度是角度单位,不是长度单位。一度经度在赤道上是 111 公里,到了北极就缩成 0 了。你想想看,这直接拿来做距离计算,多麻烦。

实战技巧:我在项目中遇到过,有人直接用经纬度差值当距离去算速度,结果车在北极附近“飞”起来了。记住:经纬度不能直接当米用!

参数 值 说明
长半轴 a 6378137.0 m 赤道半径
短半轴 b 6356752.3142 m 极半径
扁率 f 1/298.257223563 地球“压扁”程度

2. UTM 坐标系——把球面拍平

WGS84 是球面上的坐标,但导航算法需要在平面上算距离、算角度。怎么办?投影。UTM(通用横轴墨卡托投影)就是最常用的方案。

UTM 把地球分成 60 个带,每个带 6 度经度宽。每个带内,坐标是平面直角坐标——东向(Easting)和北向(Northing),单位是米。这下算距离就方便了。

我记得第一次用 UTM 时犯了个错:没注意带号。两个点在不同 UTM 带里,直接算距离,结果差了十几公里。嗯,这里要注意:跨带计算必须先转换到同一个带,或者转回 WGS84 再算。

避坑指南:我曾经在项目里用 UTM 坐标做路径规划,结果车在带边界附近反复横跳。后来加了带号校验才解决。建议:如果工作区域跨带,优先用局部坐标系。

3. 局部坐标系——我的地盘我做主

局部坐标系,也叫 ENU 坐标系(东-北-天)。它以一个自定义点为原点,X 轴指向东,Y 轴指向北,Z 轴指向天顶。说白了,就是在你工作区域里“画个格子”,所有位置都相对于这个格子来定。

为什么需要局部坐标系?因为 WGS84 和 UTM 都是全球统一的,但导航算法往往只需要关心“车相对于起点在哪儿”。局部坐标系把问题简化了,计算量小,精度也够。

我建议:在固定场地做导航测试时,一定要建一个局部坐标系。把起点设为 (0,0),所有路径点都相对于起点来定义。这样调参时,一眼就能看出偏差。

关键点:局部坐标系的原点和朝向可以任意定义。但一旦定下来,整个系统里所有传感器(GPS、IMU、里程计)的坐标都必须统一到这个系里来。

4. 坐标转换原理——搭桥的艺术

坐标转换,就是把一个坐标系下的坐标,换算到另一个坐标系下。常见的转换有三类:

  • WGS84 ↔ UTM:通过投影公式,把经纬度转成平面米坐标。反过来叫反投影。
  • UTM ↔ 局部坐标系:先平移(减去原点 UTM 坐标),再旋转(对齐朝向)。
  • WGS84 ↔ 局部坐标系:通常先转 UTM,再转局部。两步走。

转换的核心是“基准统一”。你想想看,如果 GPS 给的是 WGS84,IMU 给的是局部坐标系下的姿态,里程计给的是车体坐标系下的位移——这三个数据不统一,融合算法根本没法工作。

下面是一个 WGS84 转 UTM 的简化代码示例(Python):

import math

def wgs84_to_utm(lat, lon):
    # 简化版:仅示意核心逻辑
    a = 6378137.0
    f = 1/298.257223563
    k0 = 0.9996
    zone = int((lon + 180) / 6) + 1
    # ... 省略完整投影公式
    easting = 500000 + 0.5 * a * math.radians(lon - (zone*6 - 183))
    northing = a * math.log(math.tan(math.pi/4 + math.radians(lat)/2))
    return easting, northing, zone

实用建议:别自己手写投影公式。用现成库(如 pyproj、GeographicLib)更靠谱。我早期手写过一次,调试了三天才发现一个常数写错了。

5. 坐标系对齐——调参前的必修课

在实际调参前,必须确认一件事:所有传感器的坐标系是否对齐。具体来说:

  1. GPS 天线安装位置:记录相对于车体中心的偏移量(x, y, z)。
  2. IMU 安装朝向:确认 IMU 的 X/Y/Z 轴与车体坐标系一致。不一致的话,加旋转矩阵。
  3. 里程计坐标系:通常是后轮中心为原点,前进方向为 X 轴。

我见过一个案例:IMU 装反了 90 度,结果车一直往右偏。排查了两天,最后发现是坐标系没对齐。嗯,这种问题最坑人。

硬性要求:在开始调参之前,先做一次“坐标系对齐检查”。用一张表格列出所有传感器的坐标系定义、原点位置、朝向。确认无误后再上电。