欧拉角计算旋转矩阵的MATLAB函数——eul2rotm和angle2dcm区别


学惯导的人都知道怎么根据欧拉角或者姿态角计算旋转矩阵,直接照着公式两分钟就写好了代码。但是或许你没有注意到MATLAB中 eul2rotmangle2dcm两个函数的定义完全不一样, 两个函数算出来的旋转矩阵互为转置。MATLAB本身并未将两个函数的定义写得很清楚,经过一番搜索,终于搞清楚了原因。

一、eul2rotm和angle2dcm函数区别

参考问题Difference between angle2dcm and eul2rotm (same angle sequence, different result)里的回答:

  • eul2rotm函数来自于 “Robotics System Toolbox”,这个工具箱约定的旋转是矢量旋转或者点旋转(point rotation)
  • angle2dcm函数来自于“Aerospace Toolbox”,这个工具箱约定的旋转是坐标系旋转(frame rotation)

二、矢量旋转和坐标系旋转的区别

参考MATLAB官方文档Orientation, Position, and Coordinate Convention中的解释,两种旋转区别如下:

  • 矢量旋转或者点旋转(Point Rotation): 坐标系不动,但是点或者矢量进行旋转
  • 坐标系旋转(Frame Rotation): 点或者矢量不动,坐标系进行旋转

输入同样的旋转角度,矢量旋转和坐标系旋转结果相反。如下图,经过矢量旋转,坐标变成(a,b,c),而坐标系旋转的结果是(-a,b,c)。

在这里插入图片描述

三、MATLAB代码验证

参照上图,设个差不多的坐标,然后绕z轴转 - 45°。注意这两个函数默认都是ZYX的旋转方式,第一个角度是绕Z轴转的角度,以此类推。

test=[0 1 1];
r1 = eul2rotm([-pi/4 0 0]);
r2 = angle2dcm(-pi/4, 0, 0);

r1*test'
r2*test'

第一个结果为[ 0.7071 0.7071 1.0000] 。

第二个结果为[ - 0.7071 0.7071 1.0000],第一个数为负值。

四、参考资料

[1] Difference between angle2dcm and eul2rotm (same angle sequence, different result)
[2] Orientation, Position, and Coordinate Convention

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值