【自动驾驶】29.坐标变换与坐标轴旋转
从一个坐标系的点变换到另一个坐标系的点,旋转矩阵的角度我们不能直接知道,但是可以通过两个坐标系之间的旋转来间接得到。
如:
世界坐标系有一个点P
,我们要描述它,就得给他一个坐标系原点,如果他放在车身坐标系
,坐标值为P1(2,-1,z)
,怎么知道该点P1
在另一个imu坐标系
中的坐标值呢?
这里说明一下,imu坐标系
和车身坐标系
原点重合,x轴和y轴方向不一样,z轴重合(方向都向上)。
先说结论:
由于车身坐标系
和imu坐标系
只是旋转90°的关系,所以可以很容易得到车身坐标系
的点坐标在imu坐标系
的点坐标为:
Ximu= -1 * Ycar
Yimu= Xcar
以下是俯视图,z轴
向上,在图中没画出来,用圆圈内一个实心点表示向上。
从图中可以看出,这个点P1
在对应的imu坐标系
中的坐标为P2(1,2,z)
。
当然,这是人眼看出来的,怎么用算法求解出来呢?
坐标变换
需要用到变换矩阵
,这个变换矩阵
在这里就是旋转矩阵
,需要知道旋转矩阵
的角度,就得借助坐标系的旋转了。
记住一句话:坐标系旋转是坐标变换的逆过程。
先解释这句话:坐标系旋转是坐标变换的逆过程。
即,如果从A坐标系绕Z轴逆时针旋转α°\alpha°α°,可以得到B坐标系;那么在A坐标系的某点PAP_APA,该点在B坐标系的点坐标为:在A坐标系下将PAP_APA点通过旋转矩阵(角度是绕Z轴逆时针旋转−α°-\alpha°−α°)计算得到,即 PB=T(−α)∗PA\color{red}P_B=T(-\alpha)*P_APB=T(−α)∗PA ,其中T(−α)T(-\alpha)T(−α)表示旋转矩阵逆时针旋转−α°-\alpha°−α°。
用实例来证明:
将车身坐标系
绕Z轴
逆时针旋转-90°
(即顺时针旋转90°
,会描述成逆时针旋转-90°
。),就得到了imu坐标系
。那么,车身坐标系
的点P1(2,-1,z)
,在imu坐标系
中坐标值是多少呢?
将车身坐标系
绕Z轴
右手法则正方向旋转-90°
,就得到了imu坐标系
。那么,车身坐标系
的点P1(2,-1,z)
,在imu坐标系
中坐标值是多少呢?
车身坐标系
的某点P1(2,-1,z)
,在对应的imu坐标系
中的坐标为P2(1,2,z)
,就有T*P1=P2
,可以解得旋转矩阵T
为(1)式:
我们知道,绕Z轴
旋转的旋转矩阵是:
由于(1) = (2)
,解出旋转角度 α=90°\color{red}\alpha=90°α=90°。坐标变换就是将该点P1
在自身车身坐标系
中右手定则正方向旋转90°
,得到了在imu坐标系
中的坐标值。
上面没考虑z轴
方向的值,因为z轴重合,z值一样。下面是考虑z轴方向的推导过程:
注意,这里由车身坐标系的
P1到imu坐标系
中P2点旋转矩阵
的旋转角度是右手法则绕Z轴正方向旋转90°
,但是从车身坐标系
旋转到imu坐标系
是绕Z轴右手法则正方向旋转-90°
。
已知车身坐标系
的点P1, 我们的目的是求P1在IMU坐标系
的坐标P2。
我们只能通过旋转矩阵
来计算出来P2,并不是描述坐标轴旋转
α°\color{red}\alpha°α°,因为你旋转 α°\color{red}\alpha°α°还是得通过旋转矩阵才能得到具体结果坐标。那么,前面计算得到的车辆坐标系下
的旋转矩阵是右手法则绕Z轴正方向旋转90°
,而从车辆坐标系
到imu坐标系
需要绕车辆坐标系
的Z轴右手法则正方向旋转-90°
,正好一正一负,即坐标系旋转是坐标变换的逆过程
。
对于坐标轴旋转需要旋转两次的情况,可以自己做一下测试,应该还是一样顺序,例如坐标轴先绕X轴旋转a°,再绕Z轴旋转b°,那么坐标变换就是旋转矩阵先绕X轴旋转-a°,再绕Z轴旋转-b°
,而不是旋转矩阵先绕Z轴旋转-b°,再绕X轴旋转-a°
。我这里没验证,按照我代码里面的应该是这样。
关于右手坐标系与右手法则:
如果不明白这两个概念,可以参考右手坐标系与右手定则。
右手坐标系
是用来指定X、Y、Z轴
的正方向,并不能随意指定X、Y、Z轴
的正方向;右手定则
是用来规定绕某轴旋转
的正方向。
右手法则的四指旋转方向为正
。
三维空间下,逆时针旋转
不一定是正方向,所以只能描述为右手定则的绕某轴正方向旋转:
比如你右手握成拳头,大拇指指向下,那么你四个手指的指向就是顺时针,即正方向,那么逆时针就不是正方向了,你就不能套用逆时针是正方向的理论。
所谓的
逆时针方向为正
,是由于人们平时的习惯,约定俗成的。如,打牌时是逆时针出牌、坐标系象限是逆时针命名一二三四象限,角度也是。我们平时在三维空间的旋转,也习惯称呼
顺时针旋转
与逆时针旋转
,是因为,右手定则的绕某轴旋转的旋转方向
不好描述(例如,你说,“右手握住Z轴,大拇指指向Z轴正方向,绕着四指指向的方向旋转30度”,这样描述太麻烦,不如一句,“绕Z轴逆(或顺)时针旋转30度”,描述的简洁清晰),所以使用顺时针逆时针旋转
来描述更容易让人明白是怎样旋转的,和顺时针逆时针旋转
的正反无关。
将两条结论列出来:
- 将
车身坐标系
绕Z轴
右手法则正方向旋转-90°
,就得到了imu坐标系
; - 车身坐标系点
P1
经过旋转矩阵T得到imu坐标系点P2
,这个变换矩阵T是将车身坐标系点P1
绕车身坐标系Z轴
右手法则正方向旋转90°
。
看明白没,一个是坐标系的坐标轴
绕Z轴右手法则正方向旋转-90°
得到另一个坐标系,一个是坐标点
绕Z轴右手法则正方向旋转90°
得到在另一个坐标系下对应的坐标值。
变换矩阵
是将某点在自己的坐标系
内通过变换矩阵
进行变换,但是得到的旋转后的坐标值是其他坐标系的坐标值。
需要注意,不要混淆的是,这里的坐标系原点和该坐标系某点P是相对不动的,如果是一个相对坐标系运动的物体,那就是自己在自己坐标系的坐标已经变了,此时如果需要预测运动后的坐标值,需要用到车的速度、角度等odometry的信息进行同步。和本文讨论的坐标变换不一样。
平移向量
对于坐标系平移,也是逆过程。
例如,两个坐标系A和坐标系B的各个轴方向一样,只是原点不在一起。
坐标系B的原点(0,0,0)在坐标系A中的坐标为(-4,-2,0),那么,坐标系A中的某点P(Px,Py,Pz)P(P_x,P_y,P_z)P(Px,Py,Pz)在坐标系B中的坐标为多少?
一画图就知道结果了,A坐标系沿X正向平移了-4,沿Y正向平移了-2,那么A中的某点P(Px,Py,Pz)P(P_x,P_y,P_z)P(Px,Py,Pz)在坐标系B中的坐标为(Px+4,Py+2,Pz)(P_x+4,P_y+2,P_z)(Px+4,Py+2,Pz) ,即相当于A坐标系移动到B坐标系的逆过程。
【自动驾驶】29.坐标变换与坐标轴旋转相关推荐
- 【自动驾驶】24.欧拉角、旋转向量、四元数、万向锁
原文链接:https://blog.csdn.net/shenxiaolu1984/article/details/50639298 原文链接:https://blog.csdn.net/lql071 ...
- 【自动驾驶】19.自动驾驶各个坐标系
WGS84 : 世界坐标系,即经纬高坐标系[经度(longitude),纬度(latitude)和高度(altitude)即LLA坐标系] UTM: 世界坐标系 ENU: 世界坐标系,东北天 ENU ...
- 一文看懂自动驾驶中的坐标变换
文章目录 自动驾驶中的坐标变换 自动驾驶中的坐标系 1. 相机坐标系 2. 激光雷达坐标系 3. 车体坐标系 4. 世界坐标系 坐标系变换 坐标系之间的关联 外参的使用 相机内参的使用 参考链接 自动 ...
- 自动驾驶环境感知——视觉传感器技术
文章目录 1. 摄像头的成像原理 1.1 单目视觉传感器的硬件结构 1.2 单目视觉的成像原理 –小孔成像模型 1.3 单目视觉的成像原理 – 像素坐标系 1.4 单目视觉三维坐标系转换 – 外参 1 ...
- IMU, 自动驾驶定位团队“小而美”的队员
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨11号线人 来源丨 十一号组织 自动驾驶定位团队中有位高权重的九代长老GNSS,有颜值担当的华山 ...
- 自动驾驶视觉融合-相机校准与激光点云投影
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:william 链接:https://zhuanlan.zhihu.com/p/13626375 ...
- 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...
- 【自动驾驶】2.车载以太网 - SOME/IP简介
车载以太网 - SOME/IP简介 SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的 ...
- Coursera自动驾驶课程第16讲:LIDAR Sensing
在第15讲<Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation> 我们学习了自动驾驶定位中常用的两种传感器:IMU(惯性 ...
最新文章
- 【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
- SAP-PM-预防性维护-01-概览
- cmake (0)简介
- 全球及中国木材加工行业运行状况与投资产值预测报告2022版
- Array.Resize(ref arry, size);
- Java ThreadLocal的使用
- 吴恩达入驻知乎首答:如何系统学习机器学习?
- linux自学(四)之开始centos学习,网络配置
- mysql+json插入_MySQL对JSON数据的增删改查
- linux sed 多个条件,sed多条件匹配
- 耳机降噪功能(ANC、ENC、CVC、DSP)
- blos硬盘启动台式计算机,最新戴尔台式机bios设置硬盘启动图解
- U盘没有文件但空间被占用解决办法(U盘文件夹隐藏恢复)
- 使用QtCharts报错
- 山科OJ:Problem C: Lemon
- Elephant Swap的LaaS方案优势分析,致eToken表现强势
- WIN10 + Ubuntu18.04 双系统安装教程(新机)
- 输入框技巧 禁用输入法 禁用提示 提示归类
- 统计学(五):非参数检验
- 她让我把电脑带回家。 -您是如何开始计算机和编程的?