自动驾驶中的坐标系

自动驾驶中的坐标系

自动驾驶中的坐标系

  • 0.引言
  • 1.相机传感器坐标系
  • 2.激光雷达坐标系
  • 3.车体坐标系
  • 4.世界坐标系
    • 4.1.地理坐标系
    • 4.2.投影坐标系
      • 4.2.1.投影方式
      • 4.2.2.墨卡托(Mercator)投影
      • 4.2.3.高斯-克吕格(Gauss-Kruger)投影
      • 4.2.4.通用横轴墨卡托UTM(UniversalTransverseMercator)投影
    • 4.3.WGS84与UTM相互转换
  • 5.自动驾驶中的坐标定位

0.引言

总结于网络。重点在世界坐标系理解。
在这里插入图片描述
图自
在这里插入图片描述
图自

1.相机传感器坐标系

针孔模型:
在这里插入图片描述
在这里插入图片描述
图自

2.激光雷达坐标系

Velodyne生产的64线激光雷达HDL64:
64线激光雷达进行环境扫描过程:单帧扫描数据
在这里插入图片描述
64线激光雷达进行环境扫描过程:全周扫描数据
请添加图片描述
激光雷达坐标系统
在这里插入图片描述
在这里插入图片描述
此节来自

3.车体坐标系

车体坐标系用来描述车辆周围的物体和本车之间的相对位置关系。目前学术界和工业界有几种比较常用的车体坐标系定义方式。分别是ISO国际标准定义,SAE(Society of Automotive Engineers)汽车工程师协会定义,和基于惯性测量单元IMU的坐标定义。
在这里插入图片描述
在车辆动力学分析中,ISO定义的车体坐标系较为常见。SAE定义的车体坐标系与航空航天领域常用的机体坐标系相一致。基于IMU定义的车体坐标系,则在IMU的相关应用中较为常见。
在这里插入图片描述

此节来自

4.世界坐标系

在这里插入图片描述
地理坐标系统(英文简写GCS,Geographical Coordinate System)地理坐标系单位 度°分’秒"–>擅长定位

投影坐标系统(英文简写PCS,Projection Coordinate System)投影坐标系单位 米m–>擅长计算

4.1.地理坐标系

在这里插入图片描述
图自

某官网

大地坐标系与地理坐标系有何不同?

大地坐标系和地理坐标系都是经纬度表示的坐标系,本身并不包含投影信息,很多时候,这两种说法都是相同的。

在这里插入图片描述
蓝色:实际地球
红色:地心坐标系–>全球拟合表达
绿色:参心坐标系–>局部拟合表达(对于局部精度更高!)
在这里插入图片描述
大地坐标系(经纬度)

L:longitude -->经度
B:latitude -->纬度
H: altitude -->海拔height above sea level
0度经线:国际上将通过英国伦敦格林尼治天文台原址的那条经线称为0°经线,也叫本初子午线:分别向东向西从 0°到 180°

0度纬线:赤道,越往两极纬度越高。纬线在南北极缩成一个点,叫极点,也分别是90°纬线。

表述:东经、西经、南纬、北纬–>"E"东经、"W"西经、"N"北纬、"S"南纬–>平时一般使用东经和北纬(也即是以东经北纬方向为正)
在这里插入图片描述
在这里插入图片描述
WGS84坐标系,全称为世界大地测量系统(英语:World Geodetic System)。WGS包含一套地球的标准经纬坐标系、一个用于计算原始海拔数据的参考椭球体,和一套用以定义海平面高度的引力等势面数据。WGS-84坐标为GPS(经过差分后)测量出来的,属于大地坐标系。

4.2.投影坐标系

4.2.1.投影方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.2.墨卡托(Mercator)投影

在这里插入图片描述
墨卡托(Mercator)投影,是一种"等角正切圆柱投影”.墨卡托投影没有角度变形,由每一点向各方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两极逐渐增大。墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两极变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。

图自

4.2.3.高斯-克吕格(Gauss-Kruger)投影

1.高斯-克吕格投影
在这里插入图片描述
高斯-克吕格(Gauss-Kruger)投影简称“高斯投影”,又名"等角横切椭圆柱投影”,地球椭球面和平面间正形投影的一种。投影后,除中央子午线和赤道为直线外, 其他子午线均为对称于中央子午线的曲线。投影在长度和面积上变形很小,中央经线无变形,自中央经线向投影带边缘,变形逐渐增加(为什么会有变形,想象橘子皮剥开后压平),变形最大之处在投影带内赤道的两端。

2.高斯-克吕格投影分带
按照经线每隔多少度(三分度,六分度)进行划分:三分度:每隔三度一个中央经线(360/3 =120条中央子午线)
在这里插入图片描述
无带号坐标:
在这里插入图片描述
有带号坐标:
在这里插入图片描述

在这里插入图片描述三度带变形小,覆盖区域小

六度带变形大,覆盖区域大

4.2.4.通用横轴墨卡托UTM(UniversalTransverseMercator)投影

和高斯克吕格投影非常相似,只不过它并不是切于经线圈,而是穿地球而过。我们从侧面来看,高斯投影面和经线圈是完全重合的,但是UTM则不是:
在这里插入图片描述
UTM投影现在采用WGS84地理坐标系统进行投影。

UTM投影全称为“通用横轴墨卡托投影”,是等角横轴割圆柱投影(高斯-克吕格为等角横轴切圆柱投影),圆柱割地球于南纬80度、北纬84度两条等高圈,该投影将地球划分为60个投影带,每带经差为6度,已被许多国家作为地形图的数学基础。UTM投影与高斯投影的主要区别在南北格网线的比例系数上添加链接描述,高斯-克吕格投影的中央经线投影后保持长度不变,即比例系数为1,而UTM投影的比例系数为0.9996。UTM投影沿每一条南北格网线比例系数为常数,在东西方向则为变数,中心格网线的比例系数为0.9996,在南北纵行最宽部分的边缘上距离中心点大约 363公里,比例系数为 1.00158。

高斯-克吕格投影与UTM投影可近似采用 Xutm=0.9996 * X高斯,Yutm=0.9996 * Y高斯进行坐标转换。
UTM

坐标3度带与6度带的知识01

坐标3度带与6度带的知识02

中央子午线

6度带中央子午线计算公式:当地经度/6=N;中央子午线L=6 X N
当没有除尽,N有余数时,中央子午线L=6 X N - 3

3度带中央子午线计算公式:当地经度/3=N;中央子午线L=3 X N

顺带知识点:

全球分为二十四个时区,以能够被15整除的经度作为该区域的中央子午线,每一时区占经度15度。
在该时区中央子午线以东的地区,时间要加,以西的地区,时间要减,一度4分钟。中国共分五个时区:(1)中原时区:以东经120度为中央子午线。(2)陇蜀时区:以东经105度为中央子午线。(3)新藏时区:以东经90度为中央子午线。(4)昆仑时区:以东经75(82.5)度为中央子午线。(5)长白时区:以东经135(127.5)度为中央子午线。一个时区的“标准时”,只是一个大地区的统一时间,大家共同遵守的“人工”时间而已,并不是该时区内每个地点的“本地时间(LMT)”——真正的经度时。要用出生地的经度与出生大地区的标准时来加减,全球任何地点都用这个原则。例如:中原时区包括内蒙古、辽宁、河北、山西、山东、河南、安徽、江苏、湖北、湖南、江西、浙江、福建、广东、海南、香港、澳门、台湾。这个大地区当时钟敲定正午12点时,只有位于东经120度线上的地点才是12点,其它的地方是少于或多于12点。如香港位于东经11410分,比东经120度偏西550分,其真正经度时是113640秒。

在这里插入图片描述

4.3.WGS84与UTM相互转换

UTM与WGS84相互转换
在每个纵向区域内,横向墨卡托投影用于给出以米为单位的坐标(东距和北距)。

对于东距,原点定义为每个纵向带中央子午线以西 500,000 米的点,给出中央子午线的东距 500,000 米。
对于北半球的北向,原点被定义为赤道。
对于南半球的北向,原点定义为赤道以南 10,000,000 米的点。
在这里插入图片描述
X轴:指向东边
Y轴:指向北边
Z轴:指向天顶
将中央子午线指定为每个区域内坐标系的参考 y 轴(即东距 = 0)将导致中央子午线以西的点的东距值为负。为此,中央子午线被指定为 500000 米的任意值,从而避免任何负东坐标;位于其东面的点的东距值将大于 500000m,位于西面的点的值将小于 500000m。此分配会将原点放置在中央子午线以西 500000m 的区域外,因此原点称为假原点,东坐标称为假东。

赤道被指定为 UTM 北向坐标的水平参考轴,并为北半球的区域分配了 0 米北的值。为了避免负数,赤道被分配了一个10,000,000米南的假北距,用于参考南半球的北距坐标。(但是好像图中没有给出假北距)

UTM - 通用横轴墨卡托

UTM坐标和WGS84坐标

UTM的东北坐标只有两个数字,还需要zone的区间号才能转换为经纬度坐标因此准确的UTM坐标包括三个参数,区间+东北坐标。
GPS经纬度坐标转UTM坐标(c++)

void LonLat2UTM(double longitude, double latitude, double& UTME, double& UTMN)
{double lat = latitude;double lon = longitude;double kD2R = PI / 180.0;double ZoneNumber = floor((lon - 1.5) / 3.0) + 1;double L0 = ZoneNumber * 3.0;double a = 6378137.0;double F = 298.257223563;double f = 1 / F;double b = a * (1 - f);double ee = (a * a - b * b) / (a * a);double e2 = (a * a - b * b) / (b * b);double n = (a - b) / (a + b); double n2 = (n * n); double n3 = (n2 * n); double n4 = (n2 * n2); double n5 = (n4 * n);double al = (a + b) * (1 + n2 / 4 + n4 / 64) / 2.0;double bt = -3 * n / 2 + 9 * n3 / 16 - 3 * n5 / 32.0;double gm = 15 * n2 / 16 - 15 * n4 / 32;double dt = -35 * n3 / 48 + 105 * n5 / 256;double ep = 315 * n4 / 512;double B = lat * kD2R;double L = lon * kD2R;L0 = L0 * kD2R;double l = L - L0; double cl = (cos(B) * l); double cl2 = (cl * cl); double cl3 = (cl2 * cl); double cl4 = (cl2 * cl2); double cl5 = (cl4 * cl); double cl6 = (cl5 * cl); double cl7 = (cl6 * cl); double cl8 = (cl4 * cl4);double lB = al * (B + bt * sin(2 * B) + gm * sin(4 * B) + dt * sin(6 * B) + ep * sin(8 * B));double t = tan(B); double t2 = (t * t); double t4 = (t2 * t2); double t6 = (t4 * t2);double Nn = a / sqrt(1 - ee * sin(B) * sin(B));double yt = e2 * cos(B) * cos(B);double N = lB;N = N + t * Nn * cl2 / 2;N = N + t * Nn * cl4 * (5 - t2 + 9 * yt + 4 * yt * yt) / 24;N = N + t * Nn * cl6 * (61 - 58 * t2 + t4 + 270 * yt - 330 * t2 * yt) / 720;N = N + t * Nn * cl8 * (1385 - 3111 * t2 + 543 * t4 - t6) / 40320;double E = Nn * cl;E = E + Nn * cl3 * (1 - t2 + yt) / 6;E = E + Nn * cl5 * (5 - 18 * t2 + t4 + 14 * yt - 58 * t2 * yt) / 120;E = E + Nn * cl7 * (61 - 479 * t2 + 179 * t4 - t6) / 5040;E = E + 500000;N = 0.9996 * N;E = 0.9996 * (E - 500000.0) + 500000.0;UTME = E;UTMN = N;
}

GPS坐标转换:经纬度转UTM坐标(Matlab程序)
感悟:没有系统的学习,去网上查资料都是零碎的业余选手讲解,很难形成系统,所以有时间还是需要多读书,但是也不知道这个知识点在那本书中有详细的讲解,就像这篇博客下面的评论一样,想问问是那本书上的公式都没人理。
根据经纬度算UTM带号
UTM是由美国制定,因此起始分带并不在本初子午线,而是在180度,因而所有美国本土都处于0-30带内。UTM投影采用6度分带,从东经180度(或西经180度)开始,自西向东算起,因此1带的中央经线为-177(-180 -(-6)),而0度经线为30带和31带的分界,这两带的分界分别是-3和3度。纬度采用8度分带,从80S到84N共20个纬度带(X带多4度),分别用C到X的字母来表示。为了避免和数字混淆,I和O没有采用。UTM的“false easting”值为500km,而南半球UTM带的“false northing”为10000km

“WGS 1984”坐标系的墨卡托投影分度带(UTM ZONE)选择方法如下:
(1)北半球地区,选择最后字母为“N”的带;
(2)可根据公式计算,带数=(经度整数位/6)的整数部分+31

如:北京经度约116.4,
带数=116/6+31=50,选50N,即WGS 1984 UTM ZONE 50N

GPS定位技术

apollo 采用的UTM投影

- 根据经度求带号
namespace {
int GetLongZone(double longitude) {double longZone = 0.0;if (longitude < 0.0) {longZone = ((180.0 + longitude) / 6.0) + 1;} else {longZone = (longitude / 6.0) + 31;}return static_cast<int>(longZone);
}
} 

5.自动驾驶中的坐标定位

GPS/RTK获得经度lon、纬度lat、高程height、偏航角yaw、俯仰角pitch、横滚角roll 。

将lon,lat转化为utm坐标,(utm_x, utm_y, height)就可以作为GPS此时在世界坐标系下位置,再把yaw,pitch,roll转化为旋转矩阵,就可以得到GPS在世界坐标系下的姿态q,合起来就得到了GPS在世界坐标系下的位姿

通过标定可得到GPS到车身base_link坐标系的变换,这样就能得到当前车身base_link在世界坐标系下的位姿,再由标定可得到lidar到车身base_link坐标系的变换,这样就能把lidar坐标系下的点云变换到世界坐标系下,也就是高精地图中点云的坐标。

由于地图太大,需要对其进行方形网格分块进行存储和查询,每一块的id可通过resolution, col(utm_x/resolution), row(utm_y/resolution), utm_zone, utm_band进行编码。

同时,将GPS得到的经纬度转换为火星坐标系 (在中国大陆使用地图服务的话,我们可能会看到GCJ-02这个坐标系统,这又是什么东西呢?GCJ-02是国家测绘局(国测局,GCJ,这样的缩写比较罕见)02号标准的意思。它是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。由于最开始的时候一些国外地图服务商没搞明白这点,直接使用了GCJ-02加密的坐标来显示POI,从而把这些POI移到太平洋上去了,所以网友也戏称火星坐标。) ,就通过一些地理信息可视化库在地图上可视化轨迹,如通过轨迹坐标生成kml文件,就可以在谷歌地球上显示轨迹。

整篇文章转载自

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

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

相关文章

C-Lodop (Print)前端自定义打印控件

1.首先安装C-Lodop.exe软件&#xff0c;参考地址 Welcome to C-Lodop 2.软件下载地址 下载中心 - Lodop和C-Lodop官网主站 3.案列 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script srchttp://19…

Python-基础篇-类与对象/面向对象程序设计

文章目录 思维导图是何物类定义类&#x1f4da; class类的成员&#x1f4da;类的继承性&#x1f4da;封装性&#x1f4da;多态性 对象面向对象&#x1f4da;创建对象&#x1f4da;销毁对象&#x1f4da; 类和对象关系必背必记专业英语学习角 思维导图 是何物 类 “类”是物以…

SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 四、Database MetaData 与 S…

WebRTC视频会议/视频客服系统EasyRTC进入会议室密码验证的开发与实现

基于WebRTC技术的EasyRTC视频会议系统&#xff0c;建设目标是让用户随时随地、快捷方便地进行视频会议&#xff0c;并根据行业需求有针对性地提供多样化、个性化功能&#xff0c;该系统是覆盖全球的实时音视频开发平台&#xff0c;支持一对一、一对多等视频通话&#xff0c;极大…

上门服务系统|上门服务小程序|上门服务系统的发展趋势

在现代社会&#xff0c;人们的生活节奏越来越快&#xff0c;对于更加便捷的服务需求也随之增加。正是基于这一背景&#xff0c;上门服务系统应运而生&#xff0c;并且迅速发展壮大。那么&#xff0c;上门服务系统的发展趋势又是怎样的呢&#xff1f; 首先&#xff0c;上门服务系…

Spring MVC学习之——自定义日期转化器

日期转换器 在数据库中的日期数据是date类型&#xff0c;而如何我们想在页面自己添加数据&#xff0c;一般是使用年-月-日的形式&#xff0c;这种形式不仅date类型接收不到&#xff0c;而且传来的是String类型&#xff0c;此时&#xff0c;我们就可以自定义日期转换器来接收数…

k8s的坑,从这里开始

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 以前刚接触k8s时踩了不少坑&#xff0c;比如这些&#xff1a; 问题1 1、在master节点使用kubectl命令时&#xff0c;报错&…

如何打造企业内部流程系统?

企业的发展过程中&#xff0c;要不断收集员工的建议&#xff0c;以改进自身的流程并增强自身的竞争力。 除此之外&#xff0c;企业也希望员工能积极为公司提出更多的创意和提案&#xff0c;共同加强企业的建设。 那么针对这类场景&#xff0c;我们应该如何在企业内部推动呢&a…

任意文件读取漏洞

一.任意文件读取概述 ​ 一些网站的需求&#xff0c;可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过&#xff0c;就可以查看或下载任意文件这些文件可以是源代码文件&#xff0c;配置文件&#xff0c;敏感文件等等。 任意文件读取会造成&am…

redis数据安全(三)数据持久化 AOF

接上一篇RDB&#xff0c;本篇看下Redis数据持久化的第二种方式AOF。 目录 一、AOF原理 1、写入机制&#xff1a; 2、缓冲机制&#xff1a; 3、重写机制 &#xff1a; 4、运行流程 二、AOF文件配置 1、开启AOF&#xff1a; 2、自动触发AOF重写 3、重写规则&#xff1…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉&#xff0c;只留下面这些&#xff0c;新建一个空物体XR Mirror&#xff0c;将所有剩下的物体拖成XR …

Spring Boot自动配置原理

1.SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBo…

Redis内部数据结构skiplist详解

我们将大体分成三个部分进行介绍&#xff1a; 介绍经典的skiplist数据结构&#xff0c;并进行简单的算法分析。这一部分的介绍&#xff0c;与Redis没有直接关系。我会尝试尽量使用通俗易懂的语言进行描述。 讨论Redis里的skiplist的具体实现。为了支持sorted set本身的一些要求…

15.云原生之k8s容灾与恢复实战

云原生专栏大纲 文章目录 Velero与etcd介绍Velero与etcd备份应用场景Velero与etcd在k8s备份上的区别 Velero备份恢复流程备份工作流程Velero备份时&#xff0c;若k8s集群发送变化&#xff0c;会发发生情况&#xff1f;Velero 备份pv&#xff0c;pv中数据变化&#xff0c;会发发…

酷炫的公司年会抽奖(附源码)

源码&#xff1a;年会抽奖: 年会会议抽奖项目&#xff0c;支持照片上传 (gitee.com) 效果展示 年会抽奖演示 主界面 功能简介 支持excel复制导入成员名单 自定义奖项及人数 抽奖方式灵活 1. 可以一次一个 也可一次全部抽取完毕 2. 可选择已中奖人后续是否还可继续参与抽奖…

2024美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

Mybatis中#{}与${}的区别

sql注入 Sql注入指的是程序解析时会将你传入的参数作为原来SQL语句的一部分&#xff0c;打乱原来SQL的结构&#xff0c;而通常我们只是需要传入一个参数而已. 防止SQL注入&#xff0c;首先要对密码输入中的单引号进行过滤&#xff0c;再在后面加其它的逻辑判断&#xff0c;或者…

mac PyCharm 使用conda环境

1 使用conda创建虚拟环境 conda create -n test6 python3.9 -y conda activate test62 选择conda环境 本地 选择已经存在的conda环境 右下角会显示现在的环境。

用git bash调用md5sum进行批量MD5计算

对于非常大的文件或者很重要的文件&#xff0c;在不稳定的网络环境下&#xff0c;可能文件的某些字节会损坏。此时&#xff0c;对文件计算MD5即可以校验其完整性。比如本次的 OpenStreetMap 导出包&#xff0c;我的学弟反馈通过网盘下载无法解压&#xff0c;并建议我增加每个文…

Hardware-Aware-Transformers开源项目笔记

文章目录 Hardware-Aware-Transformers开源项目笔记开源项目背景知识nas进化算法进化算法代码示例 开源项目Evolutionary Search1 生成延迟的数据集2 训练延迟预测器3 使延时约束运行搜索算法4. 训练搜索得到的subTransformer5. 根据重训练后的submodel 得到BLEU精度值 代码结构…