学习之路

编程入门 行业动态 更新时间:2024-10-07 14:28:06

学习<a href=https://www.elefans.com/category/jswz/34/1770107.html style=之路"/>

学习之路

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

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

1.ZYZ 

2.ZXZ

3.ZYX

这里建议无论是用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];
endfunction 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.8560                  0                   0                    1]OFFSET_ABC = M2A(OFFSET)

更多推荐

学习之路

本文发布于:2024-02-28 14:40:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之路

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!