Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation

在上一讲《Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters》 我们学习了卡尔曼滤波相关知识,包括:线性卡尔曼滤波(KF)扩展卡尔曼滤波(EKF)误差卡尔曼滤波(ES-EKF)无损卡尔曼滤波(UKF)

本讲我们学习自动驾驶定位中常用的两种传感器:惯性测量单元(IMU)全球导航卫星系统(GNSS)

B站视频链接:

  • 3D Geometry and Reference Frames (Video)
  • The Inertial Measurement Unit (Video)
  • Global Navigation Satellite System (Video)

1. 3D Geometry and Reference Frames

1.1 Introduction

回顾一下中学所学知识,向量是具有大小方向的矢量。在不同的坐标系下,同一个向量可以使用不同的坐标来表示。如下图所示的向量 rrr,在两个坐标系 →Fa\stackrel{\mathscr{F}}{\rightarrow}_{a}Fa→Fb\stackrel{\mathscr{F}}{\rightarrow}_{b}Fb 下将会有两个不同的表示 ra\mathbf{r}_ararb\mathbf{r}_brb

在这里插入图片描述
很显然,向量rb\mathbf{r}_brb 可由向量 ra\mathbf{r}_ara 经过旋转变换而来,即可以找到一个旋转矩阵 Cba\mathbf{C}_{ba}Cba,满足 :
rb=Cbara\mathbf{r}_{b}=\mathbf{C}_{b a} \mathbf{r}_{a} rb=Cbara

旋转矩阵 Cba\mathbf{C}_{ba}Cba 表示向量从 aaa 坐标系向 bbb 坐标系进行变换。

然而在现实世界中,两个坐标系的原点经常不是同一个原点,这时候还需要进行平移变换处理,如下图所示。惯性坐标系为 →Fi\stackrel{\mathscr{F}}{\rightarrow}_{i}Fi,车辆坐标系为 →Fv\stackrel{\mathscr{F}}{\rightarrow}_{v}Fv。现在我们用 ripi\mathbf{r}_{i}^{p i}ripi 表示点 PPP 在惯性坐标系的位置,rivi\mathbf{r}_{i}^{v i}rivi 表示车辆坐标系在惯性坐标系下的位置,Civ\mathbf{C}_{i v}Civ 表示车辆坐标系到惯性坐标系的旋转变换矩阵,rvpv\mathbf{r}_{v}^{p v}rvpv 表示点 PPP 在车辆坐标系下的位置。则 ripi\mathbf{r}_{i}^{p i}ripi 可以写成:
ripi=rivi+Civrvpv\mathbf{r}_{i}^{p i}=\mathbf{r}_{i}^{v i}+\mathbf{C}_{i v} \mathbf{r}_{v}^{p v} ripi=rivi+Civrvpv

在这里插入图片描述


1.2 Rotation Representation

旋转变换可以有很多方式来表示。 最常见的是使用旋转矩阵。 它通常也被称为方向余弦矩阵。 旋转矩阵的一个重要的性质就是 R−1=RTR^{-1}=R^{T}R1=RT

在这里插入图片描述
第二种表示方法就是使用单位四元数。 四元数本身就是一个有趣的数学主题,但在本课程中,知道单位四元数可以表示为单位长度的四维向量就足够了,这里有两个需要注意的东西,一是旋转轴 u\mathbf{u}u,二是旋转角度 ϕ\phiϕ。 为什么要使用四元数? 因为它不受奇点的影响,与旋转矩阵相比它只需要四个参数而不是九个

在这里插入图片描述
第三种表示方法就是使用欧拉角。欧拉角之所以有吸引力,原因在于它是一种直观简约的表示,只需要知道绕每个轴转动的角度就可以得到最终的旋转变换。

在这里插入图片描述
在自动驾驶中会选择哪一种旋转表示方式呢? 这要看具体情况。 每种表达方式都有优缺点。旋转矩阵可以表示任何旋转,但需要九个参数并有六个约束单位四元数也可用于表示任何旋转,但它也有一个约束。 最后,欧拉角不受约束、直观地可视化并且仅需要三个参数,但受奇点影响
在这里插入图片描述


1.3 Reference Frames

现在让我们看一下车辆定位时将使用到的重要参考坐标系。 第一个坐标系是地心惯性坐标系或 ECIF。该坐标系的原点位于地球中心,z\mathbf{z}z 轴指向正北,x\mathbf{x}x 轴和 y\mathbf{y}y 轴相对于非常遥远的恒星是固定的。 这意味着虽然地球绕 z\mathbf{z}z 轴旋转,但 x\mathbf{x}xy\mathbf{y}y 轴不会移动。
在这里插入图片描述
接下来,以地球为中心的(ECEF)ECIF 类似,只是它的 x\mathbf{x}x 轴与本初子午线对齐并与地球一起旋转。y\mathbf{y}y 轴由右手定则确定。ECEF坐标系是定位中经常用到的一个坐标系,主要是与GNSS传感器有关。
在这里插入图片描述
尽管ECEFECIF在我们讨论卫星和飞机上的惯性传感时很有用,但对于汽车应用,我们通常希望使用相对于地面固定的框架。为此,我们将使用我们所说的导航坐标系。 一个常见的导航坐标系是选择某个位置作为起点并且坐标系与北、东和向下反向对齐的导航坐标系(NED坐标)。 最后,我们还经常需要考虑刚性连接到传感器的传感器坐标系,例如 LIDAR、GPS接收器或惯性测量单元。传感器坐标系通常与车辆坐标系不同,后者可以放置在车辆上任何方便的地方,例如在质量中心。 对于定位,我们通常会忽略车辆和传感器坐标系之间的区别,并假设如果我们可以跟踪传感器,我们应该能够在适当校准的情况下跟踪车辆上的任何点,这是我们稍后研究的主题。
在这里插入图片描述


2. The Inertial Measurement Unit

2.1 Introduction

惯性测量单元IMU测量物体在惯性空间中的运动。如今,几乎所有智能手机中都配备了IMU。它们经常用于健康跟踪的计步,以及最近用作增强现实设备。

尽管它们在今天无处不在,但能够准确跟踪运动物体运动的传感器的开发是20世纪的一项重大成就。 IMU早在GPS之前就为跨洋飞行提供了帮助,并且作为机载制导、导航和控制系统的一部分对阿波罗任务至关重要。阿波罗航天器依靠IMU来准确跟踪飞行器在漫长的月球航行中的位置和方向。

在现代自动驾驶汽车中,IMU扮演着非常相似的角色。在来自其他传感器的导航信息不可用或不可靠时来进行导航计算。那么什么是IMU呢?

一般来说,惯性测量单元是一个复合传感器套件,它结合了三轴陀螺仪三轴加速度计来跟踪刚体的外部自由运动。一些IMU还包含磁力计指南针,以帮助跟踪方向。IMU有多种形状和形式。现代智能手机中的传感器相对便宜,批量购买时的成本通常不到几美元。它们重量轻,需要的功率相对较小,但会产生相当嘈杂的测量结果。而更昂贵的IMU使用更复杂的组件并具有更准确的校准模型,可以消除温度波动等的影响。
在这里插入图片描述


下面简单介绍下陀螺仪。陀螺仪这个词本身来自希腊词。历史上,陀螺仪是一个旋转的圆盘,它的角动量会阻止方向的变化。在 19 世纪末和 20 世纪初,工程师们意识到这种设备可以用作海洋和航空导航的方向参考。

在现代陀螺仪中,旋转轮通常被微机电系统取代,该系统由一个小的硅音叉组成,该系统根据施加的旋转或方向变化来改变其共振特性。这种传感器要便宜得多,而且体积也很小。然而,它们会产生嘈杂的测量结果并且对温度的波动很敏感。此外,它们测量旋转速率,而不是直接测量方向,因此必须对输出信号进行数值积分以确定方向变化。这个过程会在最终的方向估计中引入额外的误差。

在这里插入图片描述


加速度计测量沿单个轴的加速度。更便宜的基于MEMS的加速度计使用微型悬臂梁,并附有检测质量。当传感器加速时,光束发生偏转。可以通过电容电路测量这种偏转,并将其转换为加速度值。

然而,出于导航目的,我们更关心的是相对于某个固定参考系的加速度。为了计算这个加速度,我们需要使用重力场中加速度计的基本方程
f+g=r¨i\mathbf{f}+\mathbf{g}=\ddot{\mathbf{r}}_{i} f+g=r¨i
在这里插入图片描述


2.2 IMU Measurement Models

首先介绍陀螺仪测量模型,模型方程如下:
ω(t)=ωs(t)+bgyro(t)+ngyro(t)\omega(t)=\omega_{s}(t)+\mathbf{b}_{\mathrm{gyro}}(t)+\mathbf{n}_{\mathrm{gyro}}(t) ω(t)=ωs(t)+bgyro(t)+ngyro(t)

其中 ωs(t)\omega_{s}(t)ωs(t) 是陀螺仪测量值, 测量模型中包含一个缓慢变化的偏置项 bgyro(t)\mathbf{b}_{\mathrm{gyro}}(t)bgyro(t) 和一个白高斯加性噪声项 ngyro(t)\mathbf{n}_{\mathrm{gyro}}(t)ngyro(t) 来模拟传感器误差。尽管陀螺仪确实测量地球的自转,但对于我们只关心短时间运动的应用,忽略这一点通常是安全的

加速度计测量模型将具有类似的噪声和偏置项。但是现在,我们不再像使用旋转角速度那样直接测量身体加速度,而是需要使用重力场中加速度计的基本方程来消除重力的影响。
a(t)=Csn(t)(r¨nsn(t)−gn)+baccel(t)+naccel(t)\mathbf{a}(t)=\mathbf{C}_{s n}(t)\left(\ddot{\mathbf{r}}_{n}^{s n}(t)-\mathbf{g}_{n}\right)+\mathbf{b}_{\mathrm{accel}}(t)+\mathbf{n}_{\mathrm{accel}}(t) a(t)=Csn(t)(r¨nsn(t)gn)+baccel(t)+naccel(t)

可以看到,为了得到准确的加速度,我们首先要得到准确的方向矩阵 Csn(t)\mathbf{C}_{s n}(t)Csn(t),而这又需要我们得到准确的角速度。

最后,让我们讨论一下IMU模型的一些限制。

  • 首先,准确的方向估计对于准确的位置估计至关重要。 当我们将测得的比力转换为加速度时,我们必须确保重力方向是正确的。 否则,即使方向上的一个小错误也会让我们认为我们正在加速,而实际上我们并没有。
  • 其次,我们推导出的两个模型都忽略了地球自转的影响。 对于更远距离的导航(飞机或导弹导航时不能忽略),这实际上很重要。
  • 最后,我们推导出的模型适用于捷联IMU。 这些IMU是物理固定在车辆上,并且没有在万向节上安装旋转轮。 尽管后者可能更准确,但由于体积大且成本高,它们很少用于汽车应用。

3. Global Navigation Satellite System

3.1 Introduction

与上一节介绍的IMU一样,几乎每部现代智能手机都至少有一种类型的GNSS接收器。尽管我们现在认为它们是理所当然的,但第一个现代全球定位卫星系GPS 是在 1980 年代为军事用途而建造的。

到 1995 年第二版系统全面运行时,GPS 已免费向公众开放。部分原因是大韩航空 007 号航班在 1983 年坠毁。007 号航班是一架 747 客机,从纽约飞往首尔,在阿拉斯加安克雷奇加油。当它从安克雷奇飞往首尔时,它偏离了计划的飞行路线,在苏联领空停留了几个小时后被一架战斗机击落。

为了穿越北太平洋,007 航班依靠惯性导航系统进行引导。飞行员未能正确初始化系统,错误地将飞机保持在特定的磁航向。反过来,这架飞机偏离了计划航线 300 多公里。在 007 航班被击落后不久,罗纳德·里根总统发布了一项指令,允许美国全球定位系统在完全开发后免费向公众开放。
在这里插入图片描述


GPS系统由位于六个轨道平面的 24-32 颗卫星组成。卫星会定期退役和更换。高度约为 20,000 公里,轨道周期不到 12 小时。系统的设计使得至少四颗卫星在地球上的任何表面点始终可见。每颗卫星以两种频率进行广播,一种用于民用,一种用于军用。每个广播信号都包含一个伪随机码,用于识别卫星位置和信号传输时间。

GPS背后的基本原理是到达时间测距。接收器通过将自己的内部时钟与传输时间的时钟进行比较来计算每个可见卫星的距离。使用电磁信号以光速传播的知识将时间差转换为距离。为了计算 3D 位置,测距方程需要至少四颗可见卫星。如果已知高度并且只需要 2D 位置,则只需要三颗卫星。

在这里插入图片描述


3.2 Trilateration

对于每颗卫星,伪距测量方程为:
ρ(i)=c(tr−ts)=(p(i)−r)T(p(i)−r)+cΔtr+cΔta(i)+η(i)\rho^{(i)}=c\left(t_{r}-t_{s}\right)=\sqrt{\left(\mathbf{p}^{(i)}-\mathbf{r}\right)^{T}\left(\mathbf{p}^{(i)}-\mathbf{r}\right)}+c \Delta t_{r}+c \Delta t_{a}^{(i)}+\eta^{(i)} ρ(i)=c(trts)=(p(i)r)T(p(i)r)+cΔtr+cΔta(i)+η(i)

各物理量含义如下:
在这里插入图片描述

请注意,这与三角测量不同,三角测量基于角度测量计算位置。 该模型考虑了接收器时钟误差、大气传播延迟和测量噪声。术语伪距是指距离信息被上述误差源破坏的事实。 每个伪距测量在 2D 中定义一个圆或在 3D 中定义一个球体。 如果我们正好有四颗卫星,我们可以明确地求解接收器位置和接收器时钟误差。

如果我们有四个以上,我们可以使用最小二乘法找到假设高斯噪声的最大似然位置。


3.3 Error Sources and Improvements

GPS 存在多种误差源:

  • 首先,电离层中的带电离子可以将信号延迟
  • 周围的地形和建筑物可能会引起反射,从而增加信号在到达接收器之前传播的距离,这些被称为多径误差
  • 时钟同步或卫星位置信息中的任何小错误都可能导致灾难性后果。即使是 1 微秒的计时误差也会导致 300 米的重大位置误差。星历数据和卫星时钟都会经常更新和重新校准,但校准可能会过时。
  • 最后,可见卫星的几何配置也会导致定位精度的变化。这被称为精度的几何稀释。为了获得更高的精度,最好采用卫星遍布天空的配置。

幸运的是,对于某些应用程序,我们可以通过以各种方式增强系统来提高GNSS精度。

  • 差分GPS 可以通过使用一个或多个固定基站更准确的已知位置来校正接收机定位估计。修正以不同的频率广播到移动车辆中的 GNSS 接收器。
  • 在某些情况下,实时动态或RTK GPS 利用载波相位信息将定位精度提高到两厘米。

尽管这两种技术都可以显着提高 GPS 的精度,但它们的实施成本通常非常高。正如我们在之前的视频中提到的,惯性传感器对于导航非常有用。然而,随着时间的推移,它们会漂移或累积无限的误差。相比之下,GPS 系统提供有界误差定位更新。配备 GPS 的自动驾驶汽车将始终保持有保证的定位精度水平,除非 GPS 接收器出现故障或丢失至少四颗卫星的轨道。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection

本文介绍一个新的车道线数据集 VIL-100 和检测模型 MMA-Net,论文已收录于 ICCV2021,重点是理解本文提出的 LGMA 模块,用于聚合局部和全局记忆特征。 论文链接:https://arxiv.org/abs/2108.08482 项目链接:https://gi…

七天入门图像分割(1):图像分割综述

最近在研究自动驾驶视觉语义地图构建,因为要使用到语义分割技术,趁此机会学习了百度飞桨的图像分割课程,课程蛮好的,收获也蛮大的。 课程地址:https://aistudio.baidu.com/aistudio/course/introduce/1767 1. 课程简要…

一步步编写操作系统 59 cpu的IO特权级1

在保护模式下,处理器中的“阶级”不仅体现在数据和代码的访问,还体现在指令中。 一方面将指令分级的原因是,有些指令的执行对计算机有着严重的影响,它们只有在0特权级下被执行,因此被称为特权指令(Privile…

重读经典:《ImageNet Classification with Deep Convolutional Neural Networks》

9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】这两天偶然间在B站看了李沐博士对AlexNet论文的重新解读,收获满满。AlexNet是当今深度学习浪潮奠基作之一,发表在2012年。在视频中,李沐博士主要是分享了他的三步法快速读论…

一步步编写操作系统 60 cpu的IO特权级2 什么是驱动程序

用户程序可以在由操作系统加载时通过指定整个eflags设置,操作系统如何设置自己的IOPL呢,即使内核IOPL为0也得写进去eflags寄存器中才生效。可惜的是,没有直接读写eflags寄存器的指令,不过可以通过将栈中数据弹出到eflags寄存器中来…

详解惯性导航论文 RINS-W: Robust Inertial Navigation System on Wheels

本文介绍一篇惯性导航定位论文 RINS-W,论文发表于 IROS2019。在本论文中作者提出了仅使用一个IMU进行长时间惯性导航的方法。方法主要包括两个部分: 检测器使用循环神经网络来检测IMU的运动状况,如零速或零横向滑移;使用Invarian…

一步步编写操作系统 61 任务状态段 TSS

I/O位图是位于TSS中的,它可以存在也可以不存在,它只是用来设置对某些特定端口的访问,没有它的话便默认为禁止访问所有端口。正是由于它可有可用,所以TSS的段界限TSS limit(即实际大小-1)并不固定。当TSS中不…

重读经典:《Deep Residual Learning for Image Recognition》

ResNet论文逐段精读【论文精读】这是李沐博士论文精读的第二篇论文,这次精读的论文是ResNet。ResNet 是 CVPR2016 的最佳论文,目前谷歌学术显示其被引用数已经达到了90000。 ResNet论文链接为:https://arxiv.org/abs/1512.03385。 1.第一遍 …

【CodeForces - 1131F 】Asya And Kittens(并查集,思维)

题干: Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn and then put them into the cage. The cage consists of one row of nncells, enumerated with integers from 11 to nn from left to right. Adjacent…

详解道路标记数据集 CeyMo: See More on Roads -- A Novel Benchmark Dataset for Road Marking Detection

本文介绍一个新的道路标记检测数据集,论文收录于 WACV2022。Ceymo数据集总共包含2887张图片,标注了11类共4706个道路标记实例,图片分辨率为 192010801920\times108019201080。其中,对于每一个道路标记实例,作者采用了三…

动手学无人驾驶(7):车道线检测

最近在研究视觉语义地图,需要进行车道线检测,发现这篇车道线检测论文效果蛮好的 (Ultra Fast Structure-aware Deep Lane Detection)。论文作者在知乎上已经介绍过了:https://zhuanlan.zhihu.com/p/157530787&#xff…

Coursera自动驾驶课程第16讲:LIDAR Sensing

在第15讲《Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation》 我们学习了自动驾驶定位中常用的两种传感器:IMU(惯性测量单元) 和GNSS(全球导航卫星系统)。 本讲我们将学习自动驾驶汽…

DB、ETL、DW、OLAP、DM、BI关系结构图

在此大概用口水话简单叙述一下他们几个概念: (1)DB/Database/数据库——这里一般指的就是OLTP数据库,在线事物数据库,用来支持生产的,比如超市的买卖系统。DB保留的是数据信息的最新状态,只有一…

Tarjan 算法 常用模板

可以求每个点属于第几个强连通分量&#xff1a;https://blog.csdn.net/dellaserss/article/details/8267192 int Tarjan(int u){int v;dfn[u]low[u]Index;stack[Top]u;Instack[u]1;for(int i0;i<G[u].size();i){vG[u][i];if(!dfn[v]){Tarjan(v);low[u]min(low[u],low[v]);}…

【HDU - 5012】Dice(模拟,bfs)

题干&#xff1a; There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a 1.a 2,a 3,a 4,a 5,a 6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A. S…

重读经典:《Generative Adversarial Nets》

GAN论文逐段精读【论文精读】这是李沐博士论文精读的第五篇论文&#xff0c;这次精读的论文是 GAN。目前谷歌学术显示其被引用数已经达到了37000。GAN 应该是机器学习过去五年上头条次数最多的工作&#xff0c;例如抖音里面生成人物卡通头像&#xff0c;人脸互换以及自动驾驶中…

一步步编写操作系统 62 函数调用约定

由于我们要将c语言和汇编语言结合编程啦&#xff0c;所以一定会存在汇编代码和c代码相互调用的问题&#xff0c;有些事情还是要提前交待给大家的&#xff0c;本节就是要给大家说下函数调用规约中的那些事儿。 函数调用约定是什么&#xff1f; 调用约定&#xff0c;calling co…

重读经典:《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》

ViT论文逐段精读【论文精读】这次李沐博士邀请了亚马逊计算机视觉专家朱毅博士来精读 Vision Transformer&#xff08;ViT&#xff09;&#xff0c;强烈推荐大家去看本次的论文精读视频。朱毅博士讲解的很详细&#xff0c;几乎是逐词逐句地讲解&#xff0c;在讲解时把 ViT 相关…

给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

lower_bound算法返回第一个大于等于给定值所在的位置。设置两个指针start和last&#xff0c;其中start指向数组的起始位置&#xff0c;last指向数组末尾位置之后的位置。当start和last指向相同位置时循环结束。mid指向[start,last)区间的中间位置&#xff0c;当中间位置元素值大…