1. 为什么我们需要坐标系转换?
想象一下你正在组装一台自动驾驶小车,车上装了GPS、IMU和激光雷达。GPS告诉你"我在东经121度、北纬31度",IMU却说"我正在以2m/s的速度往东北方向移动",而激光雷达反馈"前方3米处有障碍物"。这时候问题来了——这些数据说的是一回事吗?它们能直接相加吗?答案显然是否定的。这就是坐标系转换要解决的核心问题:让不同传感器说同一种位置语言。
在实际机器人系统中,每个传感器都有自己的"方言":GPS使用WGS-84坐标系(经纬度),IMU通常基于车身坐标系,激光雷达可能采用局部直角坐标系。就像翻译器连接不同语言的人群,坐标系转换就是机器人世界的"通用翻译器"。我曾在一个农业机器人项目里,因为没处理好GPS和视觉传感器的坐标对齐,导致喷洒路径偏移了整整2米——这个教训让我深刻理解到,精确的坐标转换不是可选项,而是多传感器系统的生命线。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常见坐标系全解析
2.1 地球级坐标系:WGS-84与ECEF
WGS-84是我们最熟悉的GPS坐标系,用经度(longitude)、纬度(latitude)和高度(altitude)描述位置。比如上海中心大厦的坐标是[121.505, 31.240, 632],这三个数字分别代表东经121.505度、北纬31.240度,海拔632米。但计算机处理时,角度制不方便计算距离和方向,于是就有了ECEF(地心地固直角坐标系)。
ECEF把地球装进一个三维直角坐标系:原点在地心,X轴穿过赤道和本初子午线交点,Z轴指向北极。上海中心大厦在这个坐标系中大概是[-2837667, 4676109, 3274587]米。我常用一个比喻:WGS-84就像用"第几排第几列"描述电影院座位,而ECEF则是精确的(x,y,z)三维坐标。
python复制# WGS-84转ECEF的Python实现
import pyproj
def wgs2ecef(lon, lat, alt):
ecef = pyproj.Proj(proj='geocent', ellps='WGS84', datum='WGS84')
lla = pyproj.Proj(proj='latlong', ellps='WGS84', datum='WGS84')
x, y,
