Matlab计算旋转矩阵有两种方法,一种是通过欧拉角,计算yaw,pitch和row轴的旋转角。这里要介绍的是另一种是直接绕一个向量旋转theta角的方法,就是Rodrigues变换,其中的向量就是旋转向量,其得到的矩阵就是旋转矩阵,这个矩阵和欧拉角的方法计算出来是一样的。

        而我们常常将旋转和平移组合在一个3*4的矩阵中,使得物体三维坐标乘以该矩阵,直接得到旋转平移变换之后的坐标。此时就需要将旋转向量转化为一个3×3的旋转矩阵,这就是罗德里格斯(Rodrigues)变换。

一、Rodrigues变换的数学原理

        如题,旋转有两种理解,一种是绕坐标轴依次旋转,另一种是绕任意轴一次直接旋转一个角度得到。将向量B看做是A绕着轴C转过角度theta得到,则:

r8

        同时,我们还要求norm(C)=theta,于是,旋转向量方向与C相同,向量的模大小是弧度制的角度,我们就可以很轻松的求出两个向量的旋转向量和旋转矩阵了。

二、Rodrigues变换的实现

        在OpenCV和Matlab中都用实现Rodrigues变换:

        OpenCV中Calib模块有实现该函数,查看OpenCV文档中的解释,和一篇博客

        正反变换都是同一个函数,输入1*3或3*1,输出3*3,或者输入3*3,输出1*3,第三个参数还可以输出3*9的雅可比矩阵

        一个工具箱中,Matlab实现rodrigues变换的函数,与上面opencv使用是类似的

        上面的matlab函数来自加州理工的张正友标定工具箱。

发表评论

电子邮件地址不会被公开。 必填项已用*标注