精华内容
下载资源
问答
  • 旋转向量/旋转矩阵 Rodrigues变换

    千次阅读 2019-04-07 16:15:37
    在使用OpenCV3 ...除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 算...
        在使用OpenCV3 stereoRectify()函数处理三维旋转问题时,需要使用旋转向量。通常对于相机的位姿旋转都是采用旋转矩阵的方式来描述的,一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。
         算法过程如下:
    

    式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现:

    OpenCV实现Rodrigues变换的函数为

    int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian=0 );

    src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。

    dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。

    jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。

    可以用上述方式法验证以下例子


    验证代码如下:

    #include <stdio.h>
    #include <cv.h>
    
    void main()
    {
        int i;
        double r_vec[3]={-2.100418,-2.167796,0.273330};
        double R_matrix[9];
        CvMat pr_vec;
        CvMat pR_matrix;
    
        cvInitMatHeader(&pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);
        cvInitMatHeader(&pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);
        cvRodrigues2(&pr_vec, &pR_matrix,0);
    
        for(i=0; i<9; i++)
        {
            printf("%f\n",R_matrix[i]);
        }
    }

     

    展开全文
  • 对于以前数学学习不好人来说,在机器人坐标变换里,总是各种蒙。 这个图片来给你解答 机器人坐标系变换 坐标变换-旋转部分 二维坐标旋转的向量和几何表示
  • 在其他空间中进行右旋90度变换的矩阵表示

    在其他空间中进行右旋90度变换的矩阵表示

    展开全文
  • 1. 坐标系线速度和角速度如上图,在旋转的刚体上,附加一个body frame,记为。对于三个轴而言,绕着旋转的轨迹为圆。当然,上述坐标轴和是在fixed frame坐标系下,下面将记为,绕着轴角速度为,运动线速度记...

    fcfbcade7137dd14efbbef03ed7065cb.png

    任何旋转,都可以用一个旋转轴

    和一个旋转角
    来描述。

    1. 坐标系的线速度和角速度

    1534e83a7b8429759496f0fd8d63964d.png

    如上图,在旋转的刚体上,附加一个body frame

    ,记为
    。对于三个轴而言,绕着
    旋转的轨迹为圆。当然,上述坐标轴
    是在fixed frame
    坐标系下的,下面将
    记为

    绕着轴

    的角速度为,

    运动的线速度记为

    ,三个轴的线速度则为,

    将三个轴的线速度统一写为,

    为了简化公式(3)中的叉乘,特引入了

    符号,将
    可以记为矩阵的乘法
    ,其中
    的定义如下: 对于
    中的向量
    ,定义
    为一个反对称矩阵,

    上述所有

    的反对称矩阵统称为
    小的。前面说过,旋转矩阵属于
    大的。下面有一个两者结合起来有趣的性质,假定
    的第
    行,即
    的第
    列,则

    对于(6)中矩阵中的

    ,是三个向量
    的混合积,也就是三个向量组成的六面体的体积,而我们知道矩阵的行列式的值的物理意义就是体积。根据下面的混合积的图,很容易得到矩阵中对应元素的
    反对称的关系。

    46d470aa69861fe7b739abc8b6853c81.png

    下面我们将三个轴的线速度表示为

    的写法,

    前面我们提到的所有的向量和

    都是在fixed frame
    下描述的,下面我们将
    在body frame
    下进行描述,易得,

    则旋转轴在body frame

    下,

    因此可以得到,

    需要注意的是

    是在body frame
    下的描述,所以它描述的角速度不是一个旋转的坐标系的角速度(例如
    相对于
    旋转),而是在某一瞬时,
    相对于body frame
    的旋转。

    2. 微分方程的解

    给定下面一个简单的线性微分方程,其中

    ,初始状态

    易得上述的解为,

    附近进行泰勒展开,可得,

    同理,当

    为矩阵
    时,
    为列向量,

    可得解为,

    其中,

    3. 指数形式的旋转

    任何旋转,都可以用一个旋转轴

    和一个旋转角
    来描述
    。其中
    。 下面我们来分析如何利用一根旋转轴和旋转角来描述旋转,

    927a9e35477f7937dc1e3528b76f16a8.png

    假设向量

    绕着
    以恒定的角速度
    旋转了
    秒,最终到
    ,定义
    间断的线速度为,

    由前面的分析,引入

    ,则

    该微分方程如前面介绍为,

    则,

    容易得到

    两个计算性质,如下,

    所以公式21可以化简为,

    上式就是著名的罗德里格斯公式,即指数形式的旋转,

    经过指数映射,将

    和旋转的角度
    通过指数映射为
    ,即三维的旋转矩阵。

    在前面文章中介绍过,旋转矩阵左乘和右乘的区别,这里也是类似的,假设body frame

    在fixed frame
    中的描述为
    ,则
    ,左乘,表示将
    顺着
    中的
    旋转
    。而
    ,右乘,表示将
    顺着
    中的
    旋转

    4. 旋转矩阵的对数

    上面描述的是从

    到旋转矩阵
    的过程,下面介绍从旋转矩阵
    的过程,也就是求得旋转向量和具体的旋转角度,求
    矩阵的“对数”。可以将两个对应的过程描述成下面的形式,

    下面将公式(25)展开,如下,

    其中,

    。 记旋转矩阵
    ,则可以得到,

    上式在

    的情况下,可以得到,

    上式也可以写成,

    此外,由式(26)可以得到另外一个计算

    的公式,

    至此,

    的情况下
    ,利用旋转矩阵
    ,我们计算出了
    。接下来讨论
    的情况:
    1. ,且
      是偶数的情况下,此时相当于没有旋转,回到了原位置,
    2. ,且
      是奇数的情况下,此时有,

    因为式(31)三个矩阵都是对角矩阵,所以可以得到下面的结果(利用

    对角元素)

    利用

    非对角元素,可得,

    利用式(32)和式(33)我们就能计算出

    ,同时此时旋转的角为
    。 从上面的计算过程很容易看出来,旋转角度是以
    为周期,其实也是符合物理意义的,旋转
    和旋转
    的效果是一样的,因此我们可以将旋转的角度限定在
    。此时计算的
    的长度是
    的。因此我们可以把
    想象为一个半径为
    实心球,如下图所示,

    f959afff65fb8ff88dbe457a9d37f0a1.png

    当给定球中的一点

    ,我们可以将
    作为单位长度的旋转轴,
    作为
    。和
    相对应的旋转矩阵
    可以被看作是绕着
    旋转了
    角。对于
    ,同时
    ,此时在实心球中总能找到一个唯一的
    ,使得
    。当
    时,此时
    ,在实心球的表面有一对正好相反的一对点,两者的效果是一样的,
    都对应了同一个
    展开全文
  •  处理三维旋转问题时,通常采用旋转矩阵的方式来描述旋转变换。旋转矩阵有以下两种方式得到。  物体在三维空间中的旋转,可以被分为解为在直接坐标系下,分别先后围绕x,y,z坐标轴旋转得到。旋转的角度也就是...

         在做双目立体视觉深度图像生成的时候,遇到旋转向量(1x3)与旋转矩阵(3x3)的概念,得知二者可以通过罗德里格斯相互转化。

    1.旋转的表示

         处理三维旋转问题时,通常采用旋转矩阵的方式来描述旋转变换。旋转矩阵有以下两种方式得到。

          物体在三维空间中的旋转,可以被分为解为在直接坐标系下,分别先后围绕x,y,z坐标轴旋转得到。旋转的角度也就是我们常听到的角度roll,pitch,yew。如果已知这几个角度,就可以直接通过每一步的矩阵相乘得到整个旋转矩阵。

                                  R=R(yaw)R(pitch)R(roll)

    R=R(yaw)R(pitch)R(roll)

           旋转矩阵还可以理解为围绕空间中某一个向量,直接一次旋转某一个角度得到。在openCV相机标定时得到的旋转向量r就是用这种方式。即由旋转变量来描述。

    2.旋转向量得到旋转矩阵

           旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。

           旋转角度 θ=norm(r)      (norm表示求向量r的模长)
           单位向量 (rx,ry,rz)=r/θ 
           旋转矩阵 

    R=cos(θ)I+(1cos(θ))rrT+sin(θ)0rzryrz0rxryrx0

           其中I为单位矩阵,rTr的转置。 
           所以 
    rrT=rxrxryrxrzrxrxryryryrzryrxrzryrzrzrz
    3.根据旋转向量求另一个旋转向量

           用r表示待旋转的向量,v为旋转向量的单位向量θ为旋转角,旋转后的向量可以表示为 

    r=rcos(θ)+(1cos(θ))(vr)v+sin(θ)(v×r)
    4.根据两个旋转向量求旋转矩阵

    (1)旋转角度

           已知旋转前向量为P, 旋转后变为Q。由点积定义可知:

    image       可推出P,Q之间的夹角为:

    image

    (2)旋转轴

           旋转角所在的平面为有P和Q所构成的平面,那么旋转轴必垂直该平面。

           假定旋转前向量为a(a1, a2, a3), 旋转后向量为b(b1, b2, b3)。由叉乘定义得:

    image

           所以旋转轴c(c1, c2, c3)为:

    image

    5.OpenCV实现Rodrigues变换的函数为

    int cvRodrigues2const CvMat* src, CvMat* dst, CvMat* jacobian=0 );

         src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。

         dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。

         jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。


    验证代码如下:

    #include <stdio.h>
    #include <cv.h>
    
    void main()
    {
        int i;
        double r_vec[3]={-2.100418,-2.167796,0.273330};
        double R_matrix[9];
        CvMat pr_vec;
        CvMat pR_matrix;
    
        cvInitMatHeader(&pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);
        cvInitMatHeader(&pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);
        cvRodrigues2(&pr_vec, &pR_matrix,0);
    
        for(i=0; i<9; i++)
        {
            printf("%f\n",R_matrix[i]);
        }
    }

    6、opencv另一种变换方法


    //将旋转向量转化为旋转矩阵
    Mat_<float> r_l = (Mat_<float>(3, 1) << 0.04345, -0.05236, -0.01810);//左摄像机的旋转向量
    Mat_<float> r_r = (Mat_<float>(3, 1) << 0.04345, -0.05236, -0.01810);//右摄像机的旋转向量
    Mat  R_R, R_L;
    Rodrigues(r_l, R_L);
    Rodrigues(r_r, R_R);

    参考:

    1 http://blog.csdn.net/tl_tj/article/details/47006007

    2 http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html

    根据旋转前后的两个向量值,先求出旋转角度和旋转轴,然后用罗德里格旋转公式即可求出对应的旋转矩阵。 https://www.cnblogs.com/xpvincent/archive/2013/02/15/2912836.html

    展开全文
  • 除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 OpenCV实现Rodrigues变换...
  • 旋转向量,旋转向量的方向与旋转轴一致,长度为旋转角度。 在三维坐标下定义旋转轴为向量n(0,1,0)即旋转轴为y轴,旋转角度为k=30. 则旋转向量可用k*n表示。使用库eigen可用下面来表示 Eigen::AngleAxisd ...
  • 旋转矩阵用一个矩阵来表示空间中的旋转变换关系。 四元数用4个变量来表示旋转(增加一个纬度),可以避免万向节锁现象。具体转换公式可参考《视觉slam十四讲》这本书。下面的程序为使用Eigen库进行转换。 (1)...
  • 1)简单的用一个3×1(3行1列,其中逗号表示一行)的向量来表示,该向量的方向就是旋转轴,它的模就是绕轴逆时针旋转的角度。 Eigen::Vector3d w(0.01,0.02,0.03);//w就是初始化的旋转向量。 2)使用Eigen库自
  • 目录 一、基本概念 ...三维空间的旋转变换为绕任意轴r旋转角,可以分解为分别绕X,Y,Z轴旋转角,将绕坐标轴旋转表达为矩阵形式有: 图源:https://blog.csdn.net/hongbin_xu/article/details/7892900...
  • 任何坐标系取向,都可以用三个欧拉角来表现,如下图(蓝色是起始坐标系,而红色旋转之后坐标系) :因此欧拉角转旋转矩阵如下:则可以如下表示欧拉角:以下代码用来实现旋转矩阵和欧拉角之间相互变换。...
  • 除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 算法过程如下: 式中...
  • 旋转向量

    2017-06-19 10:38:33
    除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 OpenCV实现Rodrigues变换的函数...
  • 三维空间刚体运动描述方法有:旋转矩阵、变换矩阵、旋转向量、欧拉角和四元数,接下来将逐一介绍它们 一、旋转矩阵 点、向量、坐标系 * 点——存在于三维空间之中,点和点组成向量,点本身由原点指向它...
  • 除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯 openCV实现Rodrigues变换的函数为 int cvRodrigues2( const ...
  • OpenCV--旋转向量旋转矩阵相互转化

    千次阅读 2013-01-07 16:20:25
     除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。  旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 算法过程如下: ...
  • 3D空间中的旋转可用旋转矩阵、欧拉角或四元数等形式来表示,他们不过都是数学工具,其中在绕任意向量的旋转方面,旋转矩阵和四元数两种工具用的较多,欧拉角由于存在万向节死锁等问题,使用存在限制。 (本文假设...
  • 3D空间中的旋转可用旋转矩阵、欧拉角或四元数等形式来表示,他们不过都是数学工具,其中在绕任意向量的旋转方面,旋转矩阵和四元数两种工具用的较多,欧拉角由于存在万向节死锁等问题,使用存在限制。 (本文假设...
  • SO(3)的旋转矩阵有九个量,但一次旋转只能有三个自由度。因此这种表达方式是冗余的。 旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为1。变换矩阵也是如此。当我们想要估计或优化一个旋转矩阵/变换矩阵时,...
  • 三维空间中的旋转--旋转向量

    万次阅读 2016-09-19 20:17:10
    除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 OpenCV实现Rodrigues...
  • 3D空间中的旋转可用旋转矩阵、欧拉角或四元数等形式来表示,他们不过都是数学工具,其中在绕任意向量的旋转方面,旋转矩阵和四元数两种工具用的较多,欧拉角由于存在万向节死锁等问题,使用存在限制。(本文假设坐标...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 513
精华内容 205
关键字:

向量的旋转变换表示