无人驾驶中的坐标转换

news2024/9/23 5:27:01

无人驾驶中的坐标转换

image

无人车上拥有各种各样的传感器,每个传感器的安装位置和角度又不尽相同。对于传感器的提供商,开始并不知道传感器会以什么角度,安装在什么位置,因此只能根据传感器自身建立坐标系。无人驾驶系统是一个多传感器整合的系统,需要将不同位置的传感器数据统一到一个固定的坐标系——自车坐标系下,才能分析当前无人车所在的道路场景。


正文

无人车的自车坐标系

不同的无人驾驶团队对于坐标系的定义可能不同,但这并不影响开发,只要团队内部达成一致即可。

以百度Apollo提供的自车坐标系为例,自车坐标系的定义为:

z轴 – 通过车顶垂直于地面指向上方

y轴 – 在行驶的方向上指向车辆前方

x轴 – 自车面向前方时,指向车辆右侧

车辆坐标系的原点在车辆后轮轴的中心,如下图所示。

image

图片出处:https://github.com/ApolloAuto/apollo/blob/master/docs/specs/coordination_cn.md

传感器坐标系与自车坐标系的转换

对于无人车的传感器安装位置,业内大同小异,比如奥迪A8的传感器配置如下图所示

image

以安装在无人车左前方的角雷达(Corner radar)为例,进行后面的介绍,叫雷达的安装位置和坐标系如下图绿线所示。

image

角雷达检测到的障碍物如图中的绿点所示,绿点在雷达坐标系下的坐标为(x1,y1),为了便于理解暂不加入z方向的坐标。

绿点转换到自车坐标系下需要经过一定的数学运算。基本思路是这样的:

平移

先将角雷达坐标系的O点平移到与自车坐标系的O点重合,此时(x1,y1)需要减去两个坐标系在x和y方向的距离。如下图所示

image

旋转

在两个坐标系的O点重合后,将角雷达坐标系沿着z轴进行一定角度的旋转,这样(x1,y1)就转到了自车坐标系上。这个过程在数学上称为欧拉旋转。

坐标系的平移和旋转是两件相互独立的事情,先平移再旋转和先旋转再平移并不会影响最终的结果。

以上是感性的分析过程,下面我们将这整个过程在数学上实现。

平移

平移步骤根据传感器安装位置和自车后轴的距离进行计算,仅仅是XYZ三个方向加减运算。

旋转

绕轴旋转需要引入角度,不是简单的加减运算,所以我们通过图示来推导一下。

先将两个坐标系变换到正常的视角,如下图所示:

image

障碍物在角雷达坐标系下的坐标为(x1,y1),假设障碍物在自车坐标系下的坐标为(x0,y0),需要根据安装角度α(可测量),用x1,y1,α这三个已知量表示x0,y0,求得他们的数学关系。

通过做辅助线进行计算,如下图蓝线所示所示:

image

几何关系可用以下两个等式表示:

image

image

使用矩阵表示,可以简化表达,用一个等式代替两个等式,是这样的

image

由于这次旋转是绕z轴旋转,因此旋转前和旋转后的z值是保持不变的

image

将z方向的值也放到上面的等式中,即可得到

image

那就意味着,只要把角雷达采集到的障碍物坐标值与上面这个矩阵进行矩阵乘法运算,即可完成沿Z轴的旋转。在这里我们把这个矩阵叫做Z轴旋转矩阵RZ,那必然还有沿着X轴和Y轴的旋转矩阵RX和RY。

角雷达目标的坐标依次右乘这三个矩阵,就完成了沿着Z轴,Y轴,X轴的旋转,得到的结果就是自车坐标系下的坐标值了。即

image

再加上一个平移的矩阵,就能够完整描述整个坐标转换的关系了

image

不同的坐标系定义,会有不同的RX,RY和RZ,因此需要根据实际情况计算旋转矩阵和平移矩阵。

欧拉旋转所存在的问题

以上过程也称为欧拉旋转,但是欧拉旋转会有一个不可避免的问题——万向锁。欧拉旋转的过程中在某些特殊情况时,会导致少一个维度。万向锁通过文字解释起来会有点困难,可以看一个讲解万向锁的小视频进行了解。

image

03:52

视频出处:欧拉旋转

为了解决欧拉旋转所带来的万向锁问题,业界引入了四元数。四元数除了解决万向锁的问题外,还能在一定程度上简化计算。因而百度Apollo也选择了四元数作为各个传感器安装位置和角度的存储介质。有关四元数的定义和使用方法这里不做详细讨论,可参看Apollo的Calibration模块。


结语

实际参与到开发中你才会发现,自己在大学学习的高数和线性代数等都是很重要的数学工具,而不是仅仅用来考试的。

以上就是有关无人驾驶技术中传感器到车体坐标系的坐标转换原理及数学推导,该原理不仅用在无人车领域,同时在机器人、无人机、三维建模等领域也得到了广泛使用。

好了(o)/~,这篇分享就到这啦。如果对坐标转换还有什么疑问,可以在评论区与我互动。

如果你觉得我写的还不错,赞和关注比收藏更能体现文章的价值~

附赠自动驾驶学习资料和量产经验:链接

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

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

相关文章

Jenkins的快速入门

文章目录 一、Jenkins是什么?二、Jenkins安装和持续集成环境配置1.持续集成流程说明2.Gitlab代码托管服务器安装Gitlab简介:Gitlab安装Gitlab的使用切换中文添加组创建用户将用户添加到组创建项目idea中代码上传Gitlab 3.Jenkins持续集成环境服务器安装J…

牛客网python练习题库记录

python格式化输出 python 读入整数数字并且换行输出 python规范输出小数点后几位 afloat(input()) format_a{.2f}.format(a) print(format_a) 小数化整数 afloat(input()) bint(a) print(b) 为整数增加小数点 input_integer int(input()) float_number float(input…

快速上手 Elasticsearch:Docker Compose 部署详解

最近面试竞争日益激烈,Elasticsearch作为一款广泛应用的中间件,几乎成为面试中必考的知识点。最近,AIGC也备受关注,而好多的AI项目中也采用了Elasticsearch作为向量数据库,因此我们迫切希望学习Elasticsearch。对于学习…

【Linux】Centos7安装redis

目录 下载安装包安装1.解压2.环境安装3.查看redis的安装路径4.将之前redis的配置文件,复制到安装路径下(新建一个文件夹并复制)5.redis 设置默认后台启动,修改配置文件6.启动redis服务默认启动通过配置文件启动查看进程 7.开放637…

【Python小工具系列】使用 Python 循环批量打开网页链接

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

大数据Hadoop生态圈体系视频课程

课程介绍 熟悉大数据概念,明确大数据职位都有哪些;熟悉Hadoop生态系统都有哪些组件;学习Hadoop生态环境架构,了解分布式集群优势;动手操作Hbase的例子,成功部署伪分布式集群;动手Hadoop安装和配…

一文详解常见医学自然语言理解任务和算法

1. 引言 随着人工智能(AI)技术的不断发展,越来越多的研究者开始关注AI技术在医学健康领域的研究应用,其中加速AI技术产业落地的一个重要环节就是标准数据集和科学评估体系的建立。由中国中文信息学会医疗健康与生物信息处理专业委…

力扣---完全平方数---动态规划

思路: 还是比较好想的,g[i]定义为和为 i 的完全平方数的最少数量。那么递推关系式是g[i]min(g[i-1],g[i-4],g[i-9],...)1,数组初始化是g[0]0,g[1]1。注意这里要对g[0]初始化,(举个例子)因为在遍历到g[4]时&…

34双体系Java学习之对象的创建和引用

创建对象 ★小贴士 当声明一个引用变量时,要求Java虚拟机分配空间给引用变量,并将此变量命名为myCar。 此引用变量将永远被固定为Car类型。 当创建对象时,要求Java虚拟机分配堆空间给新建立的Car对象。 关键字 new 通常称为创建运算符&#x…

redis在springboot项目中的应用

一,将查询结果放到redis中作为缓存,减轻mysql的压力。 只有在数据量大的时候,查询速度慢的时候才有意义。 本次测试的数据量为百万级别。 测试代码: 功能为根据昵称进行模糊匹配。 GetMapping("/get-by-nick")public String get…

基于K-近邻的PLOSAR图像分类

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

无代码平台开发AI已经被实现了吗?

一、背景 无代码平台AI开发是一种新兴的开发方式,它允许非程序员或低代码开发者通过图形化界面、拖拽组件和预设模版等方式,无需编写传统的程序代码就能创建、训练和部署AI模型。这种方式极大地降低了AI技术的使用门槛,让更多不具备编程背景…

2024年第14届生物医学工程与技术国际会议(ICBET 2024)即将召开!

2024年第14届生物医学工程与技术国际会议(ICBET 2024)将于2024年6月14日至17日在韩国首尔举行。 会议旨在汇聚来自世界各地的研究人员、工程师、院士和行业专业人士,展示他们在生物医学工程与技术领域的最新研究成果和进展。 会议以“生物医学…

轻松应对城市内涝:慧天排水数字化分析平台,城市内涝模拟新利器

​在城市排水防涝规划过程中,水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面,内涝耦合模型提供了相应的模拟及分析工具: 1.1 丰富的数据处理功能,兼…

C语言中如何动态分配内存并进行操作

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程…

Redis分布式锁—SETNX+Lua脚本实现

使用redis实现分布式锁,就是利用redis中的setnx,如果key不存在则进行set操作返回1,key已经存在则直接返回0。 优点: 设置expiretime过期时间,可以避免程序宕机长期持有锁不释放。redis作为一个中间服务,所…

成都百洲文化传媒有限公司引领电商服务新潮流

在当今数字化时代,电商行业日新月异,竞争激烈。然而,在这个浪潮中,成都百洲文化传媒有限公司凭借其专业的电商服务,脱颖而出,成为了行业中的新领军者。今天,我们就来探讨一下这家公司如何在这个…

详解mysql安装与配置,及Mac中常见的安装问题

目录 1 数据库介绍 什么是数据库 数据库分类 2 MySQL服务器安装 2.1 Windows绿色安装 2.2 Windows中重装MySQL 3 Mac中常见的安装问题 4 客户端连接MySQL服务器 5 SQL分类 1 数据库介绍 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件…

面试算法-103-对链表进行插入排序

题目 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序…

下载的音频转换成mp3怎么转?4个好用简单的方法

不同音乐平台下载的音频格式文件不同,比如网易云的ncm格式、酷狗的kgm格式、B站的m4s格式、微信语音的silk格式、手机录音的amr、m4a格式,这些音频一旦脱离了原本的平台便无法播放,那么如何把下载的音频转换成兼容性高的MP3格式以便于我们在更…