欧拉角与旋转矩阵转换 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的逆矩阵

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

 

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab中,可以使用dcm2angle函数旋转矩阵转换欧拉角,也可以使用angle2dcm函数欧拉角转换旋转矩阵。需要注意的是,Matlab中的dcm2angleangle2dcm函数默认使用的是被动旋转矩阵,与主动旋转矩阵互为置。例如,如果有一个旋转矩阵Mat_t,可以使用dcm2angle函数将其转换欧拉角,代码如下: \[ra, rb, rc\] = dcm2angle(Mat_t, 'ZYX'); 其中,ra、rb、rc分别表示绕Z轴、Y轴和X轴的旋角度。需要注意的是,由于Matlab中采用的是被动旋,所以sin的符号和主动旋转矩阵相反。因此,如果需要将欧拉角转换旋转矩阵,可以使用Rot3函数,代码如下: y = Rot3('Z', rc) * Rot3('Y', rb) * Rot3('X', ra); 其中,'Z'、'Y'、'X'分别表示绕Z轴、Y轴和X轴旋,rc、rb、ra分别表示绕Z轴、Y轴和X轴的旋角度。这样就可以将欧拉角转换旋转矩阵。 #### 引用[.reference_title] - *1* [旋转矩阵欧拉角之间转换](https://blog.csdn.net/weixin_32236415/article/details/115848819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [欧拉角旋转矩阵转换 matlab 函数 angle2dcm dcm2angle 方向余弦矩阵 机器人坐标变换](https://blog.csdn.net/rocachilles/article/details/101270768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值