1. 旋转矩阵是⼀种3×3的正交矩阵,
这⾥R为3D的旋转矩阵,同样的,t为3D的平移⽮量。
由于3D旋转都可以归结成按照某个单位向量n进⾏⼤⼩为θ的旋转。所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由
罗德⾥格斯公式表明,由于过程⽐较复杂,我们在此不作赘述,只给出转换的结果:
这⾥ 公式虽然较为复杂,但实际写成程序后,只需知道旋转⽅向和⾓度后即可完成计算。另⼀件有
趣的事是,如果⽤
表⽰与n对应的⼀个反对称矩阵,那么有:
(李代数会对后⾯的指数形式做出解释)
根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转⾓。关于转⾓θ,我们对上式两边求矩阵的迹,可得:
可得
关于转轴n,由于旋转轴上的向量在旋转后不发⽣改变,说明
因此,只要求此⽅程的解向量即可。这也说明n是R特征值为1的⼀个特征向量。
总之,读者应当明⽩在3D时,旋转和平移仍可⽤转移矩阵T来描述,其结构也与2D类似。⽽T4×4构成了三维欧⽒变换群SE(3)。注
意到T虽然有16个变量,但真正的⾃由度只有6个,其中3个旋转,3个位移。
欧拉⾓是⼀种⼴为使⽤的姿态描述⽅式,以直观见长。在最常⽤的欧拉⾓表达⽅式中,我们把旋转分解成沿三个轴转动的量:滚转⾓
-俯仰⾓-偏航⾓(roll-pitch-yaw)。它的好处是⼗分的直观,且只有三个参数描述。缺点是会碰到著名的万向锁问题:在俯仰为
±90∘时,表达某个姿态的形式不唯⼀。此外,它也不易于插值和迭代。⼀般不怎么⽤,只有在验证结果是否正确时,⽅便使⽤。
2. 四元数
相⽐欧拉⾓,四元数(Quaternion)则是⼀种紧凑、易于迭代、⼜不会出现奇异值的表⽰⽅法。它在程序中⼴为使⽤,例如ROS和⼏个
著名的SLAM公开数据集、g2o等程序都使⽤四元数记录机器⼈的姿态。
四元数仅是3D姿态的⼀种表达⽅式,我们⽤⼀个单位四元数表达原本⽤旋转矩阵表⽰的三维旋转。这样做⼀个直接的好处是省空间。
⼀个旋转阵有9个分量,但只有三个⾃由度。那么,能不能⽤三个数来描述呢?可以是可以的,但不可避免会出现奇异的情况,欧拉⾓
就是⼀个例⼦。⽽四元数,⽐三维向量多了⼀个分量,从⽽可以⽆奇异地表⽰各种姿态。
评论0
最新资源