前言

这篇博客主要是 之前总是被坐标变换的 各种说法弄糊涂,这篇博客就不管别人怎么定义了
通过模拟场景 定义一个自己的说法,爱谁谁

首先坐标变换的数学计算实质就是 矩阵的计算,这里先安利一个 矩阵在线计算的网站 不用手动算了
矩阵在线计算的网站
这里面有很多的 矩阵的计算的在线求解 挺不错的
包含:矩阵乘法、线性方程组、矩阵的逆矩阵、行列式的值、特征值和特征向量、Cholesky分解、上三角下三角分解、奇异值分解(SVD)、QR分解、矩阵的秩、矩阵范数、最小二乘解、矩阵条件数

坐标变换说白了就是想把一个坐标系下的点,转换到另一个坐标系下,利用的是坐标系变换,计算很简单,就是点的坐标然后乘坐标系的变换矩阵就行了。但是谁在左边谁在右边?哪个坐标系到哪个坐标系呢? 来看下面场景

场景

定义而一个相当简单的场景。

在本地坐标系(frame_local)的x轴上有两个坐标系1_frame和2_frame
frame_1在x轴的1上面,frame_2在x轴的3上面。

像下面的图
在这里插入图片描述

注意从这里往下就是 我自己定义的叫法了

frame_1 相对于 frame_local 的坐标变换 也 叫做 frame_1到frame_local 的坐标变换
frame_2 相对于 frame_local 的坐标变换 也 叫做 frame_2到frame_local 的坐标变换

那么frame_1到frame_local 的坐标变换
在这里插入图片描述

frame_2到frame_local 的坐标变换
在这里插入图片描述

我们知道 两个坐标系直接求坐标变换就是一个矩阵的逆乘一个矩阵
那么我们先定义一个 frame_1 和 frame_2 直接有个变换矩阵 R ,具体谁到谁,点怎么计算先别管
这个R的计算 就是
在这里插入图片描述

通过上面的在线矩阵计算的网站 得的R的矩阵为:

在这里插入图片描述

这个R就是一个坐标变换矩阵,具体怎么个叫法,继续

frame_local 坐标系下有个点 point 在x轴的6上,即point的坐标为(6,0,0)
那么这个point 在 frame_1 坐标系下的坐标则为(5,0,0)
那么这个point 在 frame_2 坐标系下的坐标则为(3,0,0)

进行坐标变换的时候要把点的坐标进行转置,然后扩1维 增加一个1
我们把point 在 frame_1下的点叫point_frame_1
我们把point 在 frame_1下的点叫point_frame_2
则有:

在这里插入图片描述

经过验证呢:

在这里插入图片描述

也就是说 :
frame_2的点左乘**R,就是frame_1**下的点

那么我们把R写成这样

在这里插入图片描述
然后呢我们把 R2->1 叫做 坐标系 frame_2 到 坐标系 frame_1 的坐标变换

总结

OK了,场景举完了,下面开始自己叫法的总结

坐标系 frame_1 到frame_local 的坐标变换 R1
坐标系 frame_2 到frame_local 的坐标变换 R2

那么
坐标系 frame_2 到 坐标系 frame_1 的坐标变换 为 R21 = R1(逆)*R2
并且 P1=R21 *P2

再深刻理解下
在最一开始的定义
坐标系 frame_1 到frame_local 的坐标变换 R1 的这个 R1按上面定义应该写成R1-local或者R10
并且
R10=R0(逆)_R1
并且
P0=R10 _P1

那R0是什么东西呢,就是frame_local 相对于源点的坐标变换,矩阵就是个单位矩阵

验证下对吗?

行了,以后不管别人怎么对矩阵变换做的定义,在我心中就是上面的定义了。呵呵

举个实际应用的例子

以上是通过简单的方式推导出了自己定义的叫法

下面通过上面的自己定义叫法,具有实际应用的例子

在lidar传感器建图的时候,里程计(odm)和lidar传感器的安装有一个偏差,那么lidar的点怎么转到local坐标系下呢?

Plocal = Rlidar->local*Plidar
但是Rlidar->local这玩意没法得到啊 ,在odom和lidar完全重合的时候,可以把odom的数据当做lidar的位姿。但是这里有个偏差。

也就是说lidar和odom有个旋转矩阵,这个矩阵可以通过测量或者标定得到。那么就有了下面
Podom=Rlidar->odom_Plidar
Plocal = Rodom->local_Podom

两个方程联立下则有了

Plocal= Rodom->local_Rlidar->odom_Plidar

其中
Rodom->local 可以由里程计的位姿数据构成
Rlidar->odom 就是lidar和里程计的外参矩阵 一般标定得到