学习之路 |
您所在的位置:网站首页 › 欧拉角旋转顺序变换 › 学习之路 |
ZYZ和ZXZ通常可以避免死解情况,因此在六轴末端解算时常被用到 对于其如何旋转(内旋 - 计算右乘)在此篇文章有较好的图解 马同学 1.ZYZ 2.ZXZZXZ的公式经过计算有些许更改 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 |