精华内容
下载资源
问答
  • 方向向量转四元数

    千次阅读 2019-08-01 00:28:14
    之前写过一篇方向向量转欧拉角的,相对来说欧拉角还是有一些限制,现在研究下方向向量转四元数公式。 该四元数能够使方向向量从Z轴(0,0,1)旋转至(X,Y,Z)。四元数可以理解为绕某轴(x,y,z)旋转角度w,记为(cos(w/2),...

    之前写过一篇方向向量转欧拉角的,相对来说欧拉角还是有一些限制,现在研究下方向向量转四元数公式。

    该四元数能够使方向向量从Z轴(0,0,1)旋转至(X,Y,Z)。四元数可以理解为绕某轴(x,y,z)旋转角度w,记为(cos(w/2),sin(w/2)x,sin(w/2)y,sin(w/2)z)。

    需要注意的是,对于四元数来说,如果对应的四个值都互为相反数,可以理解为这两个四元数对应的旋转相同。比方说,四元数(a,b,c,d)和四元数(-a,-b,-c,-d)对应的旋转是相同的。

    使用unity函数进行转换的代码如下

    
        public Quaternion CalQuaternion(Vector3 dir)
        {
            Quaternion cal = new Quaternion();
            Vector3 euler = Quaternion.LookRotation(dir).eulerAngles;
    
            //欧拉角Y: cosY = z/sqrt(x^2+z^2)
            float CosY = dir.z / Mathf.Sqrt(dir.x * dir.x + dir.z * dir.z); 
            float CosYDiv2 = Mathf.Sqrt((CosY + 1) / 2);
            if (dir.x < 0) CosYDiv2 = -CosYDiv2; 
    
            float SinYDiv2 = Mathf.Sqrt((1-CosY) / 2);
    
            //欧拉角X: cosX = sqrt((x^2+z^2)/(x^2+y^2+z^2)
            float CosX = Mathf.Sqrt((dir.x * dir.x + dir.z * dir.z) / (dir.x * dir.x + dir.y * dir.y + dir.z * dir.z));
            if (dir.z < 0) CosX = -CosX;
            float CosXDiv2 = Mathf.Sqrt((CosX + 1) / 2);
            if (dir.y > 0) CosXDiv2 = -CosXDiv2;
            float SinXDiv2 = Mathf.Sqrt((1 - CosX) / 2);
    
            //四元数w = cos(x/2)cos(y/2)
            cal.w = CosXDiv2 * CosYDiv2;
            //四元数x = sin(x/2)cos(y/2)
            cal.x = SinXDiv2 * CosYDiv2;
            //四元数y = cos(x/2)sin(y/2)
            cal.y = CosXDiv2 * SinYDiv2;
            //四元数z = sin(x/2)sin(y/2)
            cal.z = -SinXDiv2 * SinYDiv2;
    
    
            CalCosX = CosX;
            CalCosY = CosY;
            RightCosX = Mathf.Cos(Mathf.Deg2Rad * (Quaternion.LookRotation(dir).eulerAngles.x));
            RightCosY = Mathf.Cos(Mathf.Deg2Rad * (Quaternion.LookRotation(dir).eulerAngles.y));
            RightEulers = Quaternion.LookRotation(dir).eulerAngles;
    
            return cal;
        }

    实际还是使用欧拉角转四元数的方式进行的换算,旋转次序还是z,x,y。同时还用到了三角函数转半三角函数的公式。

    需要注意的是,由于之前提到的原因,得到的四元数和unity自带的Quaternion.LookRotation(dir)可能是相反的,实际代表的是一种旋转。在计算中需要注意得到的三角函数的正负。

    展开全文
  • Matlab ——旋转矩阵,旋转向量,四元数,欧拉角之间的转换 旋转矩阵 dcm R 四元数 quat q = [q0 q1 q2 q3] 欧拉角 angle [row,pitch,yaw]/[r1,r2,r3] 注:以上表格是为了帮助理解的表示 roll(横滚) --X pitch...

    基于Matlab现有函数下的内容
    Matlab ——旋转矩阵,旋转向量,四元数,欧拉角之间的转换
    旋转矩阵     dcm     R
    四元数     quat     q = [q0 q1 q2 q3]
    欧拉角     angle     [row,pitch,yaw]/[r1,r2,r3]

    注:以上表格是为了帮助理解的表示

    roll(横滚) --X     pitch(俯仰)--Y    yaw(偏航/航向)-- Z

    - - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     转四元数

    旋转矩阵转四元数

    q =dcm2quat(R);

     

    欧拉角转四元数

    q=angle2quat(r1,r2,r3,S);

    - - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    转欧拉角

    旋转矩阵转欧拉角

     [r2,r2,r3]=dcm2angle(R, S)

    注:得到的结果为弧度,若需要角度需进一步转化

    四元数转欧拉角

    [r1,r2,r3]=quat2angle([q0 q1 q2 q3],S)

     

    注:S 的选择有12种,【'ZYX','ZYZ’,‘ZXY’,‘ZXZ’,‘YXZ’,‘YXY’,‘YZX’,‘YZY’,‘XYZ’,‘XYX’,‘XZY’,‘XZX’】

           S  默认 ‘ZYX'

    - - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    转旋转矩阵

    四元数转旋转矩阵

    R=quat2dcm([q0 q1 q2 q3])

    欧拉角转旋转矩阵

    R=angle2dcm(r1,r2,r3,S);

    R=angle2dcm(yaw/180*pi,pitch/180*pi,roll/180*pi)

    注:根据欧拉角是弧度/角度,选择以上操作

    - - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    若已知旋转矩阵R,求四元数[q0 q1 q2 q2]

    则对应的四元数为:

    - - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    旋转矩阵及旋转向量相互转化 Rodrigues矩阵及matlab实现

    处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。
         算法过程如下:

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

    matlab实现

    % om=[0.02876123785972595215 -1.668149590492248535 -0.0360212959349155426]';
    om=[ 0.0009597472380846738815 0.01455024257302284241 0.010445447638630867]';
    theta=norm(om);
    om=om./theta;
    I=eye(3);
    rom=[0 -om(3) om(2);
         om(3)  0  -om(1);
         -om(2) om(1) 0];
    R = cos(theta)*I+(1-cos(theta))*om*om'+ sin(theta)*rom

    q =dcm2quat(R)

     

    matlab里有rotationVectorToMatrix和rotationMatrixToVector函数

    以上为例

    >> R=rotationVectorToMatrix(om)

    R =

        0.9998    0.0105   -0.0145
       -0.0104    0.9999    0.0010
        0.0146   -0.0009    0.9999

     rotationVector = rotationMatrixToVector(R)

    rotationVector =   -0.0010   -0.0146   -0.0104

    ---------------------------------------------

     

    欧拉角与旋转矩阵转换 matlab 函数 angle2dcm dcm2angle 方向余弦矩阵 机器人坐标变换

    在工业机器人坐标变换中,旋转矩阵与欧拉角有几个概念比较容易混淆,根据自己的理解整理如下,如有问题,欢迎指正

    因为欧拉角相对旋转矩阵更为直观,直接用绕坐标轴的旋转可以得到,因此将旋转矩阵转换为欧拉角会方便分析

    在位姿变换相关资料中(可参照 J. J. Craig 《Introduction to Robotics》),位姿矩阵的描述如下

    上面这样的位姿描述,指的是主动旋转矩阵,即向量或子坐标系绕坐标轴主动旋转的旋转矩阵,也是机器人坐标变换通常会采取的旋转方式,写成 matlab 函数如下(a输入‘X’,'Y','Z',B输入旋转角度)

        function y = Rot3( a ,B )
        b = deg2rad(B);
        switch a
            case 'X'
                y=[1,0,0;0,cos(b),-sin(b);0,sin(b),cos(b)];
            case 'Y'
                y=[cos(b),0,sin(b);0,1,0;-sin(b),0,cos(b)];
            case 'Z'
                y=[cos(b),-sin(b),0;sin(b),cos(b),0;0,0,1];
        end

    与此区分的是被动旋转矩阵,向量或子坐标系不变,基坐标系旋转的旋转矩阵,这类被动旋转矩阵与上面的三个矩阵互为转置(互为逆矩阵,对于旋转矩阵是等价的),也可以理解为被动旋转矩阵让向量或子坐标系旋转到基坐标系位置,而 matlab 中的 dcm2angle,angle2dcm 均对应的是被动旋转:

        Mat_t = [cos(pi/3),-sin(pi/3),0;sin(pi/3),cos(pi/3),0;0,0,1];
        [ra,rb,rc]=dcm2angle(Mat_t,'ZYX');
        %此处 ra 为 -60 度,可见 Matlab 中采用的是被动旋转,sin的符号和主动旋转矩阵相反

    因此,在采用matlab 中 dcm2angle 计算欧拉角时,需要注意对旋转矩阵进行转置(R3'),以‘ZYX’欧拉角为例:

        R3 = Rot3('Z',20)*Rot3('Y',60)*Rot3('X',40)
        [ra,rb,rc]=dcm2angle(R3','ZYX');
        M3 = Rot3r('Z',ra)*Rot3r('Y',rb)*Rot3r('X',rc)
        d=[ra,rb,rc]./pi.*180

    这样,计算结果  d = 20.0000   60.0000   40.0000  ,与常用主动旋转矩阵一致,R3与M3也一致,如果R3‘转置去掉,改为

    [ra,rb,rc]=dcm2angle(R3,'ZYX');

    则结果为从R3转换到基坐标的欧拉角,对应M3为R3的逆矩阵

    需要注意的是,主动/被动旋转不等同于基坐标系、连体坐标系的变换,在主动旋转矩阵下,仍然要区分按照固定基坐标系坐标轴,还是按照旋转后的连体坐标新坐标轴旋转,按照右乘连体左乘基的方式进行计算
    ————————————————

     

     

    旋转向量,旋转矩阵和四元数的关系

    参考资料
    1.向量旋转公式
    2.旋转矩阵和旋转向量
    2.1旋转矩阵微分和旋转向量的推导
    2.2罗德里格旋转公式
    3.四元数和旋转向量
    3.1 由欧拉参数推导四元数
    3.2旋转向量表示四元数
    4.旋转矩阵和四元数
    5.欧拉角和旋转向量角

     

    参考资料

    • Quaternion kinematics for the error-state KF
    • barfoot《state estimation forrobotics》
    • 袁信、郑锷《捷联式惯性导航原理》
    • 以上书籍的下载链接链接:http://pan.baidu.com/s/1c1G0k5U 密码:jdsz

    刚体在空间中的一次旋转可以用旋转矩阵,四元数和旋转向量三种方式表示,以下总结三者的数学转化关系。


    1.向量旋转公式

    • 旋转向量的定义:方向是旋转轴,大小是旋转角的向量,表示刚体在空间中的一次旋转。
    • 定义向量x绕单位旋转轴u旋转角度
    • ,将向量绕u轴和垂直u轴分解,并利用向量的点乘的几何意义得到:

    • 平行于u轴的分量在旋转中保持不变,垂直分量则旋转
    • 角度,公式(48)到(49)的推导利用了正交基的几何关系和上式证明的模长相等。

    2.旋转矩阵和旋转向量

    2.1旋转矩阵微分和旋转向量的推导

    • 相对于笔记1,利用哥氏定理推导旋转矩阵的微分方程,这里给出了另外一种微分方程的推导,并从旋转角时间积分的角度给出一种旋转向量的定义。

    2.2罗德里格旋转公式

    • 利用李群SO(3)推导出以旋转向量表示的罗德里格旋转公式(Rodrigues rotation formula);其中计算时旋转轴u用哪个坐标系表示都是等价的,后面将证明。

    • 利用罗德里格旋转公式推导向量旋转公式

    3.四元数和旋转向量

    3.1 由欧拉参数推导四元数

    • 由旋转矩阵的欧拉参数(Euler Parameters)推导单位四元数的表示,这里参考barfoot书上的内容,这部分也证明了罗德里格旋转公式的旋转轴u用哪个坐标系表示都可以。1中也有说明,旋转轴在旋转过程中没有几何位置变化。


    • 由此得到以欧拉参数推导出的单位四元数

    3.2旋转向量表示四元数

    • 根据3.1,由旋转向量表示四元数可以写成:

    • 用四元数表示向量的旋转,这里和四元数相乘运算的三维向量都改写成四元数的形式(只有虚部,实部为0),并进行了证明(结果等于向量旋转公式结果):

    4.旋转矩阵和四元数

    • 由2.2和3.3,以向量旋转公式为纽带,得到旋转矩阵和四元数表示旋转的等价关系,进而得到单位四元数的元素表示的旋转矩阵,该结果和3.1由欧拉参数表示罗德里格公式的结论一致。3.1中的欧拉参数其实就是这里的单位四元数的实部和虚部。
    • 其中这里的x是以四元数的形式表示的。



    5.欧拉角和旋转向量角

    • 我们提到欧拉角,一般指的是绝对姿态的欧拉角,即导航系下的机体俯仰滚转和偏航角,而旋转向量角指的是一次旋转过程的角度,一般是微小量。
    • 两者的关系:机体在运动过程中欧拉角的更新可以看做是初始旋转矩阵(欧拉角表示)与每次旋转矩阵(旋转向量角表示)的积分。

    欧拉角的转动顺序为Z→Y→X,转动的角度分别为(ψ,θ,ϕ)。

    欧拉角介绍

             欧拉角包括偏航角(yaw)ψ,俯仰角(pitch)θ,滚转角(roll)ϕ,导航坐标系S−Oxgygzg经过三次旋转可以得到机体坐标系B−xbybzb。需要注意的是,这里旋转的是坐标轴,不是向量。旋转过程遵循右手定则。

    • RPY角与Z-Y-X欧拉角

      描述坐标系{B}相对于参考坐标系{A}的姿态有两种方式。第一种是绕固定(参考)坐标轴旋转:假设开始两个坐标系重合,先将{B}绕{A}的X轴旋转γ

    ,然后绕{A}的Y轴旋转β,最后绕{A}的Z轴旋转α

    ,就能旋转到当前姿态。可以称其为X-Y-Z fixed angles或RPY角(Roll, Pitch, Yaw)。

      Roll:横滚

      Pitch: 俯仰

    Yaw: 偏航(航向)

     

    展开全文
  • 最近学习了一些关于三维空间旋转相关的知识,借此梳理一下备忘。...表示三维空间的旋转有多种互相等价的方式,常见的有旋转矩阵、DCM、旋转向量四元数、欧拉角等。本篇文章主要梳理一下这些表示方式及相互

    最近学习了一些关于三维空间旋转相关的知识,借此梳理一下备忘。


    三维空间的旋转(3D Rotation)是一个很神奇的东东:如果对某个刚体在三维空间进行任意次的旋转,只要旋转中心保持不变,无论多少次的旋转都可以用绕三维空间中某一个轴的一次旋转来表示。表示三维空间的旋转有多种互相等价的方式,常见的有旋转矩阵、DCM、旋转向量、四元数、欧拉角等。本篇文章主要梳理一下这些表示方式及相互转换的方法。


    1. 欧拉角(Euler Angle)

    最直观的表示方式是绕刚体自身的X、Y、Z三个轴分别进行旋转某个角度,这就是所谓的欧拉角(Euler Angle)表示方式。

    Euler Angle


    需要注意的是,欧拉角的表示方式里,yaw、pitch、roll的顺序对旋转的结果是有影响的。给定一组欧拉角角度值,比如yaw=45度,pitch=30度,roll=60度,按照yaw-pitch-roll的顺序旋转和按照yaw-roll-pitch的顺序旋转,最终刚体的朝向是不同的!换言之,若刚体需要按照两种不同的旋转顺序旋转到相同的朝向,所需要的欧拉角角度值则是不同的!


    另外需要注意的是,在欧拉角的表示方式里,三个旋转轴一般是随着刚体在运动,即wikipedia中所谓的intrinsic rotation,见下图动画所示(图来自wikipedia)。相对应的另一种表示方式是,三个旋转轴是固定的,不随刚体旋转而旋转,即extrinsic rotation,这种表示方式在计算机视觉中不是很常用。



    欧拉角的表示方式比较直观,但是有几个缺点:

    (1) 欧拉角的表示方式不唯一。给定某个起始朝向和目标朝向,即使给定yaw、pitch、roll的顺序,也可以通过不同的yaw/pitch/roll的角度组合来表示所需的旋转。比如,同样的yaw-pitch-roll顺序,(0,90,0)和(90,90,90)会将刚体转到相同的位置。这其实主要是由于万向锁(Gimbal Lock)引起的,关于万向锁的解释,有条件的同学看看Youtube的视频或许会比较直观。

    (2) 欧拉角的插值比较难。

    (3) 计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin, cos,计算量较大。


    2. 旋转矩阵(Rotation Matrix)和方向余弦矩阵(Direction Cosine Matrix)

    在计算坐标变换时,旋转更方便的表示形式是旋转矩阵(Rotation Matrix)。三维空间的旋转矩阵可以表示成3x3的矩阵,将欧拉角转换为旋转矩阵的计算方式如下,假设欧拉角yaw、pitch、roll的角度为alpha, beta, gamma,则旋转矩阵可以计算如下:


    其中,


    这里也可以看出,如果yaw、pitch、roll的顺序有改变,矩阵相乘的顺序需要作出相应改变,所得的旋转矩阵结果也会有所改变。


    需要注意的是,旋转矩阵的虽然有9个元素,但是只有3个自由度,所以不是任何矩阵都可以作为旋转矩阵,旋转矩阵需要是正交矩阵 (即逆矩阵等于转置矩阵)。


    此外,旋转矩阵的另一个名字叫方向余弦矩阵(Direction Cosine Matrix),简称DCM,在陀螺力学领域较为常用。DCM的名字来历其实是用欧拉角之外的另一种用3个角度值表示三维旋转的方式,假设刚体在起始朝向时三个坐标轴的向量为I,J,K,而刚体在目标朝向时的三个坐标轴的向量为i,j,k,则该旋转可以通过三个坐标轴分别与原始坐标轴的夹角表示,如下图所示:


    DCM可以通过三个夹角的余弦计算如下:


    这就是DCM名称的由来。其实可以验证,DCM其实就是旋转矩阵,所以,下文不再区分DCM和旋转矩阵的称呼。


    在Matlab中(R2006a以后的版本中,需安装Aerospace Toolbox),可以方便地用angle2dcmdcm2angle来转换欧拉角和旋转矩阵。下面的Matlab代码可以验证,两个不同的欧拉角方式可以转换到相同的旋转矩阵:

    [plain] view plain copy
    1. % Matlab code by MulinB, Aerospace Toolbox is needed  
    2. % Gimbal Lock experiments  
    3. yaw1 =   0;  
    4. pitch1 = 90;  
    5. roll1 =  0;  
    6. yaw2 =   90;  
    7. pitch2 = 90;  
    8. roll2 =  90;  
    9.   
    10. R1 = angle2dcm(yaw1/180*pi,pitch1/180*pi,roll1/180*pi);   
    11. R2 = angle2dcm(yaw2/180*pi,pitch2/180*pi,roll2/180*pi);  
    12. disp(R1);disp(R2);  


    3. 四元数(Quaternion)、旋转向量(Rotation Vector)、轴-角表示(Axis-Angle)

    旋转的一个神奇之处就在于,三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示,即所谓的Axis-Angle表示方法。这种表示方法里,Axis可用一个三维向量(x,y,z)来表示,theta可以用一个角度值来表示,直观来讲,一个四维向量(theta,x,y,z)就可以表示出三维空间任意的旋转。注意,这里的三维向量(x,y,z)只是用来表示axis的方向朝向,因此更紧凑的表示方式是用一个单位向量来表示方向axis,而用该三维向量的长度来表示角度值theta。这样以来,可以用一个三维向量(theta*x, theta*y, theta*z)就可以表示出三维空间任意的旋转,前提是其中(x,y,z)是单位向量。这就是旋转向量(Rotation Vector)的表示方式,OpenCV里大量使用的就是这种表示方法来表示旋转(见OpenCV相机标定部分的rvec)。


    Axis-Angle的表示方法还可以推导出另一种很常用的三维旋转表示方法,叫四元数(Quaternion)这里有一篇非常通俗易懂介绍四元数的文章。同上,假设(x,y,z)是axis方向的单位向量,theta是绕axis转过的角度,那么四元数可以表示为[cos(theta/2), x*sin(theta/2), y*sin(theta/2), z*sin(theta/2)]。注意,这里可以推导出,用于表示旋转的四元数向量也必须是单位向量。四元数的神奇之处在于,对于三维坐标的旋转,可以通过四元数乘法直接操作,与上述旋转矩阵操作可以等价,但是表示方式更加紧凑,计算量也可以小一些。首先,四元数的乘法是如下规定的:


    由此定义,四元数的逆也可以求出。作为旋转四元数,由于其单位向量的特性,四元数的逆其实等于四元数的共轭,也就是如果四元数q=[a,b,c,d],由于a^2+b^2+c^2+d^2=1,那么q的逆和共轭都是q'=[a,-b,-c,-d]。需要注意的是,四元数的乘法是不可交换的。通过四元数计算旋转的方式为(将三维空间一个点v_I旋转到v_B,四元数是q):


    在Matlab里,可以用quatmultiply计算四元数乘法,用quatinv来计算四元数的逆,用quatconj来计算四元数的共轭。四元数的旋转和旋转矩阵的旋转可以由以下matlab代码验证:

    [plain] view plain copy
    1. % Matlab code by MulinB, Aerospace Toolbox is needed  
    2.   
    3. pt = [10,20,30]; % point coordinate  
    4.   
    5. yaw =   45;  
    6. pitch = 30;  
    7. roll =  60;  
    8.   
    9. q = angle2quat(yaw/180*pi,pitch/180*pi,roll/180*pi);  
    10. R = angle2dcm(yaw/180*pi,pitch/180*pi,roll/180*pi);  
    11.   
    12. pt1 = R*pt';  
    13. pt2 = quatmultiply(quatconj(q), quatmultiply([0,pt],q)); % NOTE the order  
    14. disp(pt1');disp(pt2(2:4));  

    从上述代码里也可以看到四元数和欧拉角和dcm的转换,在matlab里可以很方便的用quat, dcm, angle之间的转换来任意互转。另外,从四元数计算axis和angle,可以用以下代码计算:

    [plain] view plain copy
    1. % Matlab code by MulinB, Compute the axis and angle from a quaternion  
    2. function [axis, theta] = quat2axisangle(q)  
    3.   
    4. theta = acos(q(1)) * 2;  
    5. axis = q(2:4)/sin(theta/2);  

    从OpenCV的rotation vector和quaternion的互转可以用以下代码:

    [plain] view plain copy
    1. % Matlab code by MulinB, Convert a quaternion to a rotation vector  
    2. function rvec = quat2rvec(q)  
    3.   
    4. theta = acos(q(1)) * 2;  
    5. axis = q(2:4)/sin(theta/2);  
    6. axis = axis / norm(axis);  
    7.   
    8. rvec = axis*theta;  
    [plain] view plain copy
    1. % Matlab code by MulinB, Convert a rotation vector to a quaternion  
    2. function q = rvec2quat(rvec)  
    3.   
    4. theta = norm(rvec);  
    5. axis = rvec/theta;  
    6. sht = sin(theta/2);  
    7. q = [cos(theta/2), axis*sht];  


    关于旋转四元数的比较好的文档,这里列几个参考文献:

    [1] Indirect Kalman Filter for 3D Attitude Estimation (by Nikolas Trawny and Stergios Roumeliotis)

    [2] Quaternion Kinematics for Error-State KF (by Joan Sola)

    [3] A Mathematical Introduction to Robotic Manipulation (by Richard Murray, Zexiang Li, and S. Sastry)



    4. 陀螺仪(Gyroscope)

    随着MEMS陀螺仪的微型化与普及,越来越多的计算机视觉算法会增加IMU作为辅助信息输入,增加系统的稳定性。关于陀螺仪的数据融合和姿态角解算,这里列几篇比较好的参考文献:

    [1]. IMU Data Fusing: Complementary, Kalman, and Mahony Filter

    [2]. Crazepony Open Source Project

    展开全文
  • [学习opencv]基于OpenCV的四元数、旋转...【学习SLAM】’Matlab ——旋转矩阵,旋转向量,四元数,欧拉角之间的转换 [学习SLAM]Eigen库使用教程之旋转矩阵,旋转向量四元数的初始化和相互转换的实现 (ch3) ...
    展开全文
  • 在机器人学中经常会涉及到欧拉角,旋转矩阵,旋转向量,四元数之间的转换,因此基于eigen对变换关系进行实现,以便参考: #include &lt;iostream&gt; #include &lt;Eigen/Core&gt; #include &lt;...
  • 视觉SLAM学习笔记2:旋转矩阵、变换矩阵、旋转向量四元数简述 1.旋转矩阵 (1)向量外积 对于向量外积,除了现线代课本上的方法,还可以引入∧ 符号,把 a 写成一个矩阵。事实上a∧ 是一个反对称矩阵。外积只对三维...
  • 三维空间的旋转(3D Rotation)是一个很神奇的东东:如果对某个...表示三维空间的旋转有多种互相等价的方式,常见的有旋转矩阵、DCM、旋转向量四元数、欧拉角等。本篇文章主要梳理一下这些表示方式及相互转换的方法。
  • 欧拉角转四元数,四元数转欧拉角,四元数相乘,向量四元数旋转公式JAVA代码。 x+y=zx+y=zx+y=z
  • 原 Eigen库使用教程之旋转矩阵,旋转向量四元数的初始化和相互转换的实现 Eigen: C++开源矩阵计算工具——Eigen的简单用法 Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性...
  • 这是我的第一篇博客。 最近在学习《视觉SLAM十四讲》,...旋转向量 n :AngleAxisd n 平移向量 t :Vector3d t 旋转矩阵 R :Matrix3d R 旋转向量→旋转矩阵: 方法一: cout << "旋转矩阵 R 为:" << ...
  • 参考博客:http://blog.csdn.net/u011092188/article/details/77430988Eigen库中各种形式的表示如下:1: 旋转矩阵(3X3):Eigen::Matrix3d——用一个矩阵来表示空间中的旋转变换关系2...四元数(4X1):Eigen::Quater...
  • 1.坐标系介绍与旋转角 1.坐标系分为左手坐标系和右手坐标系,一般来说,右手坐标系更加常用一些,区别在于: 四指从X轴弯曲到Y轴,若右手大拇指指向Z轴方向,则为右手坐标系。...旋转欧拉角旋转矩阵
  • https://blog.csdn.net/u011092188/article/details/77430988

空空如也

空空如也

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

向量转四元数