GNSS学习笔记

GNSS 坐标转换

GNSS计算主要涉及三个坐标系,地心地固坐标系地理坐标系站心坐标系。这里主要介绍一下三个坐标的含义和转换公式。

  • 地心地固坐标系如图X,Y,Z表示 (ECEF坐标系),以地心O为坐标原点,Z轴指向协议地球北极,X轴指向参考子午面与地球赤道的交点,也叫地球坐标系。一般GNSS坐标计算都在地心地固坐标系下进行的。由于地球是椭圆形,有WGS-84和CGC2000等多种标准

  • 地理坐标系则通过经度(longitude),纬度(latitude)和高度(altitude)来表示地球的位置,也叫经纬高坐标系(LLA坐标系)。

  • 站心坐标系以用户所在位置P为坐标原点,三个轴分别指向东向,北向和天向,也叫东北天坐标系(enu坐标系)。站心坐标系的天向方向和地理坐标系的高度方向是一致的。站心坐标系用在惯性导航和卫星俯仰角计算中较多。

参数 WGS-84 CGC200
基准椭球体的长半径a 6378137.0 m 6378137.0 m
基准椭球体的极扁率f 1/298.257223565 1/298.257223563
地球自转角速度We 7.2921151467*1e-5 7.2921151467*1e-5
地球引力和地球质量的乘积GM 3986004.418*1e8 3986004.418*1e8
光速 2.99792458*1e8 m/s 2.99792458*1e8 m/s

LLA坐标系转ECEF坐标系

LLA坐标系下的(lon,lat,alt)转换为ECEF坐标系下点(X,Y,Z)

⎧⎩⎨X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1−e2)+alt)sin(lat){X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1−e2)+alt)sin(lat)

其中e为椭球偏心率,N为基准椭球体的曲率半径

⎧⎩⎨e2=a2−b2a2N=a1−e2sin2lat√{e2=a2−b2a2N=a1−e2sin2lat

由于WGS-84下极扁率f=a−baf=a−ba,偏心率e和极扁率f之间的关系:

e2=f(2−f)e2=f(2−f)

坐标转换公式也可以为

⎧⎩⎨X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1−f)2+alt)sin(lat){X=(N+alt)cos(lat)cos(lon)Y=(N+alt)cos(lat)sin(lon)Z=(N(1−f)2+alt)sin(lat)
N=a1−f(2−f)sin2lat−−−−−−−−−−−−−−−√N=a1−f(2−f)sin2lat

python实现

def lla2ecef(lat,lon,alt):
    WGS84_A = 6378137.0
    WGS84_f = 1/298.257223565
    WGS84_E2 = WGS84_f*(2-WGS84_f)
    deg2rad = math.pi/180.0
    rad2deg = 180.0/math.pi
    lat *= deg2rad
    lon *= deg2rad
    N = WGS84_A/(math.sqrt(1-WGS84_E2*math.sin(lat)*math.sin(lat)))
    x = (N+alt)*math.cos(lat)*math.cos(lon)
    y = (N+alt)*math.cos(lat)*math.sin(lon)
    z = (N*(1-WGS84_f)*(1-WGS84_f)+alt)*math.sin(lat)
    return [x,y,z]

ECEF坐标系转LLA坐标系

ECEF坐标系下点(X,Y,Z)转换为LLA坐标系下的(lon,lat,alt)

lon=arctan(yx)lon=arctan(yx)
alt=pcos(lat)−Nalt=pcos(lat)−N
lat=arctan[zp(1−e2NN+alt)−1]lat=arctan[zp(1−e2NN+alt)−1]
p=x2+y2−−−−−−√p=x2+y2

一开始lon是未知的,可以假设为0,经过几次迭代之后就能收敛

ECEF坐标系转enu坐标系

用户所在坐标点P0=(x0,y0,z0)P0=(x0,y0,z0),,计算点P=(x,y,z)P=(x,y,z)在以点P0P0为坐标原点的enu坐标系位置(e,n,u)(e,n,u)这里需要用到LLA坐标系的数据,P0P0的LLA坐标点为LLA0=(lon0,lat0,alt0)LLA0=(lon0,lat0,alt0)

⎡⎣⎢ΔxΔyΔz⎤⎦⎥=⎡⎣⎢xyz⎤⎦⎥−⎡⎣⎢x0y0z0⎤⎦⎥[ΔxΔyΔz]=[xyz]−[x0y0z0]
⎡⎣⎢enu⎤⎦⎥=S⋅⎡⎣⎢ΔxΔyΔz⎤⎦⎥=⎡⎣⎢−sin(lon0)−sin(lat0)cos(lon0)cos(lat0)cos(lon0)cos(lon0)−sin(lat0)sin(lon0)cos(lat0)sin(lon0)0cos(lat0)sin(lat0)⎤⎦⎥⋅⎡⎣⎢ΔxΔyΔz⎤⎦⎥[enu]=S⋅[ΔxΔyΔz]=[−sin(lon0)cos(lon0)0−sin(lat0)cos(lon0)−sin(lat0)sin(lon0)cos(lat0)cos(lat0)cos(lon0)cos(lat0)sin(lon0)sin(lat0)]⋅[ΔxΔyΔz]

即坐标变换矩阵S=⎡⎣⎢−sin(lon0)−sin(lat0)cos(lon0)cos(lat0)cos(lon0)cos(lon0)−sin(lat0)sin(lon0)cos(lat0)sin(lon0)0cos(lat0)sin(lat0)⎤⎦⎥S=[−sin(lon0)cos(lon0)0−sin(lat0)cos(lon0)−sin(lat0)sin(lon0)cos(lat0)cos(lat0)cos(lon0)cos(lat0)sin(lon0)sin(lat0)]

enu坐标系转ECEF坐标系

SS为单位正交矩阵

S−1=STS−1=ST

反之

⎡⎣⎢ΔxΔyΔz⎤⎦⎥=S−1⋅⎡⎣⎢enu⎤⎦⎥=ST⋅⎡⎣⎢enu⎤⎦⎥[ΔxΔyΔz]=S−1⋅[enu]=ST⋅[enu]

LLA坐标系转enu坐标系

上述可以看到,从LLA坐标系转换到enu坐标系有较多计算量,在考虑地球偏心率ee很小的前提下,可以做一定的近似公式计算

⎡⎣⎢ΔeΔnΔu⎤⎦⎥=⎡⎣⎢a⋅cos(lat)⋅Δlon000a⋅Δlat000Δalt⎤⎦⎥[ΔeΔnΔu]=[a⋅cos(lat)⋅Δlon000a⋅Δlat000Δalt]
(0)

相关推荐