梳理自动驾驶中的各类坐标系

news2024/11/27 14:35:49

目录

自动驾驶中的坐标系定义

关于坐标系的定义

几大常用坐标系

世界坐标系

自车坐标系

传感器坐标系

激光雷达坐标系

相机坐标系

如何理解坐标转换

机器人基础中的坐标转换概念

左乘右乘的概念

对左乘右乘的理解

再谈自动驾驶中的坐标转换

本节参考文献


自动驾驶中的坐标系定义

关于坐标系的定义

左手坐标系(源自网络侵删)
右手坐标系(源自网络侵删)

        左手坐标系:以左手坐标系图示为例,通常拇指指向为X轴正方向,食指指向为Y轴正方向,中指指向为Z轴正方向;沿某坐标轴负方向朝向看去的逆时针旋转方向为正方向。右手坐标系:以右手坐标系图示为例,通常拇指指向为X轴正方向,食指指向为Y轴正方向,中指指向为Z轴正方向;沿某坐标轴负方向朝向看去的顺时针旋转方向为正方向。

几大常用坐标系

世界坐标系

        世界坐标系,通常指的WGS-84,也就是经纬高(经度、纬度、高度)坐标系,一般在规划控制等模块用处比较多,其定义如下。

WGS-84坐标系的X轴指向BIH(国际时间服务机构)1984.0定义的零子午面(Greenwich)和协议地球极(CTP)赤道的交点。Z轴指向CTP方向。Y轴与X、Z轴构成右手坐标系。

自车坐标系

车辆坐标系(源自网络,侵删)

        在常见的自动驾驶数据集中,自车坐标系通常遵循右手坐标系,坐标原点位于车辆后方车轴的中心地平面上。定义车辆前进的方向为X轴正方向,车辆左侧方向指向Y轴正方向,自地平面指向天空方向为Z轴正方向。这种指向又被形象的称为前左天坐标系。注意,对于不同的测试车辆可能具体的坐标定义不一致。

源自网络
源自网络
源自网络

        为了形象方便描述车辆位姿引入了欧拉角,如上图所示为欧拉角的物理意义的形象表达。在自动驾驶中通常定义:Roll为沿X轴的逆时针转动,即车辆翻滚角;Pitch为沿Y轴的逆时针转动,即车辆俯仰角;Yaw为沿Z轴的逆时针转动,为车辆偏航角。

传感器坐标系

        如下图所示,自动驾驶车辆可能包含多类传感设备,例如camera、lidar、radar等。每类传感器测量的数据都是直接在自身的传感器坐标系中进行描述的。以nuScence数据集内的激光雷达传感器、相机为例浅析传感器坐标系的定义,其他传感器不做赘述。

以nuScenes数据集为例
激光雷达坐标系

        如图所示的nuScenes数据集针对激光雷达坐标系的定义(右手坐标系):坐标原点为激光雷达传感器中心,车辆右侧指向坐标系X轴正方向,前进方向指向坐标系Y轴正方向。

相机坐标系

        如图所示的nuScenes数据集针对前视Cmera坐标系的定义(左手坐标系):坐标原点为前视摄像头为中心,车辆右侧指向坐标系X轴正方向,前进方向指向坐标系Z轴正方向。

如何理解坐标转换

机器人基础中的坐标转换概念

左乘右乘的概念

        将尽六、七年前的机器人基础的相关知识,已经忘记的差不多了,便也不从基础的理论推导讲起,直接那大家的说法或者结论,就是:左乘,是指的旋转运动针对固定的坐标系而言;而右乘,是指旋转的运动针对相对的坐标系而言(这里的相对坐标系的概念类似于我们之前讲的欧拉角)。

对左乘右乘的理解

        换句话说,左乘可以认为始终绕着世界坐标系转,右乘是绕着最新的自身坐标系转。比如我下面画的插图所示,上方为左乘(实际是绕世界坐标系Y轴旋转),下方为右乘。

        上面所说,都是在针对坐标系或者说位姿进行变换,实际上我们在做各种变换的另外一各直观的目的就是:对于世界坐标系中的绝对的一点的坐标,能够在不同的坐标系中进行坐标表达,毕竟那个点就是实实在在存在的嘛。

       

        如上图所示,A点不变,坐标系OXYZ旋转一定角度得到OXYZ新坐标系下,OXYZ坐标系下的P'来自于原P点,因此存在图中的变换公式。

再谈自动驾驶中的坐标转换

        基于上面的分析,例如对于相机坐标系和激光雷达坐标系的变换。例如从camera坐标系到lidar坐标系的变换,实际就是原坐标系左乘一个世界坐标系表示的变换矩阵;又如,从camera坐标系的坐标系1转至camera坐标系2,自然就是右乘自身变换矩阵。

本节参考文献

CSDN_关于旋转矩阵的左乘与右乘问题

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

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

相关文章

map和set的例题

随机链表的复制 138. 随机链表的复制 - 力扣(LeetCode) 我们为什么要拷贝原链表的结点一个个链接到原链表结点的后面? 其实就建立了原链表结点与拷贝链表每个结点的一种映射关系, 方便我们设置拷贝结点的random域。 那我们现在C有了map: …

WPF中的Binding的常见知识点与技巧

完全来源于十月的寒流,感谢大佬讲解 在XAML中,可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性: 属性:可以绑定到对象的属性,例如控件的Text、Visibility、IsEnabled等属性。 集合&am…

爱上C语言:函数递归,青蛙跳台阶图文详解

🚀 作者:阿辉不一般 🚀 你说呢:生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请…

Python基础入门例程42-NP42 公式计算器(运算符)

最近的博文: Python基础入门例程41-NP41 二进制位运算(运算符)-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员(运算符)-CSDN博客 Python基础入门例程39-NP39 字符串之间的比较(运算符)-C…

Zeus IoT : 基于 SpringBoot 的分布式开源物联网大数据平台

Zeus IoT 是一个集设备数据采集、存储、分析、观测为一体的开源物联网平台,全球首创基于 Zabbix 的物联网分布式数据采集架构,具备超百万级物联网设备的并发监控能力,真正具备工业级性能与稳定性的开源物联网大数据中台。 Zeus IoT 致力于让设…

apachesolr中简单使用

core使用 首先点击add core 可以看到报错solrconfig.xml不在new_core目录下,new_core是我们点击后自动创建的 那么我们将D:\solr2\solr-9.3.0\solr-9.3.0\server\solr\configsets下的任何一个目录下的conf拷贝到new_core过去 这里是使用_default下的conf目录拷贝…

Android Studio 常见问题

一、Android Studio 创建项目后Gradle(构建)项目很慢问题解决 在使用Android Studio创建项目时,会自动从网上下载相关依赖。由于是访问国外服务器,会出现构建项目时下载依赖很慢的问题。为了解决该问题,需要在settings.gradle(或者settings.…

Netty第二部

一、EventLoop和EventLoopGroup 一个Channel可以近似的理解成一个Socket的包装,EventLoop管理这些Channel的 1、EventLoop EventLoop作为线程,具体Channel由EventLoop管理,在AbstractChannel类的register()方法可以体现 Override public …

MySQL索引优化与查询优化

1. 索引失效案例 MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了访问高效数据的方法,并且加快查询的速度,因此索引对查询的速度有着至关重要的影响。 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速…

C语言查看各数据类型所占大小

编译器&#xff1a;VC2010 #include<stdio.h> int main() {printf("%d\n",sizeof(char));printf("%d\n",sizeof(short));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof(long long))…

ActiveMq学习⑥__实战篇(Spring 、SpringBoot)

spring 管理ActiveMQ Maven修改&#xff0c;需要添加Spring 支持Jms的pom 包Spring配置文件队列主题在Spring里面实现消费不启动&#xff0c;直接通过配置监听完成 依赖引入 <!--spring整合mq--><!--activemq对JMS的支持&#xff0c;整合SPringle和Activemq-->&l…

圣杯布局/双飞翼布局/flex/grid等,实现CSS三栏自适应布局的几种方法

简介 三栏布局是网页设计中常用的布局&#xff0c;即网页中的内容被分为三块&#xff1a;左侧/中间/右侧。其中两侧部分宽度固定&#xff0c;中间部分宽度自适应的根据浏览器宽度撑满剩余空间。而三栏布局也有很多变形&#xff0c;比如两栏或者N栏布局&#xff0c;上中下三栏布…

【漏洞复现】S2-045 Remote Code Execution(CVE-2017-5638)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacs3、漏洞验证 1.5、修复建议 说明内容漏洞编号CVE-2017-5638漏洞名称S2-045 远程代码执行漏…

51单片机-中断

文章目录 前言 前言 #include <reg52.h> #include <intrins.h>sbit key_s2P3^0; sbit flagP3^7;void delay(unsigned int z){unsigned int x,y;for(xz;x>0;x--)for(y114;y>0;y--); }void int_init(){EA1;EX11;IT11;}void main(){int_init();while(1){if (key…

【产品资料】产品经理面试问题(三)

今天和大家免费分享产品经理常见的面试题目&#xff0c;含回答思路分析和回答事例。 【资源下载】 这个资源可以在Axure高保真原型哦小程序里免费下载 打开下方小程序后&#xff0c;搜索产品经理面试题目&#xff0c;获取下载地址 更多原型模板、视频教程、产品文档、定制服…

c++11中的线程库和包装器

c11 1. 线程库1.1 线程库1.2 锁mutex 2. 包装器2.1 funciton2.2 bind 1. 线程库 1.1 线程库 C11中的线程库提供了一种方便的方式来创建和管理线程。其中&#xff0c;std::thread是一个重要的类&#xff0c;它允许我们创建新线程并控制它们的执行。以下是std::thread的一些重要…

磁盘物理结构介绍(磁头,扇区),chs寻址,如何读写,磁盘io消耗时间;线性抽象结构,lba寻址,分区引入

目录 磁盘文件 引入 看待角度 磁盘 介绍 物理结构 俯视图 立体图 磁头 扇区 如何找到一个扇区 -- CHS寻址 如何读写 磁盘io消耗时间 抽象结构 -- 线性 引入 介绍 -- LBA寻址 分区 引入 介绍 磁盘文件 引入 文件分为两种 被打开的文件(主要讨论与进程之间的…

python基础速通

1. 梳理&#xff1a;目前学习了哪几种数据类型&#xff0c; 每一个数据类型定义一个变量&#xff0c;并输出内容以及类型 # 数据类型 # 整型 int_data 1 print(int_data, type(int_data)) # 浮点型 float_data 1.2 print((float_data, type(float_data))) # 复数 complex_da…

计算机毕设 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…

Monarch Mixer:一种性能比Transformer更强的网络架构

六年前&#xff0c;谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构&#xff0c;Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构&#xff0c;并且在不同的应用程序中取得了令人印象深刻的成功…