如果对于某些线性代数的知识不太牢固,可以看一下我的另一篇博客,写了一些基础知识并推荐了一些视频。
旋转矩阵 单元所需的线代基础知识https://blog.youkuaiyun.com/Johaden/article/details/141023668
一、旋转矩阵
1.点、向量、坐标系
在数学中,特别是在线性代数领域,一个三维空间中的坐标可以被视为一个向量与线性空间基的乘积,这是因为线性空间的基提供了一种方式来表示该空间中的所有向量。为了理解这一点,首先需要明确什么是线性空间的基。
线性空间的基是一组向量,这组向量满足两个条件:第一,它们线性无关,即没有向量可以通过其他向量的线性组合来表示;第二,它们能够生成整个线性空间(向量的数量不能少于空间的维数、秩与维数相等),即线性空间中的任何向量都可以通过这组基向量的线性组合来唯一表示。在三维空间中,基通常由三个线性无关的向量组成,这三个向量分别对应于空间中的三个坐标轴。若三个向量两两垂直就是一个标准正交基(下面的就是),组成如下的矩阵为正交矩阵(A’A=E)(两个基矩阵各自是正交矩阵,相乘后仍是正交矩阵)。
已知正交矩阵后,可以推出转置=逆,即。
坐标的取值与向量本身有关也与坐标系(线性空间的基)选取有关。
机器人中有很多种坐标系:①世界系/惯性系(World) ②机体系(body) ③传感器参考系(Sensor)。不同坐标系存在变换关系。传感器捕获的数据都在Sensor系里,但是分析位姿时不关注传感器的移动,更多关注机体的移动,所以需要进行Sensor=>body=>world的变换。第一个变换我们已知(机器人在制作过程中就已知了,人为给定。以及制作时传感器相对于机体的位置也已知,可以进行转换)。第二个translate需要估计,需要在运动过程中估计机器人在世界的位置和姿态(SLAM本质)。
运算:
内积定义:
外积定义(在几何代数中,“∧”符号表示把向量变为矩阵,形式为反对称矩阵):
计算用到了行列式的拆分知识(注意,i,j,k都为单位向量,模为1)。写成相乘的格式利于后面的编程和推导。
几何意义:方向满足右手定则,大小为,为平行四边形的有向面积。
坐标:
当我们说一个三维空间中的坐标是一个向量乘以线性空间的基时,实际上是在说任何一个点(或向量)在这个三维空间中的位置都可以通过其在三个基向量方向上的分量(即坐标)来唯一确定。换句话说,如果我们用v表示一个向量,用,
,
表示三维空间的一组基,那么该向量可以表示为:
其中,x,y,z是该向量相对于基,
,
的坐标。这种表示方法说明了向量与基之间的关系,即向量可以看作是其坐标与基向量的线性组合。
2.位姿变换和旋转矩阵
(1)位姿变换:
旋转变换
坐标系(e1,e2,e3)发生一次旋转变为(e1',e2',e3')
对于一个固定向量a,它的坐标如何变化?
坐标关系:
左乘得:
我们把这样一个3×3的矩阵R称为旋转矩阵。
旋转矩阵有以下两个特性:①正交矩阵 ②行列式为+1(充要)
。 n为3时为三维空间的旋转,特殊正交群可以看作一个集合。
同理,(R为正交矩阵,转置就是逆,出于复杂性考虑,常用转置)
示例,从1位置以为旋转矩阵旋转到2位置(R12表示把姿态由2系对齐到1系的旋转矩阵 ):
进一步,可以有三个坐标系的递推:
欧式变换
(
表示把2系的坐标原点对齐到1系的平移量)
在多层坐标系的变换时,不得不写成
直观来看就是:①旋转 ②平移
3.变换矩阵与齐次坐标
中间红框的矩阵称为变换矩阵T。记为齐次坐标(四维)。
这样变换利于连续坐标系转换,如:
特殊欧式群(旋转+平移):
此处不是简单的取反,需要排除旋转的影响,因为是先旋转后平移,平移量受旋转量影响。 类比y=kx+b,左右移动时不是直接调整b的值,而是调整y=k(x+b/k)中b/k的值。
若世界坐标系为,机器人坐标系为
,一个点的世界坐标为
,机器人坐标系下为
,那么满足:
(注意T的下标与R的下标一致,“就近原则”)
其中的意思就是从w到R进行平移,如果把
后面乘一个0向量(与T一样,三个0一个1),结果就是矩阵的平移t(很容易,直接稍微算一下,把R全消掉了,只剩t了),
是世界坐标系原点在机器人坐标系下的表示,反之,可以自己思考一下。
4.旋转向量(角轴)
旋转向量由一个方向向量和一个标量组成,其中方向向量定义了旋转的轴,而标量则定义了绕该轴旋转的角度。旋转向量的长度等于旋转角度的弧度值。
旋转向量可以用一个三维向量 来表示,其中 θx, θy, 和 θz 分别是绕 x, y, z 轴旋转的弧度数。但是,实际上旋转向量的表示是规范化的,即它的方向表示旋转轴的方向,而它的模长表示旋转角度。所以一个旋转向量 r 可以表示为:
其中,θ 是旋转角度(以弧度为单位), 是单位向量,指向旋转轴的方向。
转化:
旋转向量到旋转矩阵的过程由罗德里格斯公式(Rodrigues’s Formula )表明
符号 ∧ 是向量到反对称的转换符
旋转矩阵到旋转向量的转换:
在三维空间中,任何非平凡的旋转矩阵 R(即不是恒等矩阵的旋转)都有一个特殊的属性:存在至少一个方向(向量),当这个向量被 R 作用时,它仅仅可能改变长度,但不会改变方向。这个方向就是旋转轴,而旋转轴上的向量是旋转矩阵的一个特征向量,对应于特征值 1。
二、实践部分-EIGEN
1.安装eigen(通过eigen在C++中进行矩阵运算)
eigen安装在如下图路径中(eigen的头文件库)
2. E