Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在摄像机标定过程中,从3x3旋转矩阵中提取欧拉角_Matlab_Matrix_Rotation - Fatal编程技术网

Matlab 在摄像机标定过程中,从3x3旋转矩阵中提取欧拉角

Matlab 在摄像机标定过程中,从3x3旋转矩阵中提取欧拉角,matlab,matrix,rotation,Matlab,Matrix,Rotation,如何从旋转矩阵中提取出三个方位角,从而得到MATLAB外部摄像机参数。例如,如果给定以下旋转矩阵 Rc_ext = [ -0.012785 0.999906 -0.004886 0.982489 0.011654 -0.185957 -0.185883 -0.007178 -0.982546 ] 找到三个方向角(围绕x轴、y轴和z轴)?我只是在尝试E=RX(φ)*RY(ψ)*RZ(θ),如中所示 首先,

如何从旋转矩阵中提取出三个方位角,从而得到MATLAB外部摄像机参数。例如,如果给定以下旋转矩阵

Rc_ext = [ -0.012785     0.999906    -0.004886

            0.982489     0.011654    -0.185957

           -0.185883     -0.007178   -0.982546 ]

找到三个方向角(围绕x轴、y轴和z轴)?

我只是在尝试
E=RX(φ)*RY(ψ)*RZ(θ)
,如中所示

  • 首先,我尝试
    E*RZ(-θ)=RX(φ)*RY(ψ)
    ,然后选择元素[1,2]得到

    0.999906 COS(θ)-0.012785 SIN(θ)=0}θ=269.267°

  • 然后选取元素[1,3]并除以元素[1,1]得到

    -0.004886/0.999987773245525367=TAN(ψ)}ψ=-0.279948385°

  • 最后将元素[3,2]除以元素[2,2]得到

    -0.18595957899545633/0.98255769599450146=TAN(φ)}φ=169.28292°


我只是在尝试
E=RX(φ)*RY(ψ)*RZ(θ)
,如中所示

  • 首先,我尝试
    E*RZ(-θ)=RX(φ)*RY(ψ)
    ,然后选择元素[1,2]得到

    0.999906 COS(θ)-0.012785 SIN(θ)=0}θ=269.267°

  • 然后选取元素[1,3]并除以元素[1,1]得到

    -0.004886/0.999987773245525367=TAN(ψ)}ψ=-0.279948385°

  • 最后将元素[3,2]除以元素[2,2]得到

    -0.18595957899545633/0.98255769599450146=TAN(φ)}φ=169.28292°


    • 不幸的是,欧拉角没有标准定义。理论上,你可以找到一组关于任意轴以任意顺序旋转3次的角度,得到相同的旋转矩阵。阅读和绝望

      许多人并不费心定义正旋转的方式,或者他们使用什么单位。有一次,我花了三个星期的时间,对ABB机械臂输出的角度进行了正确的解释

      这是我的右手坐标系代码,当沿着向量的长度看时,正旋转被定义为顺时针方向。假设需要偏航(绕Z轴旋转)、俯仰(绕Y轴旋转)和滚动(绕X轴旋转),并通过矩阵=r_Z*r_Y*r_X创建矩阵

      这是我的代码:

      function [yaw, pitch, roll] = euler_angles(rot_mat)
          pitch = asin(rot_mat(3,1)) * (180.0/pi);
          yaw   = atan2(rot_mat(2,1), rot_mat(1,1)) * (180.0/pi);
          roll  = atan2(rot_mat(3,2), rot_mat(3,3))* (180.0/pi);
      end
      
      这是我从欧拉角度重新生成矩阵的代码

      function rotation = euler_rotation(yaw_deg, pitch_deg, roll_deg)
          % rads = deg2rad([yaw_deg, pitch_deg, roll_deg]);
          rads = ([yaw_deg, pitch_deg, roll_deg]) * (pi/180.0);
          cos_y = cos(rads(1));
          sin_y = sin(rads(1));
          cos_p = cos(rads(2));
          sin_p = sin(rads(2));
          cos_r = cos(rads(3));
          sin_r = sin(rads(3));
      
          r_x = eye(3);
          r_x(2,2) = cos_r;
          r_x(3,3) = cos_r;
          r_x(2,3) = -sin_r;
          r_x(3,2) = sin_r;
      
          r_y = eye(3);
          r_y(1,1) = cos_p;
          r_y(3,3) = cos_p;
          r_y(1,3) = -sin_p;
          r_y(3,1) = sin_p;
      
          r_z = eye(3);
          r_z(1,1) = cos_y;
          r_z(2,2) = cos_y;
          r_z(1,2) = -sin_y;
          r_z(2,1) = sin_y;
      
          rotation = r_z * r_y * r_x;    
      end
      

      不幸的是,欧拉角没有标准定义。理论上,你可以找到一组关于任意轴以任意顺序旋转3次的角度,得到相同的旋转矩阵。阅读和绝望

      许多人并不费心定义正旋转的方式,或者他们使用什么单位。有一次,我花了三个星期的时间,对ABB机械臂输出的角度进行了正确的解释

      这是我的右手坐标系代码,当沿着向量的长度看时,正旋转被定义为顺时针方向。假设需要偏航(绕Z轴旋转)、俯仰(绕Y轴旋转)和滚动(绕X轴旋转),并通过矩阵=r_Z*r_Y*r_X创建矩阵

      这是我的代码:

      function [yaw, pitch, roll] = euler_angles(rot_mat)
          pitch = asin(rot_mat(3,1)) * (180.0/pi);
          yaw   = atan2(rot_mat(2,1), rot_mat(1,1)) * (180.0/pi);
          roll  = atan2(rot_mat(3,2), rot_mat(3,3))* (180.0/pi);
      end
      
      这是我从欧拉角度重新生成矩阵的代码

      function rotation = euler_rotation(yaw_deg, pitch_deg, roll_deg)
          % rads = deg2rad([yaw_deg, pitch_deg, roll_deg]);
          rads = ([yaw_deg, pitch_deg, roll_deg]) * (pi/180.0);
          cos_y = cos(rads(1));
          sin_y = sin(rads(1));
          cos_p = cos(rads(2));
          sin_p = sin(rads(2));
          cos_r = cos(rads(3));
          sin_r = sin(rads(3));
      
          r_x = eye(3);
          r_x(2,2) = cos_r;
          r_x(3,3) = cos_r;
          r_x(2,3) = -sin_r;
          r_x(3,2) = sin_r;
      
          r_y = eye(3);
          r_y(1,1) = cos_p;
          r_y(3,3) = cos_p;
          r_y(1,3) = -sin_p;
          r_y(3,1) = sin_p;
      
          r_z = eye(3);
          r_z(1,1) = cos_y;
          r_z(2,2) = cos_y;
          r_z(1,2) = -sin_y;
          r_z(2,1) = sin_y;
      
          rotation = r_z * r_y * r_x;    
      end
      

      你有没有在谷歌上搜索过如何从旋转矩阵中获取欧拉角?你有没有在谷歌上搜索过如何从旋转矩阵中获取欧拉角?