romary【学习SLAM】Matlab——旋转矩阵,旋转向量,四元数,欧拉
⾓之间的转换
基于Matlab现有函数下的内容
Matlab ——旋转矩阵,旋转向量,四元数,欧拉⾓之间的转换
旋转矩阵 dcm R
四元数 quat q = [q0 q1 q2 q3]
欧拉⾓ angle [row,pitch,yaw]/[r1,r2,r3]
注:以上表格是为了帮助理解的表⽰
roll(横滚) --X pitch(俯仰)--Y yaw(偏航/航向)-- Z
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
转四元数
旋转矩阵转四元数
asteriskq =dcm2quat(R);
欧拉⾓转四元数refu
q=angle2quat(r1,r2,r3,S);
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
转欧拉⾓
旋转矩阵转欧拉⾓
[r2,r2,r3]=dcm2angle(R, S)
注:得到的结果为弧度,若需要⾓度需进⼀步转化
四元数转欧拉⾓
[r1,r2,r3]=quat2angle([q0 q1 q2 q3],S)
注:S 的选择有12种,
【'ZYX','ZYZ’,‘ZXY’,‘ZXZ’,‘YXZ’,‘YXY’,‘YZX’,‘YZY’,‘XYZ’,‘XYX’,‘XZY’,‘XZX’】
S 默认 ‘ZYX'
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
visionary怎么用转旋转矩阵
四元数转旋转矩阵
R=quat2dcm([q0 q1 q2 q3])
欧拉⾓转旋转矩阵
R=angle2dcm(r1,r2,r3,S);
R=angle2dcm(yaw/180*pi,pitch/180*pi,roll/180*pi)
注:根据欧拉⾓是弧度/⾓度,选择以上操作
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
若已知旋转矩阵R,求四元数[q0 q1 q2 q2]
则对应的四元数为:
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
丈夫的英文
旋转矩阵及旋转向量相互转化 Rodrigues矩阵及matlab实现
处理三维旋转问题时,通常采⽤旋转矩阵的⽅式来描述。⼀个向量乘以旋转矩阵等价于向量以某种⽅式进⾏旋转。除了采⽤旋转矩阵描述外,还可以⽤旋转向量来描述旋转,旋转向量的长度(模)表⽰绕轴逆时针旋转的⾓度(弧度)。旋转向量与旋转矩阵可以通过罗德⾥格斯(Rodrigues)变换进⾏转换。
算法过程如下:
式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现:
matlab实现
% om=[0.02876123785972595215 -1.668149590492248535 -0.0360212959349155426]';
om=[ 0.0009597472380846738815 0.01455024257302284241 0.010445447638630867]';
theta=norm(om);
om=om./theta;
I=eye(3);
rom=[0 -om(3) om(2);
om(3) 0 -om(1);
-om(2) om(1) 0];
R = cos(theta)*I+(1-cos(theta))*om*om'+ sin(theta)*rom
q =dcm2quat(R)
matlab⾥有rotationVectorToMatrix和rotationMatrixToVector函数
以上为例
>> R=rotationVectorToMatrix(om)
R =
0.9998 0.0105 -0.0145
-0.0104 0.9999 0.0010
0.0146 -0.0009 0.9999
rotationVector = rotationMatrixToVector(R)lay back
rious什么意思rotationVector = -0.0010 -0.0146 -0.0104
---------------------------------------------
欧拉⾓与旋转矩阵转换 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
ca 'X'
y=[1,0,0;0,cos(b),-sin(b);0,sin(b),cos(b)];
ca 'Y'
y=[cos(b),0,sin(b);0,1,0;-sin(b),0,cos(b)];
ca '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的逆矩阵
需要注意的是,主动/被动旋转不等同于基坐标系、连体坐标系的变换,在主动旋转矩阵下,仍然要区分按照固定基坐标系坐标轴,还是按照旋转后的连体坐标新坐标轴旋转,按照右乘连体左乘基的⽅式进⾏计算complain是什么意思>南京美容
————————————————
参考资料
Quaternion kinematics for the error-state KF
barfoot《state estimation forrobotics》
袁信、郑锷《捷联式惯性导航原理》
以上书籍的下载链接链接: 密码:jdsz
刚体在空间中的⼀次旋转可以⽤旋转矩阵,四元数和旋转向量三种⽅式表⽰,以下总结三者的数学转化关系。
1.向量旋转公式
旋转向量的定义:⽅向是旋转轴,⼤⼩是旋转⾓的向量,表⽰刚体在空间中的⼀次旋转。
定义向量x绕单位旋转轴u旋转⾓度
,将向量绕u轴和垂直u轴分解,并利⽤向量的点乘的⼏何意义得到:
平⾏于u轴的分量在旋转中保持不变,垂直分量则旋转
⾓度,公式(48)到(49)的推导利⽤了正交基的⼏何关系和上式证明的模长相等。
2.旋转矩阵和旋转向量
2.1旋转矩阵微分和旋转向量的推导
smilence什么意思
相对于笔记1,利⽤哥⽒定理推导旋转矩阵的微分⽅程,这⾥给出了另外⼀种微分⽅程的推导,并从旋转⾓时间积分的⾓度给出⼀种旋转向量的定义。
2.2罗德⾥格旋转公式
利⽤李群SO(3)推导出以旋转向量表⽰的罗德⾥格旋转公式(Rodrigues rotation formula);其中计算时旋转轴u⽤哪个坐标系表⽰都是等价的,后⾯将证明。