学习之路

您所在的位置:网站首页 欧拉角旋转顺序变换 学习之路

学习之路

2024-02-28 12:16| 来源: 网络整理| 查看: 265

ZYZ和ZXZ通常可以避免死解情况,因此在六轴末端解算时常被用到

对于其如何旋转(内旋 - 计算右乘)在此篇文章有较好的图解   马同学

1.ZYZ 

2.ZXZ

ZXZ的公式经过计算有些许更改

3.ZYX

4.XYZ

这里建议无论是用Matlab/ python /C++进行计算都不要依靠现有函数 如Eigen Matlab的Robotic toolbox等计算欧拉角转旋转矩阵,还是自己手打一遍为妙,且弧度之间的计算对于精度往往有较高的要求

matlab代码

函数:

function euler_angles = M2A(R) % 计算第二个 CAC 角度 beta A1 = atan((R(1, 3)/-R(2, 3))); % 计算第一个 CAC 角度 alpha A2 = atan( sqrt(1-(R(3, 3)^2) )/ R(3, 3) ); % 计算第三个 CAC 角度 gamma A3 = atan((R(3, 1)/R(3, 2))); % 将角度转换为度 alpha_deg = rad2deg(A1); beta_deg = rad2deg(A2); gamma_deg = rad2deg(A3); % 输出结果 euler_angles = [alpha_deg, beta_deg, gamma_deg]; end function R = A2M(A) % 将角度转换为弧度 a = deg2rad(A(1)); b = deg2rad(A(2)); c = deg2rad(A(3)); % 计算旋转矩阵 R %R = [-sin(a)*cos(b)*sin(c)+cos(a)*cos(c), -sin(a)*cos(b)*cos(c)-cos(a)*cos(c), sin(a)*sin(b); % cos(a)*cos(b)*sin(c)+sin(a)*cos(c), cos(a)*cos(b)*cos(c)-sin(a)*sin(c), -cos(a)*sin(b); % sin(b)*sin(c), sin(b)*cos(c), cos(b)]; R = [ -sin(a)*cos(b)*sin(c)+cos(a)*cos(c), -sin(a)*cos(b)*cos(c)-cos(a)*cos(c), sin(a)*sin(b); cos(a)*cos(b)*sin(c)+sin(a)*cos(c), cos(a)*cos(b)*cos(c)-sin(a)*sin(c), -cos(a)*sin(b); sin(b)*sin(c), sin(b)*cos(c), cos(b)]; end

用法:

% 偏移量 OFFSET= [ 0.999983345362356 -0.989320929731509 0.005769914357140 -0.698 -0.002653709599899 0.877378951203345 0.479790718762544 -60.547 -0.005125116903033 -0.479798039699098 0.877363991897110 400.856 0 0 0 1 ] OFFSET_ABC = M2A(OFFSET)

3D Rotation Converter

矩阵计算器

用的比较多的几个网站连接



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3