[智能交通]step1:从原始GPS数据计算位置

本文详细介绍了GPS定位的基础知识,包括坐标系统的定义,如经纬度和ECEF坐标系,以及高度的不同定义。讨论了如何将大地坐标转换为平面坐标,并阐述了确定卫星位置和计算用户与卫星距离的方法。此外,还提到了伪距离的概念,以及在考虑卫星和用户时钟偏差的情况下估算用户位置的过程。
摘要由CSDN通过智能技术生成

前言

以下内容来自以下网站
Calculating Position from Raw GPS Data

第一部分

坐标系统的定义

需要满足的条件:

  • 为了便于数学计算,需要坐标之间的单位差表示恒定的物理距离
  • 由于地球是旋转的,需要一个惯性坐标系统来表达加速度、位置和速度向量

下面介绍几种坐标系。

1、经纬度

两个经度之间的单位差表示的物理距离不是恒定的,取决于位置。例如,两个经度相距一度的距离在赤道最大,在两极接近0。
图1
2、ECEF(WGS 1984系统)

“ECEF”(地球中心,地球固定)。这些坐标系统能够很好地表达用户在与地球旋转时在地球上的位置,而固定用户在地球表面的位置是恒定的。

定义如下:

  • 地球质量中心的起源 z轴穿过CTP(常规陆地极)。CTP 是 1900 年至 1905
  • 年间地球极点位置的平均值。平均需要使用,因为极点的位置不是固定的,在半径约15米的圆圈中徘徊。 x 轴穿过 CTP
  • 赤道平面和参考子午线的交叉点,通常称为平均格林威治子午线
    图2

高度的定义

高度是相对的,在ECEF坐标中,我们可以知道某物体到地心的距离,但这不是我们通常所关心的。我们关心的是某物体在地面上的高度,所以这个“地面”的定义就至关重要。
通常有两种模式,如下。

1、地理

大地水准面是具有物理意义的测量高度的水准面。这是有道理的,海洋覆盖了地球表面,海洋的形状将接近地球。
图3

2、参考椭圆形

以地球中心为中心,革命轴与ECEF框架的z轴重合。半主轴和半小轴的长度(表示a为和b)是a = 6378137m和。 b = 6357002m不出所料,通常用于地球半径(以地球为模球)的价值为6371Km,位于半主轴和小轴之间。参考椭圆形只是对地球形状的抽象。它没有任何物理意义。地球表面的实际点通常位于参考椭圆形的上方或下方。

在此基础上,我们可以得到P 点的位置如下:

  • 大地测量纬度(ф):子午线平面中测量的角度通过椭圆体赤道平面之间的点 P 和垂直于 P 的椭圆体表面的线(从赤道向北为正,负向南)
  • 大地测量经度(λ):在参考子午线和经络平面通过 P 之间的等价平面中测量的角度 (从零子午线向东呈正向)
  • 大地测量高度(h):通过 P 测量到椭圆体的正常值。

PS:当且仅当地球是球形时,ф=ф’
图4

大地坐标系转换为平面坐标

第二部分

由两个球相交可以确定一个形状为圆的交线,三个球相交可以确定两个点。实际上,我们只要知道如果已知用户与三颗或三颗以上卫星的距离,就可以通过三角测量计算 3D 位置。

因此,定位用户的问题可以分为两个子问题:

  1. 查找用户与每颗卫星的距离
  2. 确定该卫星在用户坐标系统中的位置
    图6

确定卫星的位置

在理想情况下,下图的5个参数即可决定椭圆的大小和形状以及轨道平面相对于固定恒星的方向。然而实际中存在各种干扰,GPS需要通过传输一组扩展的16个轨道参数来解释这些扰动,这些参数可用于在给定时间瞬间准确计算卫星的位置。这里不作过多说明。
图7

计算用户与卫星的距离

pseudorange伪距离:全球定位系统接收机接收的卫星信号带有从卫星发送信号的时间戳。通过测量其自身时间与GPS信号时间戳的差异,并乘以光速,接收机计算出接收机与卫星之间距离的粗略测量。

然而现实中存在许多误差,我们需要对此进行处理。其中卫星时钟偏差是非常重要的的参数,GPS 接口规范文档第 96 页描述了计算卫星时钟偏差的程序。而用户时钟偏差时未知参数,将随用户位置一起估算。
图8
然而,传播速度的变化可能很大,并可能导致几米或数米以上的定位误差。这种速度变化有两个组成部分——Iρ由信号通过电离层传播产生,Tρ由通过对流层传播信号引起的。所以,公式如下。
图9

用户位置和时钟偏差估算

一旦对卫星时钟偏差进行了核算,并应用了所有可用的更正,卫星k的更正伪测定可以写成
图10
我们的任务是确定x和b,使得是ε^k对所有卫星来说是最小的。
图11
即设定x0和b0,使得差趋近于0
图12
由于有K个卫星,所以可以表达为以下形式
图13

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,读入Titanic数据集: ```python import pandas as pd titanic = pd.read_csv('titanic.csv') ``` 查看数据集的前几行和数据类型: ```python print(titanic.head()) print(titanic.dtypes) ``` 得到以下结果: ``` PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S [5 rows x 12 columns] PassengerId int64 Survived int64 Pclass int64 Name object Sex object Age float64 SibSp int64 Parch int64 Ticket object Fare float64 Cabin object Embarked object dtype: object ``` 可以看到,数据集中有12个特征,其中有数值型特征和字符串型特征。 接下来,我们需要对这些特征进行处理。 首先,我们将PassengerId这一特征删除,因为它对于预测乘客是否幸存没有任何帮助: ```python titanic.drop('PassengerId', axis=1, inplace=True) ``` 然后,我们将Name特征进行处理。Name特征中包含了乘客的称呼,例如Mr、Mrs、Miss等,这些称呼有可能与乘客的幸存与否有关系。因此,我们需要从Name特征中提取出这些称呼,并将它们进行分类。 ```python # 从Name特征中提取称呼 titanic['Title'] = titanic['Name'].apply(lambda x: x.split(',')[1].split('.')[0].strip()) # 将称呼进行分类 title_dict = {'Mr': 'Mr', 'Miss': 'Miss', 'Mrs': 'Mrs', 'Master': 'Master', 'Dr': 'Dr', 'Rev': 'Rev', 'Mlle': 'Miss', 'Col': 'Other', 'Major': 'Other', 'Ms': 'Miss', 'Lady': 'Other', 'Capt': 'Other', 'Sir': 'Other', 'Mme': 'Mrs', 'Countess': 'Other', 'Don': 'Other', 'Jonkheer': 'Other'} titanic['Title'] = titanic['Title'].map(title_dict) titanic.drop('Name', axis=1, inplace=True) ``` 接着,我们将Sex特征进行处理。将其转换为数值型特征,0表示女性,1表示男性。 ```python titanic['Sex'] = titanic['Sex'].map({'female': 0, 'male': 1}) ``` 然后,我们需要对缺失数据进行处理。在数据集中,Age、Cabin和Embarked这三个特征存在缺失值。 对于Age特征,我们可以使用中位数或平均数来填充缺失值。在这里,我们选择使用中位数来填充。 ```python titanic['Age'].fillna(titanic['Age'].median(), inplace=True) ``` 对于Cabin特征,由于缺失值太多,我们可以将其删除。 ```python titanic.drop('Cabin', axis=1, inplace=True) ``` 对于Embarked特征,由于缺失值很少,我们可以将其填充为出现次数最多的值。 ```python titanic['Embarked'].fillna(titanic['Embarked'].mode()[0], inplace=True) ``` 最后,我们需要对Ticket特征进行处理。由于这个特征的取值种类很多,我们可以将其转换为数值型特征,用其出现次数来表示。 ```python ticket_counts = titanic['Ticket'].value_counts() titanic['Ticket'] = titanic['Ticket'].apply(lambda x: ticket_counts[x]) ``` 最终,我们得到了处理完成的数据: ```python print(titanic.head()) print(titanic.dtypes) ``` 得到以下结果: ``` Survived Pclass Sex Age SibSp Parch Ticket Fare Embarked Title 0 0 3 1 22.0 1 0 1 7.2500 S Mr 1 1 1 0 38.0 1 0 2 71.2833 C Mrs 2 1 3 0 26.0 0 0 1 7.9250 S Miss 3 1 1 0 35.0 1 0 2 53.1000 S Mrs 4 0 3 1 35.0 0 0 1 8.0500 S Mr Survived int64 Pclass int64 Sex int64 Age float64 SibSp int64 Parch int64 Ticket int64 Fare float64 Embarked object Title object dtype: object ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值