旋转矩阵乘法,自动驾驶中的点及坐标系变换推导

目录

[1. 矩阵乘法的内项相消](#1. 矩阵乘法的内项相消)

[2. 左右乘,内外旋与动静坐标系](#2. 左右乘,内外旋与动静坐标系)

[3. 点变换](#3. 点变换)

[3.1 点旋转后的点坐标表示](#3.1 点旋转后的点坐标表示)

[3.2 坐标系旋转后的点坐标表示](#3.2 坐标系旋转后的点坐标表示)

[4. 坐标变换的实质](#4. 坐标变换的实质)


1. 矩阵乘法的内项相消

关于旋转变换,离不开矩阵的乘法,而矩阵乘法的物理意义和本身数学上矩阵乘法的内向相消决定了乘法的顺序,确定内项相消的规则,是对后面矩阵乘法的顺序理解的重要基础。

首先确定旋转矩阵的写法, 如果理解成旋转,则表示A坐标系到B坐标系的旋转变换;如果理解成姿态,则表示B坐标系在A坐标系中的姿态(如果有位置坐标,可以理解成位姿)注意A,B的顺序非常的重要,在自动驾驶中,可以分别表示世界坐标系,IMU坐标系等。

按照如上旋转矩阵的定义,那么内项相消的公式就可以写成

2. 左右乘,内外旋与动静坐标系

关于左右乘,内外旋有如下结论(记住即可):

相对固定(静)坐标系的旋转 = 外旋 = 左乘, 如绕Z-Y-X固定轴旋转,旋转矩阵的乘法应写为:

相对自身(动)坐标系的旋转 = 内旋 = 右乘,如绕Z-Y-X自身轴旋转,旋转矩阵的乘法应写为:

3. 点变换

3.1 点旋转后的点坐标表示

旋转矩阵的乘法往往会和某个点进行,这是最直观的一种矩阵乘法。通常我们会理解成这个点代表的向量,经过了旋转变换的,得到一个新的向量(点)。如下图所示:

CA(1,1)向量经过逆时针旋转90°,得到CB向量(-1,1),向量的旋转矩阵不存在坐标系的变换,不用在意上面的定义,直接用点左乘具体的旋转矩阵即可。逆时针旋转90°的旋转矩阵为:

CB = R * CA

3.2 坐标系旋转后的点坐标表示

这个比较重要,也是理解本篇的重点。 坐标系发生变化后,点即使没有发生位置的改变,其坐标也会发生变化。这种在自动驾驶中很常见,一个点在传感器中有一个坐标,想求它在世界坐标系中的坐标。就是此类应用

如下图所示:

在CBD坐标系中(以坐标系G代表),其中BC为x轴,BD为y轴,A点的坐标为(2,1)

我们将原坐标系逆时针旋转90°,得到DBE坐标,其中BD为x轴,BE为y轴,在DBE坐标系中(以坐标系G'),A点在G'坐标系中的坐标表示为A'(1,-2)。

这时候逆时针旋转90°表示从坐标系G到坐标系G'的变换关系,用1中的定义表示为。通过计算发现即如果是坐标发生了变化,不能直接左乘坐标系之间的旋转关系,要左乘旋转关系的逆。

4. 坐标变换的实质

坐标变换的实质就是投影

单位向量在坐标系中的投影就是该向量与坐标系各轴夹角的余弦值,这个结论我们并不陌生。坐标系之间的旋转矩阵,其实就是将G'的三个轴单位化之后投影到G的三个轴上,即

每一行表示目标坐标系在三个轴在原坐标系某个轴的投影。

相关推荐
测试_AI_一辰7 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
lucas_AI7 小时前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
LuminousCPP7 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil2087 小时前
leetcode 三数之和
数据结构·算法·leetcode
小小龙学IT8 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
eBest数字化转型方案8 小时前
从工程视角拆解冰柜资产管理:拍照识别 pipeline、纯净度算法与 IoT 选型踩坑
人工智能·物联网·算法
Interview Aid1128 小时前
Roblox OA 面经|小游戏+编程双修,Coding 两题满分通过
算法
闲研随记8 小时前
【文献阅读 ICLR 2026】RL算法:Co-Rewarding
算法
青山木8 小时前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年9 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法