一.前言
这一节主要讲姿态的不同表示,说实话,这一节需要很强的数学功底,我跟着小鱼老师的文档学习理论知识到后面时头也发疼,这里我就把我理解的知识记录笔记在下面,想要更加深入了解的伙伴请自行学习。话不多说,马上开始!
二.ros2学习
前6小节内容可以订阅往期博客。
7.姿态的多种表示
我们一共接触了三种姿态的表示方式:
- 旋转矩阵-在位姿描述一节中
- 坐标轴旋转-绕xyz轴旋转不同的角度(欧拉角)
- 四元数-ROS2的TF2中的姿态描述
常用的坐标描述分为三类,共五种:
- 旋转矩阵-
旋转矩阵
- 坐标轴旋转-
固定轴欧拉角
,非固定轴欧拉角
- 任意轴旋转-
等效轴角
,四元数
常用的坐标转换包括:
固定角
与四元数
互转固定角
与旋转矩阵
互转四元数
与旋转矩阵
互转
7.1 旋转矩阵
旋转矩阵采用的是旋转后的坐标系
三个轴分别与原坐标系
三个轴的夹角余弦值共九个数字组成的3*3矩阵。
旋转矩阵一般记作R
若两个坐标系姿态相同,其旋转矩阵为单位矩阵。
7.2 欧拉角-绕坐标轴的旋转
旋转矩阵是一个冗余的(九个值之间存在约束关系),可以只需要三个参数来表示的矩阵。
绕三个轴旋转的三个θ,按照特定的顺序将对应的旋转矩阵乘起来就可以确定一个旋转矩阵。
但需要注意的是,矩阵的乘法不具备交换性,所以旋转顺序不同会造成不同的结果。
所以我们对旋转顺序做排列组合,可以得到12种旋转顺序:
xyz
,xyx
,xzy
xzx
,yzx
,yzy
yxz
,yxy
,zxy
zxz
,zyx
,zyz
除了要考虑旋转时所绕轴的顺序,还要考虑参考坐标系(坐标轴)的不同。
7.2.1 参考固定的坐标系
假设坐标系B与坐标系A初始姿态相同
- 坐标系{B}绕坐标系A的x轴
Ax
旋转α - 接着坐标系{B}绕着A的y轴
Ay
旋转β - 接着绕
Az
旋转γ
上述三次旋转,都是以A坐标系的xyz轴为参考坐标系进行旋转,该旋转方式为固定旋转轴的旋转,通常称之为固定角欧拉角或固定轴旋转。
7.2.2 考自身坐标系
我们也可以不沿着坐标系A的各轴旋转,而是绕旋转之后B的某一轴再次旋转,我们称之为非固定旋转轴的欧拉角。
无论是参考自身坐标系还是参考固定的坐标系,都有12种旋转方式,所以欧拉角有12*2=24种旋转方式,后面的计算中我们也将直观的感受到24种旋转方式的不同。
7.2.3 固定转轴欧拉角 转 旋转矩阵
结果:
结果是将绕Z轴的旋转矩阵乘绕X轴的旋转矩阵(具体怎么得来的我也不太清楚,可能是根据左行右列原则,先转的肯定先乘,所以我们先让向量v乘上Rx(45),再让其乘上Rz(90),在原有向量上做行变换)
所以我们可以得到,绕固定轴XYZ旋转的欧拉角转旋转矩阵方法:
7.2.4 非固定旋转轴的欧拉角
非固定旋转轴,即每次旋转是绕着自身的坐标轴进行旋转
每次旋转都是绕着自身进行的,我们可以将每次的旋转进行拆解
旋转矩阵转欧拉角的方法需要使用双参变量的反正切函数,我们后面在程序当中直接调用对应函数即可实现,这里对原理就不再进行推导了
7.3 轴角
旋转矩阵转轴角需要根据情况讨论,该部分转换我们直接调用相应函数实现,这里对其原理不再叙述,感兴趣的同学可以参考:https://en.wikipedia.org/wiki/Rotation_matrix#Axis_of_a_rotation
7.4 四元数
一种四个数字表示表示旋转的方式——四元数。
四元数的四个数字由一个实部和三个虚部组成,是一个超复数形式:
q=w+x∗i+y∗j+z∗k
小计算: w^2+x^2+y^2+z^2=1
这一步骤我在看了几遍之后,虽然对维度旋转有了点新的见解,但奈何自身实力还欠缺没有完全搞懂,所以这里就放一篇视频大家可以自行学习。