目录
一、基本概念
旋转向量为三维向量表示形式,用旋转向量表示旋转变换,可以将其方向为旋转轴方向,模为旋转角度。三维空间的旋转变换为绕任意轴r旋转角,可以分解为分别绕X,Y,Z轴旋转角,将绕坐标轴旋转表达为矩阵形式有:
图源:https://blog.csdn.net/hongbin_xu/article/details/78929006 ,以绕X轴为例,推导过程如下所示
旋转矩阵R=RxRyRz;
二、转换公式
旋转矩阵和旋转向量之间的转换公式如下:
假设有单位旋转向量,旋转角度为,旋转矩阵为R,那么r到R的转换如下,称为
罗德里格斯(Rodrigues)变换。
在opencv中两者的转换用
int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian=0 ); /* *src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。 *dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。 *jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。 */
推导过程:参考https://blog.csdn.net/hongbin_xu/article/details/78929006
三、应用场景
矩阵运算显然是计算机三维坐标变换最简单方便的计算方法,因此在 opencv、opengl、工业机器人等开发中,提到位姿旋转变换,多半用的是旋转矩阵。然而,用矩阵来表示一个旋转关系有两个缺点:
首先,通过旋转矩阵不能直观地看出旋转的方向和角度,假设给定一个旋转矩阵,要求旋转方向不变,旋转角度变成一半,那么新的旋转矩阵计算起来就比较麻烦了。
另一方面,旋转变换本身只有3个自由度,但旋转矩阵有9个元素,因此旋转矩阵中的元素不是相互独立的,这在非线性优化中会带来问题。
参考:https://blog.csdn.net/mightbxg/article/details/79363699